2011-06-18 66 views
5

我的标题不会重定向。代码执行后,它只是空白,不执行重定向。文件中没有空白。代码除了重定向之外完全正确。PHP标题不重定向

此代码由表单提交调用。

if(!empty($_POST['addSubscriber'])){ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    if(!empty($name) && !empty($email) && eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email) != FALSE){ 
    $conn = connect(); 
    $sql = "SELECT id FROM subscribers WHERE email=?"; 
    if($stmt = $conn->prepare($sql)){ 
     $stmt->bind_param("s", $email); 
     $stmt->execute(); 
     if($stmt->fetch()){ 
     header("Location: http://bcp350.org.uk/index.php?message=1"); 
     } else { 
     $password = md5(uniqid()); 
     $sql2 = "INSERT INTO subscribers(name, email, password) VALUES(?, ?, '$password')"; 
     if($stmt2 = $conn->prepare($sql2)){ 
      $stmt2->bind_param("ss", $name, $email); 
      $stmt2->execute(); 
      if($stmt2->affected_rows == 1) 
      header("Location: http://bcp350.org.uk/index.php?message=1"); 
     } 
     } 
    } 
    } else { 
    header("Location: urlnotallowedbecauseofstackoverflowlimit"); 
    } 
} 
+5

之后'header()'调用失败?此外,**总是**调用'exit();'在执行'header(“Location:”)“后立即停止进一步执行当前脚本!' –

+0

* .php中的发布代码-文件? – ChrFin

+2

在每个头重定向之后放入'exit()'调用,看看它是否仍然失败。如果没有,那么页面下方的错误可能仍在执行并失败。 –

回答

9

根据用于header PHP文档:

记住header()函数被发送的任何实际输出之前,必须被调用,或者通过正常的HTML标记,空行在文件中,或从PHP。使用include()或require()函数或其他文件访问函数读取代码,并在调用header()之前输出空格或空行是非常常见的错误。使用单个PHP/HTML文件时存在同样的问题

您确定在调用header之前没有输出发送到页面吗?

+0

完整的php文件这个代码片段包含在这里可以在这里查看http://pastebin.com/Ha4LQu24 – Nick

+1

@Nick,但是'constants.php'中呢?您还必须验证该文件中没有空白。 –

+0

这是....失败。这是constant.php – Nick

3

如果有以下的代码中的情况,以header()所有呼叫都将被忽略:

  1. $ _ POST [ 'addSubscriber']是空
  2. $ conn->准备($ SQL)返回falsy
  3. $ conn->准备($ SQL2)返回falsy
  4. $ stmt2-> affected_rows比不上1

您需要添加一些调试并找出其中哪些正在发生。

+0

的空白,你会建议什么? – Nick

-1

使用这种代码在你的PHP页面的最开始

<?php 

ob_start(); ?>