2012-06-28 23 views
1

我的表单与PHP完成的验证正常工作。 我有三个字段:名称,电子邮件和消息。 表单和PHP代码在同一个pgae中,当用户提交表单时,会调用相同的页面进行验证。表单提交出错时输入值丢失

当用户提交表单时,调用相同的页面并检查表单是否被提交。 如果表单已提交,则会对空白条目进行验证,并在字段下方显示错误消息以通知用户该字段留空。它还显示字段旁边的错误图标。

直到这,它工作正常。

但是,问题是,如果用户填写了任何字段,例如名称归档并将其他两个字段(EMail和Message)留空,则在提交时,会为空白字段引发错误消息,但是对于由用户填充的名称字段,它将清空内容并显示空白名称字段,并且不显示错误(如前面的用户填写过的那样)。

我唯一担心的是当它在提交后重新运行表单时,它还应该在提交之前重新加载用户输入的相应字段中的较早值。

以下是PHP验证码。

<?php 
error_reporting(E_ALL & ~E_NOTICE); 

    if(isset($_POST['nameField_Name']) AND isset($_POST['nameField_EMail']) AND isset($_POST['nameField_Message']) AND isset($_POST['nameSubmit'])){ 
     // Form Submited 
     if ($_POST['nameField_Name']) { 
    $phpVarNameField = mysql_escape_string($_POST['nameField_Name']); 
} else { 
    $errormsgNameField = "Name field is required, Please enter your Name."; 

} 

if ($_POST['nameField_EMail']) { 
    $phpVarEMailField = mysql_escape_string($_POST['nameField_EMail']); 
} else { 
    $errormsgEMailField = "E-Mail field is required, Please enter your E-Mail ID."; 
} 

if ($_POST['nameField_Message']) { 
    $phpVarMessageField = mysql_escape_string($_POST['nameField_Message']); 
} else { 
    $errormsgMessageField = "Message field is required, Please enter your Message."; 
} 
    } 
?> 

以下是表格代码。

   <form name="myform" action="contactus.php" method="post""> 
       <div id="r1"> 
        <div id="r1c1"> 
         <input type="text" name="nameField_Name" id="idField_Name" placeholder="Enter your name here"/> 
        </div> 
        <div id="r1c2"> 
       <?php 
         if(isset($errormsgNameField)){ // Check if $msg is not empty 
        echo '<img src="error.png" width="45" height="45" style="margin: 5px 0px" alt="">'; 
         } 
        ?> 
        </div> 
       </div> 
       <div id="afterr1"> 
       <?php 
         if(isset($errormsgNameField)){ // Check if $msg is not empty 
        echo '<div class="statusmsg" id="idErrorMsgNameField">'.$errormsgNameField.'</div>'; // Display our message and wrap it with a div with the class "statusmsg". 
         } 
        ?> 

       </div> 
       <div id="r2"> 
        <div id="r2c1"> 
         <input name="nameField_EMail" type="text" id="idField_EMail" placeholder="Enter your E-Mail address here" /> 
        </div> 
        <div id="r2c2"> 
       <?php 
         if(isset($errormsgEMailField)){ // Check if $msg is not empty 
        echo '<img src="error.png" width="45" height="45" style="margin: 5px 0px" alt="">'; 
         } 
        ?> 
        </div> 
       </div> 
       <div id="afterr2"> 
       <?php 
         if(isset($errormsgEMailField)){ // Check if $msg is not empty 
        echo '<div class="statusmsg" id="idErrorMsgEMailField">'.$errormsgEMailField.'</div>'; // Display our message and wrap it with a div with the class "statusmsg". 
         } 
        ?> 
       </div> 
       <div id="r3"> 
        <div id="r3c1"> 
         <textarea name="nameField_Message" id="idField_Message" placeholder="Enter your message for us here"></textarea> 
        </div> 
        <div id="r3c2"> 
       <?php 
         if(isset($errormsgMessageField)){ // Check if $msg is not empty 
        echo '<img src="error.png" width="45" height="45" style="margin: 115px 0px" alt="">'; 
         } 
        ?> 

        </div> 
       </div> 
       <div id="afterr3"> 
       <?php 
         if(isset($errormsgMessageField)){ // Check if $msg is not empty 
        echo '<div class="statusmsg" id="idErrorMsgMessageField">'.$errormsgMessageField.'</div>'; // Display our message and wrap it with a div with the class "statusmsg". 
         } 
        ?> 
       </div> 

       <div id="r4"> 
        <div id="r4c"> 
         <input type="Submit" name="nameSubmit" id="idButton_Submit" value="Submit" alt="Submit Button"/> 
        </div> 
       </div> 
       </form> 

任何帮助将是伟大的。

谢谢。

回答

1

试着改变你的标签,如:

<input type="text" 
    name="nameField_Name" 
    id="idField_Name" 
    placeholder="Enter your name here" 
    value ="<?php 
      if (isset($phpVarNameField)) 
       echo $phpVarNameField; 
     ?>" 
/> 
....... 
<input 
    name="nameField_EMail" 
    type="text" 
    id="idField_EMail" 
    placeholder="Enter your E-Mail address here" 
    value ="<?php if (isset($phpVarEMailField)) echo $phpVarEMailField; ?>" 
/> 
....... 
<textarea name="nameField_Message" id="idField_Message" placeholder="Enter your message for us  
here" value ="<?php if (isset($phpVarMessageField)) echo $phpVarMessageField; ?>" ></textarea> 

祝您好运!

+0

一切工作正常,旧的条目检索输入字段。但是文本区域的旧条目不会被放回。尽管我在表单提交后测试了textarea变量($ phpVarMessageField)中的旧条目,但在表单提交后没有将其返回到textarea中,任何Name或E Mail字段都留空。任何想法可能是什么原因? – user1478475

+0

哦对不起!这是我的错误。 EscalinNancy

4

您需要在您的<input>元素添加value属性:

<input type="text" 
     name="whatever" 
     value="<?php echo htmlspecialchars($_POST['whatever']); ?>" 
> 

这可能是更容易阅读,如果PHP输出领域:

<?php 
printf('<input type="text" name="%s" value="%s">', 
     'whatever', 
     htmlspecialchars($_POST['whatever'])); 
?> 

这甚至可以被包裹在一个功能,因此您无需为每个表单字段重新输入它。请拨打htmlspecialchars。这是需要的,以便<>和引号不会破坏您的HTML文档。

1

那么,你可以使用jQuery验证插件进行验证 - 很简单,很好。 jQuery plugin

或者用PHP存储数组中的POST数据,检查错误以及非空字段设置为输入文本的值。

if (isset($_POST)) { 
    $data = $_POST; 
} 
foreach ($data as $row) { 
    if ($row == "") 
     $error = true; // do what ever you want 
} 

and then in form 
<input type="text" name="name" value="<?php ($data['name'] != "")? $data['name'] : '' ?>" /> 

这样的事情。