如果条件产生问题,在PHP中使用或(||)

时间:2010-03-10 08:50:51

标签: php validation

我做过这样的事情:

  <form action="validate.php" method="get">
Id :<input type="text" name="pID"/><br/><br/>
Name :<input type="text" name="pName"/><br/><br/>
Description :<input type="text" name="pDesc"/><br/><br/>
Price :<input type="text" name="pPrice"/><br/><br/>
<input type="submit" name="pSub"/>
</form>

我的validate.php包含:

<?php 

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice'])){
            if(is_numeric($_GET['pID']) || is_numeric($_GET['pPrice']))
            {
                echo "</br>Your ID :".$_GET["pID"]."</br>";
                echo "Name is :".$_GET["pName"]."</br>";
                echo "Description :".$_GET["pDesc"]."</br>";
                echo "and Price :".$_GET["pPrice"]."</br>";
            }
            else{echo "Pls See That ID and Price are Numerical";}
}else{
echo "Fill up All The Values";
}
?>

无法正常工作,

如果条件不能正常工作,则为第1天 即。如果我留空“名称”输入字段消息应该说来 “填写所有值”......而不是显示输入列表

还有其他方法来验证表单(PHP)

5 个答案:

答案 0 :(得分:4)

您使用了错误的运算符:||表示“逻辑OR”;你似乎在寻找的是&&,这是“逻辑和”。

代码完全按照告诉要做的(see the documentation);你意图其他东西的事实与计算机无关:

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice']))

表示“如果pID不为空或者pName不为空或......”;只要一个或多个字段不为空,条件的计算结果为真。

你可以做些什么来实现你的意思:

  • 用AND(&&
  • 替换OR
  • 使用if (!(empty($_GET['pID']) || empty($_GET['pID'] ...)) - 请注意整个表达式在括号中取消

(请阅读De Morgan's laws以了解为何这两种解决方案相同)

答案 1 :(得分:1)

改变条件可能会更好,例如:


if(empty($_GET['pID']) || empty($_GET['pName']) || empty($_GET['pDesc']) || empty($_GET['pPrice'])) {
   echo "Please fill up all the values";
} else {
   // Do other validation.
}

这样,在您做其他事情之前,您知道您的输入是正确的。显然我没有对此进行测试,但它应该按预期工作。您之前说过的是询问是否有任何输入不为空,请进行额外验证。正如其他一位评论者所解释的那样,如果你想这样做,你应该使用&amp;&amp;而不是||。

改变它只是让它更清晰一点!

答案 2 :(得分:1)

这是您的代码的逻辑问题。使用||在这种情况下意味着如果这些输入中的任何一个包含值,则满足第一个条件。你想要做的是AND,而不是OR,这样只有在所有输入都是空的情况下才能满足第一个条件。

我不记得AND操作符对于PHP是什么,因为它已经很长时间了,但它可能是&amp;&amp;。

答案 3 :(得分:0)

问题已经得到解答,但还有一件事,

我建议您使用$ _POST而不是$ _GET,因为$ _POST比使用HTML表单更安全。你可以在互联网上查找。 这是一个链接,第一个答案说明了一切:Difference between $_POST & $_GET

答案 4 :(得分:-3)

这是错误的

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice'])){}

你需要这样做:

if (!empty($_GET['pID'], $_GET['pName'], $_GET['pDesc'], $_GET['pPrice'])){}

根本不需要制作OR。此外,您最好检查是否有任何给定值为空并在此处抛出错误。