Php 当表单验证失败时,如何为新的try传递错误信息?

Php 当表单验证失败时,如何为新的try传递错误信息?,php,validation,Php,Validation,我正在用PHP开发一个表单验证类。当表单验证失败时,我可以很容易地再次重定向到表单的html页面,但没有错误信息。我想重定向到表单页面,其中包含关于哪些字段失败以及失败原因的特定错误 我该怎么做?我应该通过GET或POST发回信息吗?哪种格式?我真的很想看一些代码,看看人们是如何解决这个问题的 谢谢 类似这样: //伪码 function isValid($parm) { $return = false; if(preg_match(/^[a-zA-Z]+$/, $parm) {

我正在用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']);

来回应这个信息。如果您在header函数的位置使用其他get变量,当然,请使用
&msg=“.urlencode($msg)
(您可能还希望返回用户提交的值,因此如果用户犯了一个错误,就不必再次填写整个表单。

有很多方法

  • 如您所说,重定向回时在GET中传递错误
  • 使用会话存储错误信息,在表单页面上检查会话是否存在错误
  • 失败后不要重定向,只需再次输出表单和错误消息
  • ajax提交

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

我同意user187291关于使用会话的建议,因为:

  • 它不会像使用
    $\u GET
    那样劫持URI(您永远不需要指向状态消息的静态链接)。用户可以用表单按“back”返回页面,但仍然可以看到状态消息,因为URI是这样说的
  • 在同一次运行中打印并取消设置,您将不能多次使用它(这是您想要的?!)

如果使用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以减少冗余