PHP - 检查两个表单字段中的一个是否已填满?

时间:2013-12-11 17:33:26

标签: php forms validation

我的表单包含电话和电子邮件字段。 许多人可能不想/能够同时放两者, 所以我想,验证器只需要 其中一个被填满,而不是要求两者都填满。

我已经尝试过不同的方法来做这件事,但我对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"]);}
}

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果我必须检查像你这样的表格,我会这样做:

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