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 - 检查是不是填写了两个表单字段之一?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中提交表单时如何保留输入字段中的值?

用户通过PHP填写表单后如何自动生成页面?

根据自动完成选择填写表单集的其他两个字段

检查是不是所有必填字段都填写在特定的 div 中

PHP表单,如果填写不正确,所有字段都会自行清除

PHP:检查任何已发布的变量是不是为空 - 表单:所有字段都是必需的