简单的PHP表单提交 - 这个条件有什么问题,如果和逻辑&&amp ;?

时间:2012-04-01 01:08:53

标签: php if-statement

问题:

如果我提交html表单并且文本框留空了 然后我不希望它进入回声段,
但问题是它确实在继续。

<?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.";

            }
?>

如您所知isset()确定变量是set还是not null,但不会检查它是否为空。

虽然逻辑似乎是我的if语句,但我修改了它:
if(!isset($_POST['submit']) && empty($_POST['moon']) && empty($_POST['planet']))

要:

  • 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']))

并且没有一个工作。

左,我的if语句出错了吗?如果文本框为空,我怎么能不让它进入Else段?如果没有nested陈述,请不要更多。

3 个答案:

答案 0 :(得分:2)

当您提交表单时,系统会设置提交按钮,因此isset($_POST['submit'])为真,因此!isset($_POST['submit']) false

使用&amp;&amp;和/或比较,所有条件必须为true才能执行该代码块,否则它将转到else语句。

您需要做的是实际进行2次比较检查。一旦看到表单是否从未提交过,并查看表单是否存在,文本框是否为空:

<?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
      }
   }

?>

我意识到你正试图避免嵌套,但为了使逻辑顺利流动,并且代码保持可读性,这是一个必要的恶魔。

答案 1 :(得分:1)

更改

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

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

然后,如果您提交的文本框为空,则会重新显示该表单。如果两个文本框都已填写,您将看到else部分。

答案 2 :(得分:0)

您的问题是,在提交表单时始终设置if(!isset($_POST['submit'])) - 这是真的。您也可以将&&更改为||。通过使用||你说OR,所以说如果有人是空的,那么就这样做,否则就这样做。