Wenn $ _POST ausgegeben wird


100

Ich habe ein Formular auf einer Seite, das an eine andere Seite gesendet wird. Dort wird geprüft, ob die Eingabemail gefüllt ist. Wenn ja, dann tun Sie etwas und wenn es nicht gefüllt ist, tun Sie etwas anderes. Ich verstehe nicht, warum immer gesagt wird, dass es gesetzt ist, auch wenn ich ein leeres Formular sende. Was fehlt oder ist falsch?

step2.php:

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

step2_check:

if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {    
    echo "N0, mail is not set";
}

6
Alle in Ihrem Formular vorhandenen textähnlichen Eingaben und Textbereiche werden an den Server gesendet, auch wenn ihre Werte leere Zeichenfolgen sind.
HypeJunction

Antworten:


222

Die meisten Formulareingaben werden immer festgelegt, auch wenn sie nicht ausgefüllt sind. Sie müssen daher auch die Leere überprüfen.

Da !empty()bereits für beide geprüft wird, können Sie Folgendes verwenden:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}

9
Diese Vergleichstabelle ist sehr hilfreich für Dinge wie diese php.net/manual/en/types.comparisons.php
A Star

2
Kleinigkeit ... Ich denke, es ist vorzuziehen, den !Operator in solchen Fällen zu meiden (leichter zu lesen, weniger Fehlerwahrscheinlichkeit usw.) und die Logik umzukehren ...if (empty()) {/* No */} else {/* Yes */}
MrWhite

25

Verwenden Sie !emptyanstelle von isset. isset gibt true zurück, $_POSTda das $_POSTArray superglobal ist und immer existiert (gesetzt).

Oder besser nutzen $_SERVER['REQUEST_METHOD'] == 'POST'


2
Sie sollten erwähnen, dass Sie BEIDE verwenden issetund !emptyFehler vermeiden. EDIT: Hoppla, es lernt anscheinend jeden Tag dann Ref
Touki

1
Ich habe es versucht und beides funktioniert gut. Warum ist $ _SERVER ['REQUEST_METHOD'] == 'POST' besser? Was macht es genau? Kann es sich auf eine bestimmte Eingabe beziehen oder ist es generisch für das Formular?
Nrc

3
$_SERVER['REQUEST_METHOD']stellt sicher, dass der Benutzer das Formular gesendet hat. $_POSTkann auch in diesem Fall leer sein. Betrachten Sie dieses Formular: Wenn <form method="post"></form>Sie es senden, wird nichts an die Aktion gesendet, der Anforderungstyp jedoch post. Oder es kann mit Locken gemacht werden : curl -X POST http://example.com/processor.php. Wenn der Prozessor Code wie enthält echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, werden Sie sehenPOST true
Nemoden

5

Von php.net , isset

Gibt TRUE zurück, wenn var vorhanden ist und einen anderen Wert als NULL hat, andernfalls FALSE.

leerer Raum wird als gesetzt betrachtet. Sie müssen empty () verwenden, um alle Nulloptionen zu überprüfen.


2

Wenn Sie das Formular leer senden, wird $ _POST ['mail'] weiterhin gesendet, der Wert ist jedoch leer. Um zu überprüfen, ob das Feld leer ist, müssen Sie überprüfen

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }

Ich kopiere, füge den Code ein und denke, dass es nicht funktioniert? Hast du es überprüft?
Nrc

2

Fügen Sie dem Eingabetextformular das folgende Attribut hinzu : required="required". Wenn das Formular nicht ausgefüllt ist, kann der Benutzer das Formular nicht senden.

Ihr neuer Code lautet:

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail" required="required"/> <br />
<input type="password" name="password" required="required"/><br />
<input type="submit"  value="continue"/>
if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
}

2

Sie können einfach verwenden:

if($_POST['username'] and $_POST['password']){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

Alternativ können Sie empty () verwenden.

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

Nach den PHP-Typvergleichstabellen haben Sie absolut Recht. Ein einfacher Boolescher Wert erledigt die Arbeit der leeren Funktion, um die leere Zeichenfolge zu überprüfen.
viery365

Ich weiß, dass dies eine alte Antwort ist, aber die erste Methode kann zu einer undefinierten Indexbenachrichtigung führen.
ICE

1
@ICE Es kann leicht umgangen werden, indem den Variablen Folgendes vorangestellt wird @, dh : @$_POST['username']. Vielen Dank, dass Sie das bemerkt haben.
CONvid19

2

Verwenden Sie !empty()anstelle von isset(). Denn isset()in Ihrem Fall wird immer true zurückgegeben.

if (!empty($_POST["mail"])) {
    echo "Yes, mail is entered";    
} else {  
    echo "No, mail is not entered";
}

1

Vielleicht können Sie dieses versuchen:

if (isset($_POST['mail']) && ($_POST['mail'] !=0)) { echo "Yes, mail is set"; } else { echo "No, mail is not set"; }


1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>

3
Sie sollten erklären, warum Ihr Code die Frage des OP beantwortet.
Markus

1

Denken wir, dies ist Ihr HTML-Formular in step2.php

step2.php

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

Ich denke, Sie brauchen es für Ihre Datenbank, damit Sie Ihren HTML-Formularwert der PHP-Variablen zuweisen können. Jetzt können Sie Real Escape String verwenden und unten muss Ihr sein

step2_check.php

if(isset($_POST['mail']) && !empty($_POST['mail']))
{
$mail = mysqli_real_escape_string($db, $_POST['mail']);
}

Wobei $ db Ihre Datenbankverbindung ist.


1

Überprüfen Sie, ob das FORMULAR zuerst übermittelt wurde und dann das Feld. Sie sollten das Feld auch bereinigen, um Hacker zu verhindern.

form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  id="SubmitForm" name= "SubmitForm" value="continue"/>
</form>

step2_check:


if (isset($_POST["SubmitForm"]))
   {
   $Email =  sanitize_text_field(stripslashes($_POST["SubmitForm"]));
   if(!empty($Email))
     echo "Yes, mail is set"; 
   else
     echo "N0, mail is not set";
   } 
}

0

Um die gestellte Frage zu beantworten: isset und empty zusammen ergeben drei Bedingungen. Dies kann von Javascript auch mit einem Ajax-Befehl verwendet werden.

$errMess="Didn't test";   // This message should not show
if(isset($_POST["foo"])){ // does it exist or not
    $foo = $_POST["foo"]; // save $foo from POST made by HTTP request
    if(empty($foo)){      // exist but it's null
        $errMess="Empty"; // #1 Nothing in $foo it's emtpy

    } else {              // exist and has data
        $errMess="None";  // #2 Something in $foo use it now
      }
} else {                  // couldn't find ?foo=dataHere
     $errMess="Missing";  // #3 There's no foo in request data
  }

echo "Was there a problem: ".$errMess."!";

0

Sie können dies versuchen:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}

Sie müssen Ihre Antwort erklären. SO existiert nicht nur, um Fragen zu beantworten, sondern um Menschen zu erziehen
Machavity

0
<form name="new user" method="post" action="step2_check.php"> 
  <input type="text" name="mail" required="required"/> <br />
  <input type="password" name="password" required="required"/><br />
  <input type="submit"  value="continue"/>
</form>

<?php
if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
?>

0

Du kannst es versuchen,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.