Ive получил этот скрипт регистра, который помещает информацию в базу данных mysql. теперь все работает нормально, а когда кто-то делает что-то неправильно, он говорит об ошибке (например, «Имя пользователя не определено»)
но когда он идет не так, он выглядит не очень хорошо, потому что он просто отображает сообщение на пустой странице, поэтому я подумал, что сделаю его перенаправлением на страницу формы и покажу там сообщение.
вот рабочий сценарий
$forename = $_POST['forename']; $surname = $_POST['surname']; $email = $_POST['email']; $password = $_POST['password']; $username = $_POST['username'];
$errors = array()
;
if(!$username) { $errors[] = "Username is not defined"; } if(!$password) { $errors[] = "Password is not defined"; }
и он продолжается.
теперь я просто подумал, что могу это сделать
$errors = array(); if(!$username) { $errors[] = header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' ) ; } if(!$password) { $errors[] = "Password is not defined"; }
но нет, все, что он делает, игнорирует это.
кто-то может помочь мне
пожалуйста, не стесняйтесь спрашивать больше о скрипте, если вам это нужно
большое спасибо connor
он выглядит не очень хорошо, потому что он просто отображает сообщение на пустой странице,
В чем проблема?
Почему бы не показать форму еще раз? с заполненными полями.
Это будет удобный интерфейс.
Просто укажите свою форму на той же странице с заполненными полями.
Это более распространенный способ, чем переадресация в пустую форму.
Это называется шаблоном 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'; ?>
шаблон
<? 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>
Вы не можете обернуть заголовок в таком массиве.
Вы просто вызываете функцию, а затем перенаправляете ее.
header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' ) ;
Вы помещаете возвращаемое значение функции заголовка в массив, а затем продолжаете выполнение страницы.
Если вы не заботитесь о том, что обычно происходит ниже этого перенаправления, которое, я считаю, является тем, что вы подразумеваете, вы должны просто установить заголовок, а затем немедленно выйти. Не пытайтесь поместить возвращаемое значение функции заголовка в массив ошибок, как это, потому что нет смысла.
if(!$username) { header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined'); exit; }
Я не хочу, если это проблема, но важно также включить код состояния в заголовок. Подобно:
header("Location: /foo.php",TRUE,302);
307 для временного перенаправления, 302 для постоянного перемещения. Chrome, некоторое время назад, не принял перенаправление заголовков без кода состояния (я не знаю в настоящее время).
попробуйте это после заполнения массива ошибок:
if (count($errors) > 0) { header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' ); exit; }
Имейте в виду, что перед этой частью не должно быть html-данных!