2016-09-15 7 views
1

Ich benutze eine externe PHP-Datei im "action" -Feld meines HTML-Formulars, so dass die in der php-Datei genannten Aktionen beim Klicken auf den Submit-Button ausgeführt werden.PHP isset ('submit') gibt immer FALSE zurück

Dafür habe ich die isset() Funktion in der PHP-Datei verwendet.

Allerdings stelle ich fest, dass die isset Funktion immer FALSE zurückgibt, was zur Ausführung der else-Anweisung führt (wie im Konsolenprotokoll zu sehen).

Wenn ich die isset() Funktion (und damit die if-else Anweisungen) entfernen, dann funktioniert der Code wunderbar.

Können Sie bitte das Problem in meinem Code überprüfen?

Auch habe ich in anderen Beiträgen gesehen, dass ich mit isset() zusammen ein anderes Argument verwenden müssen, beispielsweise

if(isset($_POST['submit']) && !empty($_POST["xyz"])) 

ist dies überhaupt erforderlich?

S.S .: Ich bin immer noch in der Anfangsphase der Seitenentwicklung und daher bitte ich Sie, die Sicherheitsbedenken meines Codes zu ignorieren, was ich anerkenne, dass er existiert. :)

Meine Sub-Codes:

Meine HTML Form:

<form id="info-form" method="POST" action="form-submit.php"> 
    <label for="Name">What is your Name? </label> 
    <input required type="text" name="name" placeholder="Enter your full name here." /> 

    <label for="Email">What is your email ID? </label> 
    <input required type="email" name="email" placeholder="[email protected]" /> 

    <label for="mobile">What is your 10-Digit Mobile Number? </label> 
    <input required type="text" name="mobile" maxlength="10" /> 

    <button name="submit-form" type="submit" class="btn btn-lg btn-success"><i class="fa fa-paper-plane" aria-hidden="true"></i> 
   Submit 
    </button> 
    <button type="reset" class="btn btn-lg btn-warning"><i class="fa fa-undo" aria-hidden="true"></i> 
     Reset 
    </button> 
</form> 

Meine Form-submit.php Datei:

<?php 
    if(isset($_POST['submit-form'])) 
    { 
     require("database-connect.php"); 

     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $mobile = $_POST['mobile']; 

     $sql = "INSERT INTO tbl_details ". 
       "(name,email_id,mobile_number) ". 
       "VALUES ". 
       "('$name','$email','$mobile')"; 

     mysql_select_db('db_info'); 
     $return = mysql_query($sql, $connect); 

     if(! $return) 
     { 
      die('Could not enter data: ' . mysql_error()); 
     } 

     echo "Entered data successfully\n"; 
     mysql_close($connect); 
    } 

    else 
    { 
     echo "Not Set\n"; 
    } 
?> 
+4

'submit'! =' Submit-form' (der Name Ihres Submit-Buttons). Sie möchten also 'isset ($ _ POST ['submit'-form'])' 'in Ihrer Anweisung verwenden. – Qirel

+0

Siehe http://stackoverflow.com/q/4559925/476 – deceze

+0

Auch eine Randbemerkung zu Sicherheits- und Programmierstandards: 'mysql_ *' Funktionen sind seit PHP 5.5 veraltet (und ** in PHP 7 vollständig entfernt)) und Sie sollten [aufhören, sie zu verwenden] (http://stackoverflow.com/q/12859942), wenn Sie können. Sie sollten eine andere API wählen, mit der Sie vorbereitete Anweisungen verwenden können (was Sie * wirklich bei Benutzereingaben tun sollten), wie zB 'mysqli_ *' oder PDO - siehe [Auswahl einer API] (http://php.net /manual/de/mysqlinfo.api.choosing.php). Grundsätzlich sind Sie offen für SQL-Injection - lesen Sie unter [Wie kann ich verhindern, SQL-Injektion in PHP?] (Http://stackoverflow.com/q/60174/) – Qirel

Antwort

4

Sie sollten wirklich nicht auf die Existenz eines Absenden-Schaltfläche Wert zu Beginn mit prüfen. Wie Sie sehen, sollten einige kleine kosmetische Änderungen am Frontend, wie zum Beispiel die Art des Buttons, um ein Formular zu senden, keine Auswirkungen auf das Backend haben. Die Übergabeschaltfläche und ihr Wert sind für die Verarbeitung eines Formulars ziemlich irrelevant.

Was Sie wirklich wollen, auf dem Server zu überprüfen, ist entweder, wenn die Anforderung eine POST-Anforderung war, oder ob die Werte, die mit denen Sie arbeiten wollen, sind so eingestellt, oder beides:

if ($_SERVER['REQUEST_METHOD'] == 'POST') … 
if (isset($_POST['name'], $_POST['email'], $_POST['mobile'])) … 

Die vernünftigste Sache wäre:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('HTTP/1.0 405 Method Not Allowed'); 
    exit; 
} 

oder:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('Location: myform.html'); 
    exit; 
} 

Nachdem Sie behauptet haben, dass du bist mit der richtigen HTTP-Methode zu tun, um Ihre Daten:

$data = filter_input_array(INPUT_POST, [ 
    'name' => FILTER_DEFAULT, 
    'email' => FILTER_VALIDATE_EMAIL, 
    'mobile' => FILTER_DEFAULT 
]); 

Wie Sie sehen, brauchen Sie nicht einmal mit $_POST direkt überhaupt zu interagieren. Siehe http://php.net/filter_input_array.

+0

Danke @deceze. Ich kann Ihnen nicht genug danken. Du hast nicht nur meine Frage beantwortet, sondern auch einen besseren Weg gefunden, Dinge zu tun, was für einen Anfänger wie mich entscheidend ist. Du hast mir eine wichtige Lektion beigebracht - "ein paar kleine kosmetische Änderungen am Frontend ... sollten keine Auswirkungen auf das Backend haben". Danke vielmals. Übrigens, wenn es für andere Anfänger wie mich nicht klar ist, hat die Lösung in dieser Antwort funktioniert! Prost. – ABor

+1

Tipp: Erfahren Sie mehr über das HTTP-Protokoll und lernen Sie, wie Sie HTTP-Anfragen * auf Ihrem Server behandeln. Gewöhnen Sie sich an, Ihren Server zu testen, indem Sie rohe HTTP-Anforderungen mit curl (oder einem anderen von Ihnen bevorzugten Tool) ausgeben. Veranlassen Sie Ihren Server, sich wie ein ordnungsgemäßer HTTP-Endpunkt zu verhalten. Es wird Ihre Anwendungen wesentlich übersichtlicher machen, als wenn Sie an HTML-Schaltflächen und -Formulare denken. – deceze

+0

Danke für den Tipp. :) – ABor

0

Ändern Sie Ihre Schaltfläche Etikett so. Ich hoffe, es wird dir helfen!

<input name="submit-form" value="Submit" type="submit" class="btn btn-lg btn-success"> 

Vielen Dank!

+1

Warum sollte er die '

+0

Der einzige Zweck einer Übermittlungsschaltfläche besteht darin, die Daten des HTML-Formulars an das serverseitige Skript zu senden, das im ACTION-Attribut des Formulars angegeben ist. –

+1

Ja ... also warum sollte es ein '' sein? '

0

Sie sollten ein input -Element anstelle einer Schaltfläche verwenden.

<input name="submit-form" value="ButtonText" type="submit" class="btn btn-lg btn-success" /> 

Der Wert eines Eingangs ist der Text es dem Benutzer anzeigt:

<button name="submit-form" type="submit" class="btn btn-lg btn-success"> 
<i class="fa fa-paper-plane" aria-hidden="true"></i>Submit 
</button> 

Sollte durch eine Eingabe wie folgt ersetzt werden.

Auch in Ihrer Frage erwähnen Sie isset('submit') und isset($_POST['submit']), während andere recht haben und das ist nicht ein vorhandener Name in Ihrem HTML-Code, Ihr PHP-Code die richtigen isset($_POST['submit-form']) enthält. Es verursacht eine wenig Verwirrung für einige ‚quick‘ Leser ...


Was die zusätzlichen !empty($_POST["xyz"])), für Ihre Zwecke (Überprüfung, ob das Formular ein Postback ist), das wird nicht nötig sein.

+1

'

+0

@RocketHazmat Ich wusste das nicht ... danke – x13

+0

Auch der 'Wert' einer' ' ist * sowohl * der Text angezeigt und der Wert übermittelt. '

Verwandte Themen