2009-10-13 54 views
4

我正在PHP中开发一个表单验证类。当表单验证失败时,我可以轻松地重定向到表单的html页面,但没有错误信息。我想重定向到表单的页面,其中包含关于哪些字段失败以及为什么失败的具体错误。表单验证失败时,如何为新的尝试传递错误信息?

我该怎么做?我应该通过GET还是POST发回信息?和哪种格式?真的会看到一些代码,看看人们如何解决这个问题。

谢谢!

回答

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 
} 
+0

谢谢,但是这将在操作页面中呈现信息。我想回到表单的页面,并在那里为每个字段渲染错误。 – Andy 2009-10-13 15:22:32

+0

这会让你在同一页面上,除非验证通过,然后重定向/提交/等等...... – 2009-10-13 15:24:04

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']); 

呼应的消息。如果您在标题功能的位置使用其他获取变量,当然,请使用&msg=" . urlencode($msg)。 (您可能还需要返回用户提交的值,因此用户不必再次填写整个表单,如果他作出1级的错误。

1

也有数量接近

  • 通在得到错误重定向时回像你说的
  • 使用会话存储错误信息,在表单页面检查会话的错误
  • 不发生故障后再次用错误消息一起重定向,只是输出形式
  • AJAX提交

使用哪一个取决于应用。对于大多数应用程序会话方法最合适。

2

我使用$_SESSION的user187291的建议同意,因为:

  • 它不劫持URI喜欢使用$_GET(你绝不会希望有一个静态链接到状态消息)。用户可以按下“返回”到您的表格的页面,并仍然看到一个状态消息,因为这样的URI。
  • 打印并取消其在相同的运行,你将无法使用它不止一次(这是你想要什么?!)

如果你使用AJAX去,$_GET更广泛用于retreiving值,您从验证控制器执行的操作。

+0

如果你同意它,现在它怎么没有upvotes? – Sam 2011-04-12 08:29:15

+0

@Sam:那么,我*部分*同意它,但不与“不失败后不重定向,只是再次输出形式与错误消息”,因为这会导致后退按钮挂断。随意自己upvote它,通过一切手段:)顺便说一句,您的网站不可用! – chelmertz 2011-04-12 19:16:54

+0

感谢您指出,我一定忘记了我在某些时候更改了网址以减少冗余 – Sam 2011-04-12 19:43:37

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不会在会话中混淆并混淆事物。

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页面,并保持原样。