php重定向无法正常工作

时间:2011-12-08 21:35:42

标签: php

我有这个注册脚本,将信息放入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";

 }

但不,它只是忽略它。

有人可以帮助我吗

如果您需要,请随时询问更多脚本

非常感谢康纳

5 个答案:

答案 0 :(得分:5)

您不能将标题包装在这样的数组中。

您只需调用该函数,然后重定向。

header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' ) ;

答案 1 :(得分:3)

  

它看起来不太好,因为它只是在空白页面上显示消息,

有什么问题?
为什么不再显示表格?已填满的字段。
这将是一个用户友好的界面。

只需将表单包含在填充了字段的同一页面中即可 这比你重定向到空白表单更常见。

这称为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>

答案 2 :(得分:0)

您将标题函数的返回值放在数组中,然后继续执行页面。

如果你不关心在重定向下通常会发生的任何事情,我认为这就是你所暗示的,你应该只设置标题,然后立即退出。不要试图将header函数的返回值放入errors数组中,因为没有意义。

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

答案 3 :(得分:0)

如果这是问题,我不会这样做,但是在状态代码中包含状态代码也很重要。像:

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

307用于临时重定向,302用于永久移动。很久以前,Chrome没有接受没有状态代码的标题重定向(我现在不知道)。

答案 4 :(得分:0)

填写错误数组后尝试此操作:

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

请记住,此部分之前不应有html输出!