Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Header not redirecting

Tags:

php

header

My header won't redirect. After the code is executed it's just blank and doesn't execute the redirect. There's no whitespace in the file. The code works completely correctly apart from the redirect.

This code is called by a form submit.

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");
  }
}
like image 775
nbaosullivan Avatar asked Jun 18 '11 14:06

nbaosullivan


2 Answers

According to the PHP documentation for header:

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file

Are you sure there is no output sent to the page prior to calling header?

like image 167
Justin Ethier Avatar answered Sep 22 '22 14:09

Justin Ethier


If any of the following happens in your code, all calls to header() will be bypassed:

  1. $_POST['addSubscriber'] is empty
  2. $conn->prepare($sql) returns falsy
  3. $conn->prepare($sql2) returns falsy
  4. $stmt2->affected_rows does not compare to 1

You need to add some debugging and figure out which of those is happening.

like image 32
JAAulde Avatar answered Sep 19 '22 14:09

JAAulde