2012-04-01 2 views
1

Das Problem:Einfaches PHP Formular senden - was ist falsch mit diesem bedingten wenn und logische &&?

wenn ich das HTML-Formular und ein Textfeld leer gelassen wird
dann nicht will ich es das Echosegment gehen,
aber das Problem ist, es gehen wird.

<?php 
     if(!isset($_POST['submit']) && empty($_POST['moon']) && empty($_POST['planet'])) 
     { 
?> 

     <form name="form2" method="post" action="<?php echo($_SERVER["PHP_SELF"]);?>"> 
      <div> 
       Write a planet name: <input name="planet" type="text"><br> 
       Its moon: <input name="moon" type="text"> 
      </div> 
      <div> 
       <input type="submit" name="submit" value="submit"> 
      </div> 
     </form> 


<?php 
     }else{ 

      echo("Planet: ".$_POST['planet']. "<br>"); 
      echo("Moon: ". $_POST['moon'] . "<br>"); 
      echo "Successful."; 

      } 
?> 

Wie Sie wissen isset() bestimmt, ob eine Variable set und not null ist jedoch nicht geprüft, wenn es leer ist.

Während Logik meine if-Anweisung scheint, ich modifiziert es aus:
if(!isset($_POST['submit']) && empty($_POST['moon']) && empty($_POST['planet']))

An:

  • if(!isset($_POST['submit']) && ($_POST['planet']=='') && ($_POST['moon']==''))
  • if(!isset($_POST['submit']))
  • if(!isset($_POST['planet']) && !isset($_POST['moon']))
  • if(empty($_POST['moon']) && empty($_POST['planet']))

und keiner von ihnen funktionierte.


Also mache ich etwas falsch mit meiner if-Anweisung? Wie kann ich nicht weiter zum Else-Segment gehen, solange ein Textfeld leer ist? ohne mehr wenn und keine nested Aussagen bitte.

Antwort

2

Wenn Sie ein Formular einreichen, wird die Submit-Button eingestellt werden, so wird isset($_POST['submit'])wahr sein, deshalb wird !isset($_POST['submit'])falsch sein.

Beim Ausführen einer if-Anweisung mit dem & & -Vergleich müssen alle Bedingungen wahr sein, um diesen Codeblock auszuführen, andernfalls wird die else-Anweisung ausgeführt.

Was Sie tun müssen, ist tatsächlich 2 Vergleichsprüfungen. Einmal, um zu sehen, ob das Formular nie vorgelegt wurde und eine zu sehen, ob es ist, und die Textfelder sind leer:

<?php 

    // Check if form was submitted 
    if(!isset($_POST['submit']) 
    { 
     // Display the form 
    } 
    else 
    { 
     // Form was submitted, check if values are empty 
     if(trim($_POST['planet'])=="" || trim($_POST['moon'])=="") 
     { 
     // One or more value is empty, do something 
     } 
     else 
     { 
     // Process form 
     } 
    } 

?> 

Ich weiß, Sie versuchen, Verschachtelung zu vermeiden, aber um die Logik reibungslos zu fließen, und der Code, um lesbar zu bleiben, ist dies ein notwendiges Übel.

+0

" Wenn ich eine if-Anweisung mit der && Vergleich, alle Bedingungen müssen wahr sein, um diesen Block auszuführen "ist direkt auf den Punkt. Das war klar. Vielen Dank für Ihren Ratschlag, um das Nisten nicht zu vermeiden. – compliance

1

ändern

if(!isset($_POST['submit']) && empty($_POST['moon']) && empty($_POST['planet'])) 

Um

if(!isset($_POST['submit']) || (empty($_POST['moon']) || empty($_POST['planet']))) 

Dann, wenn Sie mit einreichen entweder Textbox leer ist, wird die Form erneut anzuzeigen. Wenn beide Textfelder ausgefüllt sind, sehen Sie den else-Teil.

0

Ihr Problem ist, dass if(!isset($_POST['submit'])) immer festgelegt wird, wenn das Formular übermittelt wird - das stimmt also. Möglicherweise möchten Sie auch die && in || ändern. Mit || Du sagst ODER, also sag, wenn jemand leer ist, dann mach das, sonst tu das.

+0

Danke. Ich merke auch, dass wenn wir den Vergleich umkehren (IF Echo ELSE Anzeige HTML Formular), dann müssen wir '&&' wie in diesem Fall '||' wird nicht funktionieren so umgekehrt wird: 'if (isset ($ _ POST ['submit ']) &&! leer ($ _ POST [' planet ']) &&! leer ($ _ POST [' moon '])) '' // echo ergebnis' else '// html form' – compliance