php - 验证后为什么我的表单数据被清除

时间:2014-01-27 10:00:29

标签: php mysql

我正在为我的html值进行PHP验证。但是当PHP验证时 失败,我返回页面,表单数据被清除。无论如何都要在php中保存并重新加载表单数据

php 中的

验证码
<?php
    $firstname=$lastname=$contactno="";
    $firstnameErr=$lastnameErr=$contactnoErr="";

    if ($_SERVER['REQUEST_METHOD']== "POST") {
       $valid = true;

    /*FirstName Validation starts here*/     
     if(empty($_POST["fname"]))
    {
        $firstnameErr="*firstname is Required";
            $valid=false;
    }
    else
    {
    $firstname=test_input($_POST["fname"]);
     if (!preg_match("/^[a-zA-Z ]*$/",$firstname))
           {
           $firstnameErr = "&nbsp;&nbsp;Only letters and white space allowed"; 
           $valid=false;
           }    
    } 
    /*FirstName Validation Ends here*/   

       /*lastName Validation starts here*/   
       if(empty($_POST["lname"]))
       {
           $lastnameErr="*lastname is required";
           $valid=false;
       }
       else
       {
           $lastname=test_input($_POST["lname"]);
           if(!preg_match("/^[a-zA-Z ]*$/",$lastname))
           {
               $lastnameErr = "&nbsp;&nbsp;Only letters and white space allowed";
               $valid=false;
           }
       }
       /*LastName Validation Ends here*/     

    /*Contact No Validation starts here*/    
       if(empty($_POST["contact"]))
       {
           $contactnoErr="*Contact No. is required";
           $valid=false;
        }
        else
        {
            $contactno=test_input($_POST["contact"]);
             if(!preg_match("/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i",$contactno)) 
           {
            $contactnoErr="*Enter a valid contact no";
            $valid=false;
           }    
        }
       /*Contact No Validation Ends here*/

     //if valid then redirect
      if($valid){
          include 'database.php';
          echo '<META HTTP-EQUIV="Refresh" Content="0; URL=success.php">';    
        exit;
      }  
    }

    function test_input($data)
    {
         $data = trim($data);
         $data = stripslashes($data);
         $data = htmlspecialchars($data);
         return $data;
    }

    ?>

形式

<form method="post" action="<?php htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <label>Firstname<span class="error">*</span>:</label>
        <input type="text" name="fname"/>
        <span class="error"><?php echo $firstnameErr?></span><br />
        <br />
        <label>lastname<span class="error">*</span>:</label>
        <input type="text" name="lname"/>
        <span class="error"><?php echo $lastnameErr?></span><br />
        <br />
        <label>contactno<span class="error">*</span>:</label>
        <input type="text" name="contact"/>
        <span class="error"><?php echo $contactnoErr?></span>
        <br />
    <input style="margin:20px 20px 20px 250px;" type="submit" name="Submit" value="Submit"/>
</form>

4 个答案:

答案 0 :(得分:1)

您正在加载一个新表单(即使它与上一个表单相同)并且您没有任何输入的value属性。

答案 1 :(得分:0)

当您提交表单时,您基本上是从头开始重新加载页面。因为你没有为它提供值 - 它是空的。您需要在表单中执行此类操作。

<form method="post" action="<?php htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <label>Firstname<span class="error">*</span>:</label>
    <input type="text" value="<?php echo htmlentities($_POST['fname']); ?>" name="fname"/>
    <span class="error"><?php echo $firstnameErr?></span><br />
    <br />
    <label>lastname<span class="error">*</span>:</label>
    <input type="text" value="<?php echo htmlentities($_POST['lname']); ?>" name="lname"/>
    <span class="error"><?php echo $lastnameErr?></span><br />
    <br />
    <label>contactno<span class="error">*</span>:</label>
    <input type="text" value="<?php echo htmlentities($_POST['contact']); ?>" name="contact"/>
    <span class="error"><?php echo $contactnoErr?></span>
    <br />
    <input style="margin:20px 20px 20px 250px;" type="submit" name="Submit" value="Submit"/>
</form>

答案 2 :(得分:0)

将value-element添加到输入标记:

<input type="text" name="fname" value="<?php echo $firstname ?>" />

并确保所有值都有预设。

答案 3 :(得分:0)

从内存验证它,而不是从字段验证。将其保存到对象或仅保存在您将使用的某些变量中。如果值无效,则返回相同的页面并再次从vars / object中填充以允许用户继续。

此外,您可能希望在此之前添加客户端验证,因此无需向服务器发送请求即可修复最无关紧要的无效数据。