Foros del Web » Programando para Internet » PHP »

Problema con header...

Estas en el tema de Problema con header... en el foro de PHP en Foros del Web. Buenas, tengo lo siguiente: $insertar = mysql_query ("insert into usuarios (nombre,apellidos,mail,telefono,password,login) values ('$nombre','$apellidos','$mail','$telefono','$pass word','$login')"); echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos ...
  #1 (permalink)  
Antiguo 04/02/2004, 12:52
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Problema con header...

Buenas, tengo lo siguiente:

$insertar = mysql_query ("insert into usuarios (nombre,apellidos,mail,telefono,password,login) values ('$nombre','$apellidos','$mail','$telefono','$pass word','$login')");
echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';
header( "location:mail.php" );


hago un registro en la base de datos, y a continuacion envio un mail al usuario con el login y pass. hasta aqui todo bien.

en el archivo mail.php tengo:

$nombre = $nombre;
$telefono = $telefono;
$apellidos = $apellidos;
$login = $login;
$para = $mail;
$asunto = "Bienvenido ";
$mensaje ="Gracias por registrarte $nombre\n\n Tu login es $login y tu password $password";
$mail = mail($para,$asunto,$mensaje);
?>

y la cuestion es q me inserta en usuario en la bd, y me envia el mail, pero me sale esto..


Warning: Cannot add header information - headers already sent by (output started at /home2/usuarios/agregar_usuario.php:15) in /home2/usuarios/agregar_usuario.php on line 16

pq me sale este warning? como lo elimino?? gracias...
  #2 (permalink)  
Antiguo 04/02/2004, 13:06
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Para utilizar header debes asegurarte que antes no escrito nada en la salida estandar cosa que sí haces con la sentencia echo.
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #3 (permalink)  
Antiguo 04/02/2004, 13:06
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
La función header() debe llamarse antes de que se genere salida alguna, bien con etiquetas HTML normales o con PHP.

La función echo ""; hace precisamente eso y tú la utilizas antes de llamar a header(). Ni siquiera puedes volcar en la salida ni un espacio en blanco.

Un beso
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...

Última edición por Helbira; 04/02/2004 a las 13:10
  #4 (permalink)  
Antiguo 04/02/2004, 13:15
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
y como podria hacerlo entonces? mi intencion es que una vez dado de alta el usuario en la bd, reciba un mail con sus datos de configuracion. q me sugieres??

salu2
  #5 (permalink)  
Antiguo 04/02/2004, 13:23
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Podrias mostrar el mensaje

echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';

Después de usar la función header que en definitiva es después de enviar el mail desde mail.php Es más, sería lo más correcto porque si no estarías mostrando por pantalla ese mensaje sin comprobar antes que no se ha propducido un error al enviar el mail.

No crees?
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #6 (permalink)  
Antiguo 04/02/2004, 13:25
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
no entiendo lo q me dices Helbira...
  #7 (permalink)  
Antiguo 04/02/2004, 13:30
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Código PHP:
$insertar mysql_query ("insert into usuarios (nombre,apellidos,mail,telefono,password,login) values ('$nombre','$apellidos','$mail','$telefono','$pass
word','$login')"
);

header"location:mail.php" );

echo 
'<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>'
He cambiado el orden de la sentencia echo porque al ponerlas antes de usar la función header() te provoca ese error.

Prueba eso.

y lo que te decía antes es que sería mejor que incluyeras la sentencia echo "<font face=.... Gracias por registrarte blablablabla..." dentro de mail.php , justo después de comprobar que se envió el mail y no en el php donde usas el header().

Ahora si?

  #8 (permalink)  
Antiguo 04/02/2004, 13:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No pusistes el código completo de.
/home2/usuarios/agregar_usuario.php:15

pero.. ahí te está diciendo que en esa línea tienes algo de HTML, un espacio . o salto de línea antes de tu <? o despues de un ?> si llega ese archivo ahí por un include().

Cuando se usa header() (o cookies y sesiones) no se puede enviar nada de HTML al navegador antes de esas funciones. Quitalo o reestructura tu script para que el HTML se generere cuando corresponda y no antes de llamar a un header().

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 04/02/2004, 14:09
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
he hecho lo q me dijiostes, pero ahora no me envia el mail, aunque me inserta los datos correctamente. he hecho lo siguiente:

agregar_usuario.php

$insertar = mysql_query ("insert into usuarios (nombre,apellidos,mail,telefono,password,login) values ('$nombre','$apellidos','$mail','$telefono','$pass word','$login')");
header("location:mail.php");

mail.php

<?
$nombre = $nombre;
$telefono = $telefono;
$apellidos = $apellidos;
$login = $login;
$para = $mail;
$asunto = "Bienvenido a compresoresusados.com";
$mensaje ="Gracias por registrarte $nombre\n\n Tu login es $login y tu password $password";
$mail = mail($para,$asunto,$mensaje);
echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';
if($mail)
{
echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';
}
?>

donde esta el error¿ salu2
  #10 (permalink)  
Antiguo 04/02/2004, 14:11
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
he hecho lo q me dijiostes, pero ahora no me envia el mail, aunque me inserta los datos correctamente. he hecho lo siguiente:

agregar_usuario.php

$insertar = mysql_query ("insert into usuarios (nombre,apellidos,mail,telefono,password,login) values ('$nombre','$apellidos','$mail','$telefono','$pass word','$login')");
header("location:mail.php");

mail.php

<?
$nombre = $nombre;
$telefono = $telefono;
$apellidos = $apellidos;
$login = $login;
$para = $mail;
$asunto = "Bienvenido a compresoresusados.com";
$mensaje ="Gracias por registrarte $nombre\n\n Tu login es $login y tu password $password";
$mail = mail($para,$asunto,$mensaje);
echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';
if($mail)
{
echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';
}
?>

donde esta el error¿ salu2
  #11 (permalink)  
Antiguo 04/02/2004, 14:11
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
he hecho lo q me dijiostes, pero ahora no me envia el mail, aunque me inserta los datos correctamente. he hecho lo siguiente:

agregar_usuario.php

$insertar = mysql_query ("insert into usuarios (nombre,apellidos,mail,telefono,password,login) values ('$nombre','$apellidos','$mail','$telefono','$pass word','$login')");
header("location:mail.php");

mail.php

<?
$nombre = $nombre;
$telefono = $telefono;
$apellidos = $apellidos;
$login = $login;
$para = $mail;
$asunto = "Bienvenido a compresoresusados.com";
$mensaje ="Gracias por registrarte $nombre\n\n Tu login es $login y tu password $password";
$mail = mail($para,$asunto,$mensaje);
echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';
if($mail)
{
echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Gracias por registrarte. En unos segundos recibirás un mail con tu codigo de acceso<a href="inscripcion.php">Volver</a></font>';
}
?>

donde esta el error¿ salu2
  #12 (permalink)  
Antiguo 04/02/2004, 14:12
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
no entiendo lo q me dices Helbira...
  #13 (permalink)  
Antiguo 04/02/2004, 14:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Helbira

un Header() de Location .. redirecciona . es decir, le indica al navegador que "cambie" la página que está viendo el cliente, por ende .. par cuando pasa el flujo de código a la siguiente línea de código ya el navegador se le ha generado la página con las cabeceras HTTP que le dicen "cambiate a tal página" .. El resto de salida que des (echo .. html sólo etc ..) no se va a ejecutar en el navegador ..

ferranWEB

EL header("location:mail.php"); es con espacio entre el location: y el URL hacia donde redireccionas .. y no está de más un exit; al final para parar la ejecución de ese script en ese momento.

<?
//proceso
header("location: mail.php");
exit;
?>

Y .. tal cual tienes el proceso .. tal vez te vendría mejor usar un include("mail.php") en lugar de esa redirección .. Sobre todo por qué esas variables de $nombre .. etc que usas en tu agrega_usuario.php .. no se las estás pasando a tu mail.php (por lo menos no por el URL en el header .. location y .. no se ve que uses cookies o sesiones por médio).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 05/02/2004, 03:34
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Yo también estoy más de acuerdo con que uses un include("mail.php")
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #15 (permalink)  
Antiguo 05/02/2004, 05:35
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Gracias a los dos. he hecho un if, y en caso de no hacer correctamente el insert, no envio el mail.

gracias por vuestra ayuda!!
  #16 (permalink)  
Antiguo 05/02/2004, 10:16
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
solción

buenas, en lugar de la linea donde tienes el header() pon el siguiente código.

echo '<meta http-equiv name="refresh" content="0; url=xxx.php">';

donde el cero indica el tiempo (en segundos?) para la redirección, y el url pues es a donde te quieres dirigir. Con eso no tendrás problema alguno con las cabeceras http puesto que es html, la redirección se llevará a cabo a partir de cargada la etiqueta y después de transcurrido el tiempo especificado.

Eso debe solcionarte el problema sin mayores complicaciones...

Saludos, espero nos comuniques si te funcionó...
  #17 (permalink)  
Antiguo 05/02/2004, 12:45
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
funciono perfectamente sism82!! gracias por tu ayuda. este sistema que me comentas ya lo habia utilizado. el problema es que al hacer el include, en ningun momento me voy a la otra pagina.

salu2 y gracias!!
  #18 (permalink)  
Antiguo 05/02/2004, 13:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
sism82

Si bien esa solución funciona .. al igual que funcionaría un redireccionamiento por javascript .. o desde PHP usar el control buffer de salida de PHP (con funciones como ob_start() y familia) .. NO es lo recomendable ni seguro; imagina la situación: la pagina me llega al cliente (mi navegador) .. recargo la página antes de que me redireccione (en ese lapsus entre que llega la página y se interpreta el código HTML con ese tag concreto de redirección) .. en ese caso voy a producir que tus rutinas de inserción de datos en tu BD .. o envios de e-mail .. etc .. se ejecuten nuevamente ocasionando registros duplicados (ya que se me pide reenviar los datos nuevamente y .. si acepto ... ya ves ..)

Es recomendable solventar los problemas de cabeceras HTTP (como las que dá header() .. session_start() .. setcookie() .. ) ordenando el código HTML de forma que no se "entregue" al navegador antes de una llamada a esas funciones ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:58.