Foros del Web » Programando para Internet » PHP »

Redirigir a otra página web

Estas en el tema de Redirigir a otra página web en el foro de PHP en Foros del Web. Hola, estoy haciendo la web de un restaurante, que tiene un formulario de reservas, y quiero que después de enviar los datos del formulario por ...
  #1 (permalink)  
Antiguo 22/10/2007, 15:28
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
Pregunta Redirigir a otra página web

Hola, estoy haciendo la web de un restaurante, que tiene un formulario de reservas, y quiero que después de enviar los datos del formulario por email, me redireccione a otra página en la que doy las gracias, ¿cómo lo hago?, he probado con el siguiente código, pero no funciona:
Código PHP:
header("location:http://www.midominio.com/enviado.htm"); 
Envía el formulario, pero no me redirije a la página, y me sale el siguiente error:
Cita:
Warning: Cannot modify header information - headers already sent by (output started at /home/content/i/b/e/ibersys/html/midominio.com/reservas.php:7) in /home/content/i/b/e/ibersys/html/midominio.com/reservas.php on line 438
El código que tengo puesto es el siguiente:
Código PHP:
mail("[email protected]","Asunto",$cuerpo,$headers);
header("location:http://www.midominio.com/enviado.htm"); 
¿Qué significa exactamente ese error?, ¿de qué otra forma lo puedo hacer?.


Muchas gracias.
  #2 (permalink)  
Antiguo 22/10/2007, 15:39
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 3 meses
Puntos: 2
Re: Redirigir a otra página web

Esto es un error común al utilizar la función header. Fijate lo que dice la documentación de php.net al respecto:

Cita:
Recuerde que 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. Es un error bastante común interpretar código extra con include(), require(), o alguna otra función de acceso de archivos, y terminar con espacios o líneas en blanco que son impresas antes de un llamado a header(). El mismo problema existe cuando se usa un archivo PHP/HTML único.
Saludos.
__________________
R4DS en español | R4DS en inglés
  #3 (permalink)  
Antiguo 22/10/2007, 15:44
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Redirigir a otra página web

Verifica estas funciones para hacer redirect: Redirect

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #4 (permalink)  
Antiguo 22/10/2007, 16:59
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
Pregunta Re: Redirigir a otra página web

Me estoy volviendo loco y ya no sé que más sobra, he quitado líneas en blanco y demás, que podían ser las causantes, en fin, coloco el código completo, y vosotros me diréis que está mal:

Código PHP:
$cuerpo "<h1><u>Reserva de Mesa</u></h1>";
$cuerpo .= "Fecha de reserva: <strong>" $HTTP_POST_VARS["Dia"] . " de " $HTTP_POST_VARS["Mes"] . " a las " $HTTP_POST_VARS["Hora"] . "</strong><br>";
$cuerpo .= "N&uacute;mero de comensales: <strong>" $HTTP_POST_VARS["Comensales"] . "</strong><br>";
$cuerpo .= "Persona de contacto: <strong>" $HTTP_POST_VARS["Contacto"] . "</strong><br>";
$cuerpo .= "Tel&eacute;fono de contacto: <strong>" $HTTP_POST_VARS["Telefono"] . "</strong><br>";
$cuerpo .= "Email de contacto: <strong>" $HTTP_POST_VARS["Email"] . "</strong><br>";
$cuerpo .= "Observaciones: <strong>" $HTTP_POST_VARS["Observaciones"] . "</strong><br>";

$headers "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: " $HTTP_POST_VARS["Email"] . "\r\n";
$headers .= "Reply-To: " $HTTP_POST_VARS["Email"] . "\r\n";
$headers .= "Return-path: " $HTTP_POST_VARS["Email"] . "\r\n"

mail("[email protected]","Formulario de Reserva de Mesa",$cuerpo,$headers);

header("location:http://www.midominio.com/enviado.htm");
exit(); 

Muchas gracias.


PD: Pongo sólo el código PHP porque todo el código HTML sería demasiado extenso, y creo que el problema debe de estar en el código PHP.

Última edición por rvelezb; 22/10/2007 a las 17:37
  #5 (permalink)  
Antiguo 22/10/2007, 17:02
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Redirigir a otra página web

La funcion mail() y header() son las que te hacen el conflicto... ya que las dos funciones envian datos al browser y es como que hubieran dos personas peleandose por un pedazo de pan.

Lo que debes hacer es en vez de usar el header() para redireccionar usar alguno de los metodos que te mencione arriba para hacer redirect.

Prueba con eso y nos cuentas.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 22/10/2007, 17:15
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 3 meses
Puntos: 2
Re: Redirigir a otra página web

Cita:
Iniciado por Marvin Ver Mensaje
La funcion mail() y header() son las que te hacen el conflicto... ya que las dos funciones envian datos al browser y es como que hubieran dos personas peleandose por un pedazo de pan.
En esto no estoy de acuerdo. La función mail() no genera salida al navegador por lo que funciona perfectamente bien con header(). Puedes probar lo siguiente:

Código PHP:
<?php
mail
('[email protected]''Asunto''Mensaje');
header('Location: http://www.google.com');
?>
Si no tiene problema con su servicio de SMTP el mensaje será enviado y terminaremos en Google.com. De todas formas recomiendo que le peguen un vistazo al código que hace referencia Marvin () ya que presenta metodologías diferentes para el caso.

Por otro lado, si nos ofreces el código completo nos va a resultar mas sencillo encontrar el error.

Saludos.
__________________
R4DS en español | R4DS en inglés
  #7 (permalink)  
Antiguo 22/10/2007, 17:54
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
Re: Redirigir a otra página web

Enviar, me envía perfectamente todo el formulario por email, ahí no hay problema ninguno, el problema está en la redirección sólo.
  #8 (permalink)  
Antiguo 22/10/2007, 18:59
Avatar de allhen  
Fecha de Ingreso: septiembre-2005
Mensajes: 243
Antigüedad: 19 años, 2 meses
Puntos: 1
Exclamación Re: Redirigir a otra página web

Cita:
Iniciado por rvelezb Ver Mensaje
mail("[email protected]","Formulario de Reserva de Mesa",$cuerpo,$headers);

header("location:http://www.midominio.com/enviado.htm");
exit();[/php]



mail('[email protected]', 'Asunto', 'Mensaje');
header('Location: http://www.google.com');




estas haciendo 2 redirecciones !! en mail() ( le dices q luego de enviarse el mail vaya a enviado.htm) y luego de realizada la function mail() vaya a google.com
__________________
En esta vida todo es posible ... excepto vencer a la muerte .
  #9 (permalink)  
Antiguo 22/10/2007, 19:31
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 19 años, 5 meses
Puntos: 4
Re: Redirigir a otra página web

Cita:
Iniciado por Marvin Ver Mensaje
es como que hubieran dos personas peleandose por un pedazo de pan.

__________________
Nuevamente a las pistas ...
  #10 (permalink)  
Antiguo 22/10/2007, 20:26
Usuario no validado
 
Fecha de Ingreso: julio-2003
Ubicación: <?="www.tuky.cl";?>
Mensajes: 132
Antigüedad: 21 años, 4 meses
Puntos: 4
Re: Redirigir a otra página web

pone esto al inicio del archivo.

ob_start();

y problama solucionado
  #11 (permalink)  
Antiguo 22/10/2007, 21:53
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 3 meses
Puntos: 2
Re: Redirigir a otra página web

El código que has colocado no tiene nada que pueda provocar error con los headers, el problema debe venir de antes de eso.
En caso que no lo puedas corregir siempre tienes la opción propuesta por tuky del uso de buffers.

Saludos.
__________________
R4DS en español | R4DS en inglés

Última edición por zaqpz; 22/10/2007 a las 22:03
  #12 (permalink)  
Antiguo 23/10/2007, 06:58
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
De acuerdo Re: Redirigir a otra página web

He probado el código que había sugerido zapqz:

Código PHP:
mail('[email protected]''Asunto''Mensaje');
header('Location: http://www.google.com'); 
Sólo que la dirección de email suya por la mía, pero lo demás igual, pero tampoco funciona, el mensaje lo envía, pero como ya dije, la redirección no me lo hacía, así que tampoco era problema de que el cuerpo del mensaje fuera una variable tipo cadena, con varias líneas con HTML, ni nada por el estilo.

También he estado mirando el mensaje de Marvin de diferentes formas de actualizar la página, pero no me vale ninguno de los casos, ya que la redirección por Meta no la puedo hacer, ya que sólo quiero que haga la redirección cuándo envíe el formulario por correo, no antes, y en caso de que no se llegue a enviar tampoco quiero que me redireccione, en el Meta no puedo poner condicionantes.

Código HTML:
<META HTTP-EQUIV="REFRESH" CONTENT="2;URL=http://www.midominio.com/enviado.htm"> 


Así que al final he optado por lo seguro, y he colocado al principio de la página la función que sugirió tucky, y funciona perfectamente sin tener que cambiar nada más.


Muchas gracias a todos por vuestra ayuda, y sobre todo por vuestra paciencia, ya que estoy empezando a programar en PHP, y todavía tengo algunas dificultades.

Última edición por rvelezb; 23/10/2007 a las 08:05
  #13 (permalink)  
Antiguo 23/10/2007, 07:56
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Redirigir a otra página web

Para otra oportunidad que pase lo mismo, antes de usar la "funcion magica" busca en algun lugar del script debes tener alguna salida al navegador.
Sacando eso problema terminado.

Saludos
Andres
  #14 (permalink)  
Antiguo 23/10/2007, 08:13
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
Pregunta Re: Redirigir a otra página web

¿Las animaciones flash se pueden considerar "salida al navegador"?, porque igual es por eso.

Código:
<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" id="obj1" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" border="0" width="77" height="37">
			<param name="movie" value="LoopPlayer.swf" />
			<param name="quality" value="High" />
			<param name="wmode" value="transparent" />
			<embed src="LoopPlayer.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="obj1" width="77" height="37" quality="High" wmode="transparent"></embed></object>
Porque es que otra cosa tampoco encuentro, quizás puede ser también esto que tengo puesto al final de la etiqueta form, para validar el formulario, el tamaño de los campos, etc.:

Código:
onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript"
  #15 (permalink)  
Antiguo 23/10/2007, 08:28
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Redirigir a otra página web

Tambien como buena practica trata siempre de hacer un if a la funcion mail... para saber si se envio o no, por esta razon te sugeria los meta para que lo activaras siempre y cuando el mail se hubiese enviado.

Código PHP:
if(mail(xaoijsodxx....)){
  
//redirect
}else{
  
//<script language="javascript">alert("No se envio esta meggd");</script>

O algo asi xD.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #16 (permalink)  
Antiguo 23/10/2007, 09:03
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Redirigir a otra página web

Al poner un <object classid="...... estas teniendo una salida al navegador.

Saludos
Andres
  #17 (permalink)  
Antiguo 23/10/2007, 09:12
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
Pregunta Re: Redirigir a otra página web

Cita:
Iniciado por Marvin Ver Mensaje
Tambien como buena practica trata siempre de hacer un if a la funcion mail... para saber si se envio o no, por esta razon te sugeria los meta para que lo activaras siempre y cuando el mail se hubiese enviado.

Código PHP:
if(mail(xaoijsodxx....)){
  
//redirect
}else{
  
//<script language="javascript">alert("No se envio esta meggd");</script>

O algo asi xD.

Suerte!
OK, gracias por la sugerencia, no lo había tenido en cuenta, ahora mismo lo añadiré.

El "If" iría después de la función "mail", ¿no?, más o menos así:

Código PHP:
mail("[email protected]","Formulario de Reserva de Mesa",$cuerpo,$headers);
if (
mail("[email protected]","Asunto",$cuerpo,$headers)) {
   
// redirección
} else {
       
// mensaje error

¿O directamente se ejecutaría dentro del If?.

Código PHP:
if (mail("[email protected]","Asunto",$cuerpo,$headers)) {
   
// redirección
} else {
       
// mensaje error


Última edición por rvelezb; 23/10/2007 a las 09:22
  #18 (permalink)  
Antiguo 23/10/2007, 09:17
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
Información Re: Redirigir a otra página web

Cita:
Iniciado por andruqui Ver Mensaje
Al poner un <object classid="...... estas teniendo una salida al navegador.

Saludos
Andres
Ah, vale, ya encontramos dónde estaba el problema. Entonces tengo que dejar la "función mágica", porque el flash ese no lo puedo quitar, es el menú de navegación. Para saberlo para otras ocasiones, ¿podrías decirme, o indicarme algún FAQ o Manual, si fueras tan amable, lo que se considera "salida al navegador"?, porque el problema es que no lo tengo muy claro, por eso no había caído en eso.

Gracias por la aclaración.
  #19 (permalink)  
Antiguo 23/10/2007, 09:20
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Redirigir a otra página web

Va directamente en el if, si lo pones antes se enviaran dos mail o ninguno.

En el fondo lo que haces con agregarle el if es preguntar si la funcion mail procede bien o no.
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #20 (permalink)  
Antiguo 23/10/2007, 09:21
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Redirigir a otra página web

Si haces esto
Código PHP:
mail("[email protected]","Formulario de Reserva de Mesa",$cuerpo,$headers);
if (
mail("[email protected]","Asunto",$cuerpo,$headers)) {
   
// redirección
} else {
       
// mensaje error

estas mandando 2 veces el mail

hace la segunda opcion.

Saludos
Andres
  #21 (permalink)  
Antiguo 23/10/2007, 09:25
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
De acuerdo Re: Redirigir a otra página web

Ok, muchas gracias a los dos, y perdonar que sea tan pesao.
  #22 (permalink)  
Antiguo 23/10/2007, 09:33
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Redirigir a otra página web

Cita:
Iniciado por zaqpz
La función mail() no genera salida al navegador por lo que funciona perfectamente bien con header().
Eso dependera si la funcion mail envio el mail o no, ya que si no la envia y como la estaba usando en un principio, envia el error al browser y eso tiene conflictos con el header() que le sigue.

Weno... solo keria acotar eso.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #23 (permalink)  
Antiguo 23/10/2007, 12:40
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 3 meses
Puntos: 2
Re: Redirigir a otra página web

Cita:
Iniciado por Marvin Ver Mensaje
Eso dependera si la funcion mail envio el mail o no, ya que si no la envia y como la estaba usando en un principio, envia el error al browser y eso tiene conflictos con el header() que le sigue.
Eso es cierto, por eso más abajo aclaré:

Cita:
Iniciado por zaqpz Ver Mensaje
Si no tiene problema con su servicio de SMTP el mensaje será enviado y terminaremos en Google.com.
Salida al navegador es, por ejemplo, toda etiqueta HTML que pueda existir antes de un <?php y todo echo, print, o cualquier "cosa" que genere un mensaje al navegador dentro de etiquetas <?php ?>. Incluso líneas en blanco antes de la apertura de PHP hace que se envien las cabeceras al navegador. Esto por ejemplo envia salida:

Código PHP:
<div>...</div>
<?php
header
(/*...*/);
?>
Por lo que tu etiqueta object es la que origina el problema.

Saludos.
__________________
R4DS en español | R4DS en inglés

Última edición por zaqpz; 23/10/2007 a las 12:54
  #24 (permalink)  
Antiguo 23/10/2007, 17:04
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 21 años, 4 meses
Puntos: 1
De acuerdo Re: Redirigir a otra página web

Por etiqueta HTML, te refieres a las DIV y SPAN, ¿no?, vale, ahora me queda más claro lo de la salida al navegador, en mi caso el problema estaba en la etiqueta Object, que contenía el código Flash, pero en este caso, esa no la podía quitar, menos mal que lo pude arreglar gracias a lo de los buffer, con la función ob_start().


Muchas gracias a todos.
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 14:10.