我正在用PHP开发一个表单验证类。当表单验证失败时,我可以轻松地重定向到表单的html页面,但没有错误信息。我想重定向到表单的页面,其中包含哪些字段失败的具体错误以及原因。
我该怎么做?我应该通过GET或POST发回信息吗?以及以何种格式?真的会看到一些代码来看看人们如何解决这个问题。
谢谢!
答案 0 :(得分:2)
您可以使用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']);
回应消息。如果在头函数的位置使用其他get变量,当然要使用&msg=" . urlencode($msg)
。 (您可能还想返回用户提交的值,因此如果他犯了1个错误,用户不必再次填写整个表单。
答案 1 :(得分:2)
我同意user187291建议使用$_SESSION
,因为:
$_GET
一样劫持URI(你永远不会想要一个状态消息的静态链接)。用户可以使用您的表单“返回”页面并仍然看到状态消息,因为URI是这样说的。如果您使用AJAX,$_GET
会更广泛地用于从验证控制器执行的retreiving值。
答案 2 :(得分:1)
有多种方法
使用哪一个取决于应用程序。对于大多数应用,会话方法是最合适的。
答案 3 :(得分:0)
这样的事情:
//伪代码
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
}
答案 4 :(得分:0)
我使用类与$ _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不会在会话中出现并混淆。
答案 5 :(得分:0)
我这样做。 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页面,数据保持不变。