我正在PHP中开发一个表单验证类。当表单验证失败时,我可以轻松地重定向到表单的html页面,但没有错误信息。我想重定向到表单的页面,其中包含关于哪些字段失败以及为什么失败的具体错误。表单验证失败时,如何为新的尝试传递错误信息?
我该怎么做?我应该通过GET还是POST发回信息?和哪种格式?真的会看到一些代码,看看人们如何解决这个问题。
谢谢!
我正在PHP中开发一个表单验证类。当表单验证失败时,我可以轻松地重定向到表单的html页面,但没有错误信息。我想重定向到表单的页面,其中包含关于哪些字段失败以及为什么失败的具体错误。表单验证失败时,如何为新的尝试传递错误信息?
我该怎么做?我应该通过GET还是POST发回信息?和哪种格式?真的会看到一些代码,看看人们如何解决这个问题。
谢谢!
事情是这样的:
//伪码
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']);
呼应的消息。如果您在标题功能的位置使用其他获取变量,当然,请使用&msg=" . urlencode($msg)
。 (您可能还需要返回用户提交的值,因此用户不必再次填写整个表单,如果他作出1级的错误。
也有数量接近
使用哪一个取决于应用。对于大多数应用程序会话方法最合适。
我使用$_SESSION
的user187291的建议同意,因为:
$_GET
(你绝不会希望有一个静态链接到状态消息)。用户可以按下“返回”到您的表格的页面,并仍然看到一个状态消息,因为这样的URI。如果你使用AJAX去,$_GET
更广泛用于retreiving值,您从验证控制器执行的操作。
我使用一类具有$ _ 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页面 ..validation conditions..call的函数,如果事情不匹配
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>";
}
点击返回按钮可以回到html页面,并保持原样。
谢谢,但是这将在操作页面中呈现信息。我想回到表单的页面,并在那里为每个字段渲染错误。 – Andy 2009-10-13 15:22:32
这会让你在同一页面上,除非验证通过,然后重定向/提交/等等...... – 2009-10-13 15:24:04