2011-06-18 16 views
5

Mi encabezado no se redirigirá. Después de que se ejecuta el código, está en blanco y no ejecuta la redirección. No hay espacios en blanco en el archivo. El código funciona completamente correctamente, aparte de la redirección.Cabecera de PHP que no redirige

Este código se invoca mediante un envío de formulario.

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

¿Después de qué llamada 'header()' falla? Además, ** siempre ** llame a 'exit();' justo después de hacer 'header (" Location: ");' para detener la ejecución del script actual! ' –

+0

¿Hay algo antes del código publicado en el * .php -¿archivo? – ChrFin

+2

Ingrese las llamadas 'exit()' después de cada uno de los encabezados de su encabezado y vea si aún falla. Si no es así, entonces es posible que un error más adelante en la página aún se esté ejecutando y fallando. –

Respuesta

9

De acuerdo con la documentación de PHP para header:

Recuerde que la cabecera() debe ser llamado antes de enviar cualquier salida real, ya sea mediante etiquetas HTML normales, líneas en blanco en un archivo, o de PHP. Es un error muy común leer código con include(), o require(), funciones u otra función de acceso a archivos, y tener espacios o líneas vacías que se emiten antes de llamar a header(). El mismo problema existe cuando se utiliza un único archivo PHP/HTML

¿Está seguro de que no se envía ningún documento a la página antes de llamar al header?

+0

El archivo php completo que este fragmento de código está incluido se puede ver aquí http://pastebin.com/Ha4LQu24 – Nick

+1

@Nick, pero ¿qué pasa con 'constants.php'? También debe verificar que no haya espacios en blanco en ese archivo. –

+0

Fue que ... fallaron. Era un espacio en blanco en constante.php – Nick

3

Si cualquiera de las siguientes situaciones en su código, se ignorará todas las llamadas a header():

  1. $ _POST [ 'addSubscriber'] está vacía
  2. $ conn-> prepare ($ sql) devuelve Falsy
  3. $ conn-> prepare ($ sql2) devuelve Falsy
  4. $ stmt2-> affected_rows no se compara con 1

Es necesario para agregar algunas depuraciones y descubrir cuál de ellas está sucediendo.

+0

¿qué sugieres? – Nick

-1

uso este código en el comienzo mismo de su página php

<?php 

ob_start(); ?>

Cuestiones relacionadas