Php 当表单验证失败时,如何为新的try传递错误信息?
我正在用PHP开发一个表单验证类。当表单验证失败时,我可以很容易地再次重定向到表单的html页面,但没有错误信息。我想重定向到表单页面,其中包含关于哪些字段失败以及失败原因的特定错误 我该怎么做?我应该通过GET或POST发回信息吗?哪种格式?我真的很想看一些代码,看看人们是如何解决这个问题的 谢谢 类似这样: //伪码Php 当表单验证失败时,如何为新的try传递错误信息?,php,validation,Php,Validation,我正在用PHP开发一个表单验证类。当表单验证失败时,我可以很容易地再次重定向到表单的html页面,但没有错误信息。我想重定向到表单页面,其中包含关于哪些字段失败以及失败原因的特定错误 我该怎么做?我应该通过GET或POST发回信息吗?哪种格式?我真的很想看一些代码,看看人们是如何解决这个问题的 谢谢 类似这样: //伪码 function isValid($parm) { $return = false; if(preg_match(/^[a-zA-Z]+$/, $parm) {
function isValid($parm) {
$return = false;
if(preg_match(/^[a-zA-Z]+$/, $parm) {
$return = true;
}
return $return;
}
$firstname = $_GET["fname"];
$lastname = $_GET["lname"];
$validFirstName = isValid($firstname);
$validLastName = isValid($lastname);
if($validFirstName == true && $validLastName == true) {
echo "It's all good";
// Do what you need to like, Submit
} else {
echo "Please retry";
// Display error message
}
可以使用header()函数。因此,只需检查已发布的字段:
if(!$form->valid()){
$msg = "Form is not valid";
} else {
//Don't know if you want this
$msg = "Form is valid";
}
header("Location: [page where you came from]?msg=" . urlencode($msg));
然后在重定向到使用的页面中
if(isset($_GET['msg]))
echo urldecode($_GET['msg']);
来回应这个信息。如果您在header函数的位置使用其他get变量,当然,请使用
&msg=“.urlencode($msg)
(您可能还希望返回用户提交的值,因此如果用户犯了一个错误,就不必再次填写整个表单。有很多方法
- 如您所说,重定向回时在GET中传递错误
- 使用会话存储错误信息,在表单页面上检查会话是否存在错误
- 失败后不要重定向,只需再次输出表单和错误消息
- ajax提交
使用哪一种取决于应用程序。对于大多数应用程序,会话方法最合适。我同意user187291关于使用会话的建议,因为:
- 它不会像使用
那样劫持URI(您永远不需要指向状态消息的静态链接)。用户可以用表单按“back”返回页面,但仍然可以看到状态消息,因为URI是这样说的$\u GET
- 在同一次运行中打印并取消设置,您将不能多次使用它(这是您想要的?!)
如果使用AJAX,
$\u GET
更广泛地用于从验证控制器检索值。我使用一个类与$\u POST进行接口,类似于以下内容:
// create the object
$post = new PostData();
// register your requirements... write whatever methods you need
// for each call,read $_POST, check criteria, and mark the field
// as good or bad...
$post->required ('LastName');
$post->required ('FirstName');
$post->numeric ('Age');
$post->optional ('MiddleInitial');
$post->regExp ('/\d{3}/','AreaCode');
$post->email ('Email');
// check the status
if (!$post->isValid ())
{
$_SESSION['FailedPostData'] = $post;
header ('Location: page.php');
}
// normal form processing
然后,在page.php上,您可以查看FailedPostData是否在会话中,阅读它以查找上次输入的信息,以及哪些字段失败。我使用一个带有宏的模板引擎,可以轻松地重新填充表单输入并标记失败。否则,您可能会得到许多简单表单的代码
您还需要一种机制来确保过时的FailedPostData不会在会话中挂起并混淆事情。我是这样做的。php初学者,因此不确定这是否是最好的方法: HTML表单页:
<form id="abc" method="post" action="validate.php">
PHP页面
..验证条件..如果情况不匹配,则调用函数
function display_error($error) {
echo "<html><body><link href='style.css' rel='stylesheet' type='text/css'><br><center><h2>";
echo "$error";
echo "</h2></center><br><br>";
echo "<center><input type='button' value='Go Back' onClick='history.go(-1)' style='width:100px; height:28px; font-size:16px'></center>";
echo "</body></html>";
}
功能显示错误($error){
回声“
”;
回显“$error”;
回声“
”;
回声“;
回声“;
}
单击“上一步”按钮将返回html页面,数据保持不变。谢谢,但这将在操作页面中呈现信息。我想返回表单页面,并在表单旁边的每个字段中呈现错误。这将使您保持在同一页面上,除非验证通过,然后重定向/提交/等等…如果您没有嗯,我部分同意这一点,但不同意“失败后不要重定向,只需再次输出表单和错误消息”,因为这会导致“后退”按钮挂断。请自行决定是否向上投票:)顺便说一句,你的网站不可用!谢谢你指出,我一定忘了我在某个时候更改了url以减少冗余