所以我有一个表单,用户可以看到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中那样设置为阻塞,这是可能的还是我需要做一些不同的事情?
干杯!
答案 0 :(得分:1)
PHP发生在服务器上,Javascript发生在客户端上,这就是问题的症结所在。服务器没有办法(没有更多的编码和状态跟踪)来知道客户端是否正在查看某些内容。
我建议:
保持一般的应用程序结构(不要进行状态跟踪,这需要更多的JS / jQuery /等)
也许将错误代码放在文本框中,以便错误仅显示文本框是否
使用完全实现guest(超出第一个?)是可选的来对您的系统进行编码,因此如果有部分名称,则只应在服务器端进行访客检查(实际上,如果是访客,则会显示错误是空白,这将经常发生)。 2-6客人的空白名称可能完全合法。