问题:
如果我提交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
陈述,请不要更多。
答案 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,所以说如果有人是空的,那么就这样做,否则就这样做。