为什么我的表单错误消息永远不会显示?

时间:2010-09-19 14:22:05

标签: php forms validation

我有两页apply.php和registration.php。

registration.php,我有

if(isset($_POST['submitted'])){
 //validation part
 $form_error ='';
 if(!$fullname){
  $form_error.= "Enter full name<br />";
  header('Location: apply.php');

apply.php中,如果发生错误,我会显示错误消息:

<p><?php if(isset($form_error))echo $form_error?></p>
<form  action="registration.php" method="post">

<label for="fullname">Fullname</label>
<input type="text" name="fullname" />

为什么我没有收到回复错误消息“在apply.php中输入全名”?

2 个答案:

答案 0 :(得分:2)

你没有得到它,因为apply.php不知道$ form_error - 它在registration.php中初始化,但在apply.php中没有。

您可以执行以下操作:

$_SESSION['form_error'] = "Enter full name<br />";

然后你可以在apply.php上访问它。

<p><?php if(isset($_SESSION['form_error']))echo $_SESSION['form_error']?></p>
<form  action="registration.php" method="post">

<label for="fullname">Fullname</label>
<input type="text" name="fullname" />

或者,您也可以通过标题传递错误(通过GET):

$form_error.= "Enter full name<br />";
header('Location: apply.php?form_error=' . urlencode($form_error));

并在apply.php中访问它:

<p><?php if(isset($_GET['form_error']))echo $_GET['form_error']?></p>
<form  action="registration.php" method="post">

<label for="fullname">Fullname</label>
<input type="text" name="fullname" />

答案 1 :(得分:1)

不要使用标题或不同的文件 把所有东西都放在一个错误中只显示表格。 仅重定向成功。

像这样:

<?
if ($_SERVER['REQUEST_METHOD']=='POST') { 
 if(!$fullname) $form_error.= "Enter full name<br />";
 // other validations
 if (!$form_error) { 
    //writing to database
    Header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
  } 
}  
?>
<form>
...

另见http://en.wikipedia.org/wiki/Post/Redirect/Get