2014-11-16 49 views
-2

所以我有一个窗体,用户可以看到6个字段中的2个。用户然后可以点击一个按钮来显示其他字段。如何使用PHP检测元素是否可见?

每个字段使用以下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

你的PHP没有“可见”的概念。该页面位于用户的浏览器中,与您的PHP生成的HTML无关。 –

回答

1

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

我建议:

  • 保持你的一般应用结构的方式是(不这样做,状态跟踪,这将需要更多的JS/jQuery的/等)

  • 也许将错误代码与文本框相关联,以便仅在文本框出现错误时才显示错误代码

  • 对系统进行编码,完全意识到客人(超出第一个?)是可选的,因此客人检查应该只发生在服务器si如果存在部分名称(如果是,则错误显示客人是空白的,这通常会发生)。客人2-6的空白名称可能完全合法。

+0

所有好主意,非常感谢! –

相关问题