如何使用PHP检测元素是否可见?

时间:2014-11-16 00:26:57

标签: php forms

所以我有一个表单,用户可以看到6个字段中的2个。然后,用户可以单击按钮以显示其他字段。

每个字段使用以下PHP验证(注意:preg_match用于确保它们已输入空格,因为它是完整的名称字段):

$multipleFormErrors = array();
if (!isset($firstGuestName) || empty($firstGuestName) || !preg_match("/ /",
    $firstGuestName)) {
  $multipleFormErrors["firstGuestName"] = "You have not entered your full name.";
}
if (!isset($secondGuestName) || empty($secondGuestName) || !preg_match("/ /",
    $secondGuestName)) {
  $multipleFormErrors["secondGuestName"] = "You have not entered guest #2's full
  name.";
}
if (!isset($thirdGuestName) || empty($thirdGuestName) || !preg_match("/ /",
    $thirdGuestName)) {
  $multipleFormErrors["thirdGuestName"] = "You have not entered guest #3's full name.";
}

等到第6位客人。

然后使用以下内容将结果回显给用户:

if (isset($_POST["multipleSubmit"])) {
  if ($multipleFormErrors) {
    echo "<div class=\"errors\">";
    echo "Please fix the following errors:";
    echo "<ul>";
    foreach ($multipleFormErrors as $error) {
      echo "<li>";
      echo $error;
      echo "</li>";
    }
    echo "</ul>";
    echo "</div>";
  }
}

这里的问题是,即使用户看不到3到6个客人,也会显示所有错误。因此,如果他们提交的表单只填写了最初的2位客人,则会收到错误,因为客人3 - 6的值为空字符串。我认为解决这个问题的方法是让PHP检测显示值是否像在JS中那样设置为阻塞,这是可能的还是我需要做一些不同的事情?

干杯!

1 个答案:

答案 0 :(得分:1)

PHP发生在服务器上,Javascript发生在客户端上,这就是问题的症结所在。服务器没有办法(没有更多的编码和状态跟踪)来知道客户端是否正在查看某些内容。

我建议:

  • 保持一般的应用程序结构(不要进行状态跟踪,这需要更多的JS / jQuery /等)

  • 也许将错误代码放在文本框中,以便错误仅显示文本框是否

  • 使用完全实现guest(超出第一个?)是可选的来对您的系统进行编码,因此如果有部分名称,则只应在服务器端进行访客检查(实际上,如果是访客,则会显示错误是空白,这将经常发生)。 2-6客人的空白名称可能完全合法。