我做过这样的事情:
<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)
答案 0 :(得分:4)
您使用了错误的运算符:||
表示“逻辑OR”;你似乎在寻找的是&&
,这是“逻辑和”。
代码完全按照告诉要做的(see the documentation);你意图其他东西的事实与计算机无关:
if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice']))
表示“如果pID不为空或者pName不为空或......”;只要一个或多个字段不为空,条件的计算结果为真。
你可以做些什么来实现你的意思:
&&
)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。此外,您最好检查是否有任何给定值为空并在此处抛出错误。