表单提交时出现错误,输入值丢失

时间:2012-06-28 06:12:17

标签: php forms validation onsubmit

我的表单工作正常,PHP正在进行验证。 我有三个字段:Name,EMail和Message。 表单和PHP代码在同一个pgae中,当用户提交表单时,会调用相同的页面进行验证。

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

直到这个,它工作正常。

然而,问题是,如果用户填写了任何字段,例如名称已归档并将其他两个字段(电子邮件和消息)留空,则在提交时,它会抛出空白字段的错误消息,这是可以的,但是对于由用户填写的名称字段,它清空内容并显示空白名称字段,并且不显示错误(因为之前的用户填写过它)。

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

以下是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>

任何帮助都会很棒。

谢谢。

3 个答案:

答案 0 :(得分:4)

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

<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 :(得分:1)

好吧,你可以使用jQuery验证插件进行验证 - 简单又好。 jQuery plugin

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

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'] : '' ?>" />
像这样的东西。

答案 2 :(得分: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>

祝你好运!