2010-09-19 101 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

相關問題