Печать встроенной ошибки PHP вместо стирания всей страницы - PullRequest
0 голосов
/ 27 августа 2011

Как я могу заставить PHP печатать встроенную ошибку вместо изменения всей страницы?

Я бы хотел, чтобы он нацелен на #errors и заполнил это вместо того, чтобы все менять.

Код, который я сейчас использую: die ("Incorrect username or password.");

Я очень новичок в PHP, извините, если это довольно легко сделать.

Ответы [ 2 ]

6 голосов
/ 27 августа 2011

Поместите ошибку в переменную, где вы выполняете свою логику, и печатаете ее содержимое в #errors. Например:

if (username_is_incorrect()) $error = 'Incorrect username or password.';

А в HTML

<?php if (isset($error)):?><div id="errors"><?=$error?></div><?php endif;?>
1 голос
/ 27 августа 2011

Есть два способа сделать это.

Реальный встроенный метод не полностью основан на PHP, так как его нельзя использовать без вызовов JavaScript и AJAX.
Обратите внимание на раздражающий недостаток этого метода:вам, наконец, придется заново проверять каждое поле после получения данных формы.

Еще одна перезагрузит вашу страницу, но это будет та же страница со всеми полями формы, введенными данными, а также сгенерированными сообщениями об ошибках.Это называется POST / Redirect / GET pattern

. Вот краткий пример

<?  
if ($_SERVER['REQUEST_METHOD']=='POST') {  

  $err = array();
  //performing all validations and raising corresponding errors
  if (empty($_POST['name']) $err[] = "Username field is required";  
  if (empty($_POST['text']) $err[] = "Comments field is required";  

  if (!$err) {  
    // if no errors - saving data 
    // and then redirect:
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
  }  else {
    // all field values should be escaped according to HTML standard
    foreach ($_POST as $key => $val) {
      $form[$key] = htmlspecialchars($val);
    }
} else {
  $form['name'] = $form['comments'] = '';  
}
include 'form.tpl.php';
?>  

, в то время как в файле form.tpl.php у вас есть поля формы,введенные значения и условный вывод сообщений об ошибках

<? if ($err): ?>
  <? foreach($err as $e): ?>
<div class="err"><?=$e?></div>
  <? endforeach ?>
<? endif ?>
<form>
  <input type="text" name="name" value="<?=$form['name']?>">
  <textarea name="comments"><?=$form['comments']?></textarea>
  <input type="submit">
</form>
...