我在弄清楚验证失败时如何保留用户数据时遇到问题。我对 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/