php - 当数据验证失败时保留表单字段中的值

标签 php validation forms

我在弄清楚验证失败时如何保留用户数据时遇到问题。我对 PHP 有点陌生,所以我的逻辑可能会犯一些巨大的错误。

目前,如果验证失败,所有字段都会被清除,$_Post 数据也会消失。

这里是一些代码,假设用户输入无效电子邮件,我希望保留“名称”字段。此代码不起作用。

<?php
if($_POST['doSubmit'] == 'Submit') {

   $usr_name = $data['Name'];
   $usr_email = $data['Email'];

   if (isEmail($usr_email)==FALSE){
       $err = "Email is invalid.");
       header("Location: index.php?msg=$err");
       exit();
    }

   //do whatever with data

}

if (isset($_GET['msg'])) {
   $msg = mysql_real_escape_string($_GET['msg']);
   echo "<div class=\"msg\">$msg</div><hr />";
}
if (isset ($_POST['Name'])){
   $reusername = $_POST['Name'];}
else{$reusername = "NOTHING";}//to test

 ?>
 <form action="index.php" method="post" >
 <input name="UserName" type="text" size="30" value="<?echo $reusername;?>">
 <input name="Email" type="text" size="30">
 <input name="doSubmit" type="submit" value="submit">
 </form>




 }

最佳答案

您可以使用 AJAX 将表单数据提交到 PHP 脚本,并让它返回指定验证是否成功的 JSON 数据。这样,你的田地就不会被抹干净。

另一种方法是将记录的参数发送回发布页面,并在发布页面中使用 PHP 填充字段。

但是,我认为第一个解决方案更好。

更新

编辑使您的代码更加清晰,因此我注意到了一些事情。您的输入字段在 HTML 中称为 UserName,但您在 PHP 中引用的是 Name。这可能就是它不起作用的原因。您的字段是否总是填充值NOTHING?确保输入字段的名称和您在 $_POST 中使用的下标相同。

此外,如果出现错误,无需重定向到另一个页面(使用 header )。维护一个 $errors 数组或变量以在同一页面中打印错误消息。但就像我之前提到的,最好使用 JSON 方法,因为这样您就可以将 View 层(html)与 PHP( Controller 层)分开。因此,您可以将 HTML 放入一个文件中,将 PHP 放入另一个文件中。

关于php - 当数据验证失败时保留表单字段中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224091/

相关文章:

php - Android中jSONArray解析异常的问题

ruby-on-rails - 我应该如何测试条件验证?

refactoring - 避免输入验证中的重复代码

sql - 错误 49 错误的绑定(bind)变量 oracle 表单

php - 在将数据输出回文本区域时,如何正确清理从文本区域收到的数据?

javascript - Bootbox meteor 形式: preventing blank submissions

PHP $_SESSION 变量不会持续存在——为什么不呢?

php - 如何访问嵌套 MySQL 查询内部的行

php - Laravel 中如何避免列名冲突?

python - 如何在 WTForms 中使字段有条件地可选?