PHP - 检查是不是填写了两个表单字段之一?
Posted
技术标签:
【中文标题】PHP - 检查是不是填写了两个表单字段之一?【英文标题】:PHP - Check if one of two form fields is filled?PHP - 检查是否填写了两个表单字段之一? 【发布时间】:2013-12-29 20:00:12 【问题描述】:我的表单有电话和电子邮件字段。 许多人可能不想/不能两者兼得, 所以我想,验证器只需要 这两个填充之一,而不是要求两个都填充。
我尝试过考虑不同的方法来做到这一点,但我对 php 还是很陌生, 所以我什么都带不来。
这可能吗?
if ($_SERVER["REQUEST_METHOD"] == "POST")
if (empty($_POST["name"]))
$nameErr = "Name is required";
else
$name = test_input($_POST["name"]);
if (empty($_POST["email"]))
$emailErr = "Email is required";
else
$email = test_input($_POST["email"]);
if (empty($_POST["phone"]))
$phone = "";
else
$website = test_input($_POST["website"]);
if (empty($_POST["comment"]))
$comment = "";
else
$comment = test_input($_POST["comment"]);
谢谢。
【问题讨论】:
你能把代码编辑成问题吗? 有可能。你试过什么吗?向我们展示您到目前为止所做的努力,以便我们更好地为您提供帮助。 “这是我的验证器。” - 不,那是“a”验证器。向我们准确展示您正在使用的内容,并将该代码放入您的问题中。 对不起。现在用代码更新。 如果您想检查用户是否填写了一个或任何(字段),您不需要使用所有这些条件,只需使用OR
分隔您想要继续使用的条件即可运算符 => ||
【参考方案1】:
正如您的标题所述,填写了 1 / 2 个表单域。
$i = 0; // PUT THIS BEFORE YOUR IF STATEMENTS
在您的陈述中:
if (empty($_POST["phone"]))
$phone = "";
else
$i++; // PUT THIS IN ALL YOU WANT TO COUNT, IT WILL ADD 1 to $i EACH TIME YOU CALL IT
$website = test_input($_POST["website"]);
现在结束,如果
// YOU NEED TO CHANGE YOUR NUMBERS TO WHATEVER COUNT YOU WANT
if ($i < 2) // IF $i IS LESS THAN 2
// YOUR CODE HERE
else // IF $i IS 2 OR MORE
// YOUR CODE HERE
希望这有点用处!
或者如上所述,您可以使用
if (@$A && @$B) // REQUIRES BOTH TO BE TRUE
// YOUR CODE HERE
elseif (@$A || @$B) // REQUIRES ONLY ONE TO BE TRUE
// YOUR CODE HERE
else // NONE ARE TRUE
// YOUR CODE HERE
如果您想知道上面的@
标志,它们只是检查它们是否已设置,您可以将代码更改为您在上面使用的!empty($A)
。将!
放在空函数之前检查它是否为假或$A
是否实际设置。
【讨论】:
你能帮我减轻一点吗?所以当我得到它时,'i++' 基本上在柜台上加了'2',对吗?只要“计数器”显示超过 2,它就会运行“if”语句中的代码? @user109899$i++
将 1 添加到 $i
,所以如果它被调用两次,它的值为 2。如果你在两个可选字段中都有它,那么如果 $i为0,均未填写; 1 表示拥有;和 2 表示他们都有。
这对你有用吗?如果不让我知道,我会提供更多,如果是,你能接受答案吗?【参考方案2】:
如果我必须像你一样检查表格,我会这样做:
$res = '';
if(empty($_POST['name']))
$res .= 'The name is required.<br>';
if(empty($_POST['email']))
$res .= 'The email is required.<br>';
if(empty($_POST['phone']) && empty($_POST['email']))
$res .= 'You need to enter phone or email.<br>';
if(strlen($res) > 0)
echo 'We have these errors:';
echo $res;
else
echo 'No Errors!';
如果您希望每次只显示一个错误,请使用以下代码:
$res = '';
if(empty($_POST['name']))
$res = 'The name is required.<br>';
elseif(empty($_POST['email']))
$res = 'The email is required.<br>';
elseif(empty($_POST['phone']) && empty($_POST['email']))
$res = 'You need to enter phone or email.<br>';
if(strlen($res) > 0)
echo $res;
else
echo 'No Error!';
即使我认为这是非常基本的,我也会解释提到的部分,即使你可以从 php.net 中查找它:
$res .= 'The name is required';
“.=”运算符将“名称是必需的”部分添加到变量 $res。如果这是第一次发生,该变量将为空,因为我将它初始化为一个空字符串。对于每一行,另一个错误消息将添加到字符串中。
if(strlen($res) > 0)
strlen() 将返回 $res 中字符串的长度。如果没有发生错误,它仍然是空的,所以 strlen() 将返回 0。
【讨论】:
他上面说他是全新的,你正在使用诸如strlen
之类的功能,然后使用.=
而不解释你使用它们的目的,它没有帮助。只是从我的第一次经历说起。
丹佛威廉是对的。请解释代码。我的验证器刚刚从 W3Schools 复制...
完成。还有问题吗?以上是关于PHP - 检查是不是填写了两个表单字段之一?的主要内容,如果未能解决你的问题,请参考以下文章