2010-03-10 57 views
1

我已经做了这样的事情:使用或(||)在PHP如果条件产生问题

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

如果条件无法正常工作,则为第一个 即。如果我留下空白的“名称”输入字段消息应该有所说 “填满所有的值”......而不是它显示输入列表

是否有任何其他方式来验证窗体(PHP)

回答

4

您正在使用错误的运算符:||表示“逻辑或”;你似乎在寻找的是&&,即“逻辑与”。

该代码确实是你告诉它要做的(see the documentation);事实上,你打算别的不相关的电脑:

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

的意思是“如果PID是不为空或者PNAME不为空或者......”;只要一个或多个字段不为空,条件评估为true。

,你能做些什么来让你的意思:

  • 更换或用AND(&&
  • 使用if (!(empty($_GET['pID']) || empty($_GET['pID'] ...)) - 注意,整个表达式在括号否定

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

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

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

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

+0

好点:这种形式更具可读性。 – Piskvor 2010-03-10 09:19:37

1

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

我不太清楚PHP的AND运算符是什么,因为它已经很长时间了,但它可能是& &。

-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值的。此外,你最好检查是否有任何给定的值是空的,并抛出错误。

+0

该语法不起作用,只是测试它。 – Psytronic 2010-03-10 09:04:26

+0

@Fractalizer:不幸的是,这不是有效的PHP代码。请参阅文档:http://uk.php.net/manual/en/function.empty.php'empty()'不需要可变参数,它只需要一个参数。 – Piskvor 2010-03-10 09:06:19

+0

是的..没有工作 – dexter 2010-03-10 10:11:55

0

的问题已经得到了回应,但有一两件事,

我建议你使用$ _POST而不是$ _GET因为$ _ POST是方法更安全,因为你使用HTML表单。你可以在互联网上查看它。 这里是一个链接,第一个答案说这一切:Difference between $_POST & $_GET