2010-09-19 80 views
0

我有两个页面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

你没有得到它,因为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" /> 
+0

会议是一个选项,但矫枉过正了一下。不要忘记在使用后马上解除所有错误 – 2010-09-19 14:31:26

+0

在会话中输入错误并不是一个好主意,因为它会不必要地让会话变得沉重。 – Nik 2010-09-19 14:32:27

+0

@Col。 Shrapnel好点 - 你可以在它显示后设置($ _ SESSION ['form_error']) – xil3 2010-09-19 14:36:24

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

+0

PRG也不应该用于表单错误?它不会有任何负面影响,让用户重新提交错误的提交,但不是更好练习不是? – Fanis 2010-09-19 14:41:00

+0

我想添加一个303 HTTP响应作为header()函数的第二个参数来完全实现PRG(即header('Location:'。$ _SERVER ['PHP_SELF'],303); – 2010-09-19 14:50:54

+0

@Fanis对不起,我不明白 – 2010-09-19 14:58:50

相关问题