我在弄清楚验证失败时如何保留用户数据时遇到问题。我对 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填充字段。
不过,我认为第一种解决方案更好。
UPDATE
编辑使您的代码更加清晰,所以我注意到了一些事情。您的输入字段称为UserName
在 HTML 中,但您指的是Name
在 PHP 中。这可能就是它不起作用的原因。您的领域是否始终充满价值NOTHING
?确保输入字段的名称和您使用的下标$_POST
是相同的。
此外,如果出现错误,无需重定向到另一个页面(使用标头)。维持一个$errors
用于在同一页面中打印错误消息的数组或变量。但就像我之前提到的,最好使用 JSON 方法,因为这样您就可以将视图层(html)与 PHP(控制器层)分开。因此,您可以将 HTML 放入一个文件中,将 PHP 放入另一个文件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)