Почему мое сообщение об ошибке формы никогда не отображается? - PullRequest
0 голосов
/ 19 сентября 2010

У меня есть две страницы 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 ]

2 голосов
/ 19 сентября 2010

Вы не получаете его, потому что 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 голос
/ 19 сентября 2010

Не используйте заголовок и другие файлы.
Поместите все в один и при ошибке просто покажите форму.Перенаправление только при успехе.

Сделайте так:

<?
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

...