【问题标题】:Input values lost when form submitted with errors表单提交错误时输入值丢失
【发布时间】:2012-06-29 15:18:49
【问题描述】:

我的表单在 PHP 完成的验证下工作正常。 我有三个字段:姓名、电子邮件和消息。 表单和 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>

任何帮助都会很好。

谢谢。

【问题讨论】:

    标签: php forms validation onsubmit


    【解决方案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>
    

    祝你好运!

    【讨论】:

    • 一切正常,在输入字段中检索到旧条目。但是文本区域的旧条目不会被放回。虽然我在表单提交后测试了旧条目存在于 textarea 变量($phpVarMessageField)中,但在表单提交后它不会放回 textarea 中,名称或电子邮件字段中的任何一个都留空。知道可能是什么原因吗?
    • 哦,对不起!是我的错。
    【解决方案2】:

    您需要在&lt;input&gt; 元素上添加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 的调用。它是必需的,以便&lt;&gt; 和引号不会破坏您的HTML 文档。

    【讨论】:

      【解决方案3】:

      好吧,您可以使用 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'] : '' ?>" />
      

      类似的东西。

      【讨论】:

        猜你喜欢
        • 2015-08-17
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-11
        相关资源
        最近更新 更多