Как заставить PHP печатать ошибку в строке вместо изменения всей страницы?
Я бы хотел, чтобы он #errors
на #errors
и заполнял это, а не менял все.
Используемый мной код die ("Incorrect username or password.");
Я очень новичок в PHP, поэтому извините, если это довольно простая задача.
Поместите ошибку в переменную, где вы делаете свою логику и печатаете ее содержимое в #errors. Например:
if (username_is_incorrect()) $error = 'Incorrect username or password.';
И в HTML
<?php if (isset($error)):?><div id="errors"><?=$error?></div><?php endif;?>
Есть два способа сделать это.
Реальный встроенный метод не полностью основан на PHP, поскольку он не может использоваться без вызовов JavaScript и AJAX.
Обратите внимание на раздражающий недостаток этого метода: вам нужно будет снова проверить каждое поле после получения данных формы.
Другой будет перезагружать вашу страницу, но она будет одной и той же страницей со всеми полями формы, введенными данными и свежими сообщениями об ошибках. Это называется шаблоном POST / Redirect / GET
вот краткий пример
<? 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>