Не работает перенаправление php

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

Related of "Не работает перенаправление php"

он выглядит не очень хорошо, потому что он просто отображает сообщение на пустой странице,

В чем проблема?
Почему бы не показать форму еще раз? с заполненными полями.
Это будет удобный интерфейс.

Просто укажите свою форму на той же странице с заполненными полями.
Это более распространенный способ, чем переадресация в пустую форму.

Это называется шаблоном 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-данных!