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

сессия является вариант, но избыточна немного. Не забудьте немедленно отключить все ошибки после использования. –

+0

Внесение ошибок в сеанс не является хорошей идеей, так как это излишне сделает сеанс тяжелым. – Nik

+0

@Col. Shrapnel - вы можете просто сделать unset ($ _ SESSION ['form_error'] после его отображения (если он установлен). – xil3

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

+0

Я бы добавил 303 HTTP-ответ в качестве второго аргумента функции header(), чтобы полностью реализовать PRG (т.е. заголовок ('Location:'. $ _SERVER ['PHP_SELF'], 303); –

+0

@Fanis извините, я не понимаю –

Смежные вопросы