PHP多页面表单验证

时间:2016-05-10 10:46:36

标签: php html forms

这是一个棘手的问题,所以我会尽我所能。我是一个菜鸟,对PHP知之甚少,所以要善良:D

我想验证作为表单处理程序的页面上的表单,例如我的第一页表单(取自w3schools):          

<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

所以'welcome.php'是我的'POST'表单处理程序页面。但是在这个页面上我还想要更多的表单,在这个页面上我想要验证它上面的表格。比如说一些形式如:

 <form method="post" action='?php echo        htmlspecialchars($_SERVER["PHP_SELF"]);?>'>
 <input type ="text" name="newBalance"><span class="error">*<?php echo    $balanceErr;?></span>
 </form>

所以我会有一些PHP验证,如:     

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["newBalance"])) {
    $balanceErr = "Balance is required";
  } else {
     $balance = test_input($_POST["newBlance"]);
     // check if name only contains letters and whitespace
      if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $balanceErr = "Only letters and white space allowed"; 
   }
 }

......等等。

问题是,只要我进入此页面,它就会直接从上一页验证表单,并在页面上显示空字段的错误。 有没有办法避免这种情况,所以我需要一种新方法?

1 个答案:

答案 0 :(得分:3)

据我了解您的问题,您需要先检查验证代码段中提交的表单。

以第二种形式插入新的隐藏字段,当您验证newBalance字段时,请检查是否设置了action。只有在提交form2时才会设置action字段。

以下代码可以帮助您。

<强>的welcome.php

// Form2
<form method="post">
    <input type ="text" name="newBalance"><span class="error">*<?php echo    $balanceErr;?></span>
    <input type ="hidden" name="action" value="true" />
</form>

<强>验证

if ($_SERVER["REQUEST_METHOD"] == "POST" and isset($_POST['action'])) {
  if (empty($_POST["newBalance"])) {
    $balanceErr = "Balance is required";
  } else {
     $balance = test_input($_POST["newBlance"]);
     // check if name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
         $balanceErr = "Only letters and white space allowed"; 
     }
}

上面的代码可以帮助你。