Foros del Web » Programando para Internet » PHP »

Header error al redireccionar

Estas en el tema de Header error al redireccionar en el foro de PHP en Foros del Web. Hola foro estoy creando un formulario que se inserta en base de datos y después se envía por correo al usuario. El problema que tengo ...
  #1 (permalink)  
Antiguo 03/04/2007, 06:04
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 3 meses
Puntos: 0
Header error al redireccionar

Hola foro estoy creando un formulario que se inserta en base de datos y después se envía por correo al usuario. El problema que tengo es que al redireccionar la página principal me da este error uqe he probado de subsanar poniendo las variables ob_start() y ob_end_flush(); y no ha funcionado, también he mirado de no dejar espacios y he movido los echo de errores de sitio sin éxito...no se me ocurre nada más, álguien puede echarme una mano, grácias :)

éste es el código:
Código PHP:
<?php
include("includes/config.php"); 
include(
"includes/class.phpmailer.php");

// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
    
if(isset($_POST['username']) && !empty($_POST['username']) &&
       isset(
$_POST['password']) && !empty($_POST['password']) &&
       isset(
$_POST['realname']) && !empty($_POST['realname']) &&
       isset(
$_POST['empresa']) && !empty($_POST['empresa']) &&
       isset(
$_POST['ciudad']) && !empty($_POST['ciudad']) &&
       isset(
$_POST['provincia']) && !empty($_POST['provincia']) &&
       isset(
$_POST['cpostal']) && !empty($_POST['cpostal']) &&
       isset(
$_POST['telefono']) && !empty($_POST['telefono']) &&
       isset(
$_POST['email']) && !empty($_POST['email'])) 
    {
        
// Si entramos es que todo se ha realizado correctamente
        
$link Conectarse();
        
//$link = mysql_connect("localhost","usuario","contraseña");
        
mysql_select_db("xxxxxxx",$link);

        
// Con esta sentencia SQL insertaremos los datos en la base de datos
        
mysql_query("INSERT INTO phpauthent_users (username,password,realname,empresa,ciudad,provincia,cpostal,telefono,email) VALUES ('{$_POST['username']}','{$_POST['password']}','{$_POST['realname']}','{$_POST['empresa']}','{$_POST['ciudad']}','{$_POST['provincia']}','{$_POST['cpostal']}','{$_POST['telefono']}','{$_POST['email']}')",$link);

        
// Ahora comprobaremos que todo ha ido correctamente
        
$my_error mysql_error($link);

    if(!empty(
$my_error)) {

        echo 
"Ha habido un error al insertar los valores.<br>$my_error"

    } else {

/*------------------------------------envio del mail a los socios-------------------------------------*/

$mail = new PHPMailer();

$mail->From     "[email protected]";
$mail->FromName "xxxxxxxxxx";
$mail->Host     "smtp.xxxxxxxxx.com";
$mail->Subject    "Alta de usuario";
$mail->Mailer   "smtp";

    
// HTML body
    
$body  "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Hola <b>" $_POST["nombre"] . "</b><p>";
    
$body .= "Grácias por suscribirse a xxxxxxxx.<p>";
    
$body .= "<b>Nombre: </b>" .$_POST['realname']."<br>";
    
$body .= "<b>Empresa: </b>" .$_POST['empresa']."<br>";
    
$body .= "<b>Ciudad: </b>" .$_POST['ciudad']."<br>";
    
$body .= "<b>Provincia: </b>" .$_POST['provincia']."<br>";
    
$body .= "<b>C.Postal: </b>" .$_POST['cpostal']."<br>";
    
$body .= "<b>Telefono: </b>" .$_POST['telefono']."<br>";
    
$body .= "<b>E-mail: </b>" .$_POST['mail']."<br>";
    
$body .= "<b>Usuario: </b>" .$_POST['username']."<br>";
    
$body .= "<b>Clave: </b>" .$_POST['password']."<p>";
    
$body .= "Atentamente, <br>";
    
$body .= "<b>xxxxxxxxxx lista de correo<b>";

    
// Plain text body (for mail clients that cannot read HTML)
    
$text_body  "Hola " $row["nombre"] . ", \n\n";
    
$text_body .= "Grácias por suscribirse a xxxxxxxxxx.\n\n";
    
$text_body .= "Nombre: " .$_POST['realname']. "\n";
    
$text_body .= "Empresa: " .$_POST['empresa']. "\n";
    
$text_body .= "Ciudad: " .$_POST['ciudad']. "\n";
    
$text_body .= "Provincia: " .$_POST['provincia']. "\n";
    
$text_body .= "C.Postal: " .$_POST['cpostal']. "\n";
    
$text_body .= "Telefono: " .$_POST['telefono']. "\n";
    
$text_body .= "E-mail: " .$_POST['email']. "\n";
    
$text_body .= "Usuario: " .$_POST['username']. "\n";
    
$text_body .= "Clave: " .$_POST['password']. "\n\n";
    
$text_body .= "Atentamente, \n";
    
$text_body .= "xxxxxxxxx lista de correo</font>";

    
$mail->Body    $body;
    
$mail->AltBody $text_body;
//    $mail->AddAddress($row["mail"], $row["empresa"]);
    
$mail->AddAddress($_POST["email"], $_POST["empresa"]);
//    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");

    
if(!$mail->Send())
        echo 
"Ha habido algún error enviando el mensaje a " $_POST["email"] . "<br>";

    
// Clear all addresses and attachments for next loop
    
$mail->ClearAddresses();
    
$mail->ClearAttachments();
        } 
    } else {
        echo 
"Error, no ha introducido todos los datos";
    }
    
ob_start();  
    
header ("Location: index.php?gracias.php");
    
ob_end_flush();  
?>
  #2 (permalink)  
Antiguo 03/04/2007, 07:43
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: Header error al redireccionar

Hola jormaz,
Supongo q el error q te sale es el tipico de headers already sent....

este error es muy frecuente, la función header() debe ser llamada antes de que cualquier salida sea enviada, ya sea mediante etiquetas HTML normales, líneas en blanco de un archivo, o desde PHP.

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #3 (permalink)  
Antiguo 03/04/2007, 08:56
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Header error al redireccionar

Hola gracias sergi ya había leído la información que me citas también y por eso había probado de poner el header arriba de todo pero entonces si se produce un error, no me lo marca y redirige pase lo que pase.

...lo ideal sería poder enviar a una página de gracias o de errores en cada salida pero no veo como
  #4 (permalink)  
Antiguo 03/04/2007, 09:14
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: Header error al redireccionar

a ver... mmm...

lo q podrias hacer es lo siguiente, donde tienes los echos cambiarlos por headers de la siguiente manera:

Código PHP:
header ("Location: index.php?respuesta.php?error=1"); 
header ("Location: index.php?respuesta.php?error=2");
header ("Location: index.php?respuesta.php?error=3");
header ("Location: index.php?respuesta.php?gracias"); 
y en tu pagina de respuesta:
Código PHP:
if(isset($_GET[error])){
   if(
$_GET[error]==1){
     echo 
"Error blablabla1";
    }
}
if(isset(
$_GET[gracias])){
   echo 
"Gracias por blablabla";

algo asi tendria q irte! almenos q te sirva la idea!

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #5 (permalink)  
Antiguo 03/04/2007, 10:15
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Header error al redireccionar

pues no hay manera cuando llega al header sale el error..gracias de nuevo
  #6 (permalink)  
Antiguo 06/04/2007, 13:51
 
Fecha de Ingreso: abril-2007
Mensajes: 1
Antigüedad: 17 años
Puntos: 0
Sonrisa Re: Header error al redireccionar

Hola, el problema que tienes creo que se resuelve poniendo bien las funciones:
ob_start() y ob_end_flush(), la primera tienes que ponerla al comienzo del codigo, para que inhabilite el envio de informacion al cliente, guardandola en un buffer, y la segunda justo despues de la funcion header(), para envie la informacion. Todo esto es porque la funcion header(), no funciona despues de que se ha enviado informacion al cliente. BUeno yo tenia exactamente el mismo problema que tu, y lo solucione asi. Te quedaria asi:

<?php
ob_start();
include("includes/config.php");
include("includes/class.phpmailer.php");

// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
if(isset($_POST['username']) && !empty($_POST['username']) &&
isset($_POST['password']) && !empty($_POST['password']) &&
isset($_POST['realname']) && !empty($_POST['realname']) &&
isset($_POST['empresa']) && !empty($_POST['empresa']) &&
isset($_POST['ciudad']) && !empty($_POST['ciudad']) &&
isset($_POST['provincia']) && !empty($_POST['provincia']) &&
isset($_POST['cpostal']) && !empty($_POST['cpostal']) &&
isset($_POST['telefono']) && !empty($_POST['telefono']) &&
isset($_POST['email']) && !empty($_POST['email']))
{
// Si entramos es que todo se ha realizado correctamente
$link = Conectarse();
//$link = mysql_connect("localhost","usuario","contraseña");
mysql_select_db("xxxxxxx",$link);

// Con esta sentencia SQL insertaremos los datos en la base de datos
mysql_query("INSERT INTO phpauthent_users (username,password,realname,empresa,ciudad,provinc ia,cpostal,telefono,email) VALUES ('{$_POST['username']}','{$_POST['password']}','{$_POST['realname']}','{$_POST['empresa']}','{$_POST['ciudad']}','{$_POST['provincia']}','{$_POST['cpostal']}','{$_POST['telefono']}','{$_POST['email']}')",$link);

// Ahora comprobaremos que todo ha ido correctamente
$my_error = mysql_error($link);

if(!empty($my_error)) {

echo "Ha habido un error al insertar los valores.<br>$my_error";

} else {

/*------------------------------------envio del mail a los socios-------------------------------------*/

$mail = new PHPMailer();

$mail->From = "[email protected]";
$mail->FromName = "xxxxxxxxxx";
$mail->Host = "smtp.xxxxxxxxx.com";
$mail->Subject = "Alta de usuario";
$mail->Mailer = "smtp";

// HTML body
$body = "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Hola <b>" . $_POST["nombre"] . "</b><p>";
$body .= "Grácias por suscribirse a xxxxxxxx.<p>";
$body .= "<b>Nombre: </b>" .$_POST['realname']."<br>";
$body .= "<b>Empresa: </b>" .$_POST['empresa']."<br>";
$body .= "<b>Ciudad: </b>" .$_POST['ciudad']."<br>";
$body .= "<b>Provincia: </b>" .$_POST['provincia']."<br>";
$body .= "<b>C.Postal: </b>" .$_POST['cpostal']."<br>";
$body .= "<b>Telefono: </b>" .$_POST['telefono']."<br>";
$body .= "<b>E-mail: </b>" .$_POST['mail']."<br>";
$body .= "<b>Usuario: </b>" .$_POST['username']."<br>";
$body .= "<b>Clave: </b>" .$_POST['password']."<p>";
$body .= "Atentamente, <br>";
$body .= "<b>xxxxxxxxxx lista de correo<b>";

// Plain text body (for mail clients that cannot read HTML)
$text_body = "Hola " . $row["nombre"] . ", \n\n";
$text_body .= "Grácias por suscribirse a xxxxxxxxxx.\n\n";
$text_body .= "Nombre: " .$_POST['realname']. "\n";
$text_body .= "Empresa: " .$_POST['empresa']. "\n";
$text_body .= "Ciudad: " .$_POST['ciudad']. "\n";
$text_body .= "Provincia: " .$_POST['provincia']. "\n";
$text_body .= "C.Postal: " .$_POST['cpostal']. "\n";
$text_body .= "Telefono: " .$_POST['telefono']. "\n";
$text_body .= "E-mail: " .$_POST['email']. "\n";
$text_body .= "Usuario: " .$_POST['username']. "\n";
$text_body .= "Clave: " .$_POST['password']. "\n\n";
$text_body .= "Atentamente, \n";
$text_body .= "xxxxxxxxx lista de correo</font>";

$mail->Body = $body;
$mail->AltBody = $text_body;
// $mail->AddAddress($row["mail"], $row["empresa"]);
$mail->AddAddress($_POST["email"], $_POST["empresa"]);
// $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");

if(!$mail->Send())
echo "Ha habido algún error enviando el mensaje a " . $_POST["email"] . "<br>";

// Clear all addresses and attachments for next loop
$mail->ClearAddresses();
$mail->ClearAttachments();
}
} else {
echo "Error, no ha introducido todos los datos";
}

header ("Location: index.php?gracias.php");
ob_end_flush();
?>
  #7 (permalink)  
Antiguo 12/04/2007, 08:43
 
Fecha de Ingreso: enero-2007
Mensajes: 19
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Header error al redireccionar

gracias por contestar, realmente el problema no estaba en la página donde está el código expuesto sino en la página index.php

Cita:
Warning: Cannot modify header information - headers already sent by
(output started at /path/to/geeklog/public_html/index.php:51)
in /path/to/geeklog/public_html/system/alta_usuario.php on line 200
Como se ve en el ejemplo nos dice que las cabeceras ya se envian desde la página index.php (donde redireccionamos) no desde la que estamos (alta_usuario.php) por lo que al mirar en la página index.php pude comprobar que había dos espacios en blanco después de la salida <html> de la página que producian el error ya que...

Cita:
...la función header() debe ser llamada antes de que cualquier salida sea enviada, ya sea mediante etiquetas HTML normales, líneas en blanco de un archivo, o desde PHP.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:39.