перенаправление php не работает - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть этот регистр сценарий, который помещает информацию в базу данных 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

Ответы [ 5 ]

5 голосов
/ 09 декабря 2011

Вы не можете заключить заголовок в массив таким образом.

Вы просто вызываете функцию, а затем она перенаправляет.

header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' ) ;
3 голосов
/ 09 декабря 2011

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

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

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

Это называется шаблоном 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>
0 голосов
/ 09 декабря 2011

попробуйте после заполнения массива ошибок:

if (count($errors) > 0) 
{
  header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' );
  exit;
}

Имейте в виду, что до этой части не должно быть вывода html!

0 голосов
/ 09 декабря 2011

Не знаю, если это проблема, но важно также включить код статуса в заголовок.Например:

header("Location: /foo.php",TRUE,302);

307 для временного перенаправления, 302 для постоянного перемещения.Некоторое время назад Chrome не принимал перенаправления заголовков без кода состояния (в настоящее время я не знаю).

0 голосов
/ 09 декабря 2011

Вы помещаете возвращаемое значение функции заголовка в массив, затем продолжаете выполнение своей страницы.

Если вас не волнует что-либо, что обычно происходит ниже этого перенаправления, на что, как я полагаю, вы намекаете, вы должны просто установить заголовок и сразу же выйти. Не пытайтесь поместить возвращаемое значение функции заголовка в массив ошибок, как это, так как нет никакого смысла.

if(!$username) {
   header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined');
    exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...