Foros del Web » Programando para Internet » PHP »

Aplicar redireccion a formulario

Estas en el tema de Aplicar redireccion a formulario en el foro de PHP en Foros del Web. Código PHP:   //Estoy recibiendo el formulario, compongo el cuerpo      $cuerpo  =  "Formulario enviado\n" ;      $cuerpo  .=  "Nombre: "  .  $HTTP_POST_VARS [ "nombre" ] .  "\n" ;      $cuerpo  .=  "Mes: "  .  ...
  #1 (permalink)  
Antiguo 22/10/2003, 18:35
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Error en sintaxis del formulario

Código PHP:
 //Estoy recibiendo el formulario, compongo el cuerpo 
   
$cuerpo "Formulario enviado\n"
   
$cuerpo .= "Nombre: " $HTTP_POST_VARS["nombre"] . "\n"
   
$cuerpo .= "Mes: " $HTTP_POST_VARS["mes"] . "\n"
   
$cuerpo .= "Dia: " $HTTP_POST_VARS["dia"] . "\n"
   
$cuerpo .=  "Año: " $HTTP_POST_VARS["anio"] . "\n"
   
$cuerpo .= "Telefax: " $HTTP_POST_VARS["telfax"] . "\n"
   
$cuerpo .= "Telefax2: " $HTTP_POST_VARS["telfax2"] . "\n"
   
$cuerpo .= "Direccion: " $HTTP_POST_VARS["direccion"] . "\n"
   
$cuerpo .=  "Email: " $HTTP_POST_VARS["email"] . "\n"
           
    
$to "[email protected]";
    
$subject "$nombre ha enviado este formulario";
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Discos <$email> \r\n"
    
$mailheader .= "Return-path: $email \r\n";
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"

    
mail ($to,$subject,$cuerpo,$mailheader);

        
//doy las gracias por el envío 
        
echo "Gracias por rellenar el formulario. Se ha enviado correctamente."
                     } 
    
?> 
Mi pregunta es como redirecciono este formulario a index.html

, y bueno como lograria darle formato, pues cuando llega a mi correo, llego todo junto y es algo dificil de leer.
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol

Última edición por Gerald; 23/10/2003 a las 21:08
  #2 (permalink)  
Antiguo 22/10/2003, 20:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La redirección te recomendaría que hicieras:

Código PHP:
header("Location: gracias.html");
exit; 
En lugar de usar tu echo "gracias .. bla bla"; y, en tu página HTML "gracias.html" ahi muestras tu mensajito de grácias y colocas un link hacia el index.html ...

Si quieres que sea automático a X tiempo .. usa las cabeceras de refresh <META ...> y avisa algo tipo (como estos foros) ..

"Gracias .. su mensaje fué enviado. En unos segundos se redireccionará hacia el la página principal .. si no sucede esto o no quiere esperar .. clickee aquí (y tu link hacia el index) .."

Código:
<head>
<meta http-equiv="refresh" content="20;url=index.html">
</head>
(en el head de tu HTML ..)
el cual trabaja

Así evitaras que si te "recargan" tu página donde muestras el mensaje de "gracias" .. provoque envios sucesivos de e-mails (con los mismos datos) como así sucede en tu script original .. o si sólo usases el "meta de refresh" en tu script original (sin página "gracias" como te comento hacerlo).

-------

Los saltos de línea que estás dando .. son válidos para Texto plano .. pero no para HTML como así lo estás enviando por las cabeceras que usas ..

Una forma rápida de solventar ese problema de "todo me sale junto" .. es usar antes de mail() y despues de tu últmo $cuerpo:

Código PHP:
$cuerpo=nl2br($cuerpo); 
nl2br() convierte tus \n en <br> que es el salto de línea en HTML.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 22/10/2003, 21:28
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Re: Aplicar redireccion a formulario

Asi deberia quedar

Código PHP:
 //Estoy recibiendo el formulario, compongo el cuerpo 
   
$cuerpo "Formulario enviado\n"
   
$cuerpo .= "Nombre: " $HTTP_POST_VARS["nombre"] . "\n"
   
$cuerpo .= "Mes: " $HTTP_POST_VARS["mes"] . "\n"
   
$cuerpo .= "Dia: " $HTTP_POST_VARS["dia"] . "\n"
   
$cuerpo .=  "Año: " $HTTP_POST_VARS["anio"] . "\n"
   
$cuerpo .= "Telefax: " $HTTP_POST_VARS["telfax"] . "\n"
   
$cuerpo .= "Telefax2: " $HTTP_POST_VARS["telfax2"] . "\n"
   
$cuerpo .= "Direccion: " $HTTP_POST_VARS["direccion"] . "\n"
   
$cuerpo .=  "Email: " $HTTP_POST_VARS["email"] . "\n"
   
$cuerpo  nl2br($cuerpo);
           
    
$to "[email protected]";
    
$subject "$nombre ha enviado este formulario";
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Discos <$email> \r\n"
    
$mailheader .= "Return-path: $email \r\n";
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"

    
mail ($to,$subject,$cuerpo,$mailheader);

        
//redirecciono
        
header("Location: gracias.html");
exit;
                     } 
    
?> 

Gracias.html

<html><head>
<head>
<meta http-equiv="refresh" content="7;url=index.html">
</head><Title>Se envio con exito</title>
<body>
El formulario fue enviado con exito <a href="index.html">click para continuar</a></body>
</html>

Es correcto o incorrecto.

Por ciertoo me diste la caña y empiezo a pescar
Que crees que debo mejorar a cluster
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #4 (permalink)  
Antiguo 22/10/2003, 22:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues.. mail() por ejemplo devuelve un "boolean" según pueda o no enviar el e-mail (en concreto sólo puede avisarte si lo pudo enviar al MTA que corra ese servidor .. no exactamente si le llegó a tu destinatario ..) pero, algo es algo .. Por ende .. puedes hacer un "if" al mail() y enviar a tu gracias.html si todo fué bien .. o al "error.html" si algo falló ..

if (mail(...)){
header ... gracias
exit;
} else {
header ... error
exit;
}

Lo otro que falta es "validar" esos datos .. (no sé si lo harás antes pero, parece que no) .. Debes validar por lo menos si te introducen un nombre .. o las variables que requieras obligatorias .. de nada sirve un formulario de contacto que se envia "vacío" .. para eso mejor que no se envie el e-mail, no?..

Para la "validación" .. según sea el tipo de dato de tus variables .. acude al manual de PHP y mira las funciones de tratamientos de cadenas (strings) o .. funciones tipo is_xxxx() .. que para la mayoría de casos va bien. Funciones como empty() o isset() también te ayudarán ..

Y si es posible .. usa los arrays superglobales ($_GET .. $_POST .. etc) (si usas PHP 4.1.0 o superior) ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 23/10/2003, 17:41
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Código PHP:
$cuerpo .=  "Email: " $HTTP_POST_VARS["email"] . "\n"
        
$cuerpo .= "Nombre de la Produccion: " $HTTP_POST_VARS["nomproduccion"] . "\n"
                  
$cuerpo .= "Unidades: " $HTTP_POST_VARS["unidades"] . "\n"
        
$cuerpo .= "Bulk: " $HTTP_POST_VARS["bulk"] . "\n"
    
$cuerpo .= "Empaque: " $HTTP_POST_VARS["empaque"] . "\n"
                  
$cuerpo .=  "Discos: " $HTTP_POST_VARS["discos"] . "\n"
        
$cuerpo .= "Colores: " $HTTP_POST_VARS["colores"] . "\n"
                  
$cuerpo .= "Paneles: " $HTTP_POST_VARS["paneles"] . "\n"
        
$cuerpo .= "Colores2: " $HTTP_POST_VARS["colores2"] . "\n"
    
$cuerpo .= "Bar Code: " $HTTP_POST_VARS["barcode"] . "\n"
                  
$cuerpo .= "Iniciales: " $HTTP_POST_VARS["iniciales"] . "\n"
                  
$cuerpo  nl2br($cuerpo);

        
    
$to "[email protected]";
    
$subject "$nombre ha enviado este formulario";
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Discos <$email> \r\n"
    
$mailheader .= "Return-path: $email \r\n";
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"
    if (
mail ($to,$subject,$cuerpo,$mailheader))
    {
    
header("Location: gracias.html");
    exit;
    } else {
    
header("Location: error.html");
    exit;
    }
    }
    
?> 
En que estoy fallando :( me sale error

Warning: Cannot add header information - headers already sent by (output started at /home/httpd/vhosts/g2project.com/httpdocs/formulario.php:3) in /home/httpd/vhosts/g2project.com/httpdocs/formulario.php on line 288


En que estoy metiendo la pata!
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #6 (permalink)  
Antiguo 24/10/2003, 01:01
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno...

Asegúrate de que no se esté escribiendo nada en la página antes de la redirección con header. Nada de HTML (ningún "echo")
Revisa que no hayan espacios en blanco antes de "<? " ni después de "?>".

Por lo que se ve, el ACTION de tu formulario.php te lleva a la misma página formulario.php.

Una solución sencilla es crear una página que se llame por ejemplo mail_proceso.php donde esté SOLAMENTE el código del envío del mail que has publicado. Sin ningún otro "include" ni nada parecido. Y dirigir el ACTION ahí.

La otra solución para utilizar una sola página es asegurarte de que sólo se ejecute el código del envío del mail (lo que publicaste)y ninguna otra cosa más. Ningún "echo" previo ni HTML, ni "includes" que puedan contenerlo.

Un saludo
  #7 (permalink)  
Antiguo 24/10/2003, 07:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En la línea:

/home/httpd/vhosts/g2project.com/httpdocs/formulario.php:3

3 de ese formulario.php tienes algo de lo que comentó jpinedo (sea un simple espacio .. salto de línea . HTML directo o vía echo "algo" .. etc)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 24/10/2003, 14:54
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Voy a chequear el codigo

A ver que pasa, en todo caso posteare todo el codigo , aunque me dice que son muchos caracteres :)
Les aviso y gracias por su paciencia
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #9 (permalink)  
Antiguo 24/10/2003, 15:48
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Bueno gracias Cluster y jpinedo tenian razon un espacio esta jodiendo todo el script.

al final hice lo que me dijiste cluster, llame al formulario form.php y al Action=formulario.php , me seguia dando errores, pero el error era que dejaba espacio entre
header("Location: gracias.html"); y es asi como esta abajo :D.


header("Location:gracias.html");
exit;
} else {
header("Location:error.html");
exit;
}
?>

Bueno los campos los valide con javascript, menos pesado para el cliente, pero efectivo, ahora cluster como me recomiendas de eso que tu siempre hablas, variables superglobales.

Gracias maestro!!
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #10 (permalink)  
Antiguo 24/10/2003, 17:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Las validaciones debes hacerlas SIEMPRE en última instanacia en el servidor (en tu código PHP en este caso) ..

Si bien javascript es más "usable" .. NO es seguro. Así que no descuides la seguridad y haz tus validaciones también en PHP!!!

Lo de los array superglobales .. en las FAQ's tienes ejemplos.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 24/10/2003, 19:01
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Bueno sigo sin entender

Lo del formulario ya lo entendi pero busquue en las FAQs y nada.
Quiero saber como seria mi script con las variables superglobales.

Y eso de la validacion con php, intentare hacerlo, aunque hasta donde avanzado mi cliente quedo satisfecho.

Ayuda please
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #12 (permalink)  
Antiguo 24/10/2003, 19:59
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
si las variables las recoges con POST seria asi
Código PHP:
$cuerpo .=  "Email: " $_POST["email"] . "\n"
si el formaulario fuese GET
Código PHP:
$cuerpo .=  "Email: " $_GET["email"] . "\n"
eso son las superglobales.... y asi de sencillo se recogen los datos de un formulario

podrias comprobar que el formulario esta correctamante rellenado

Código PHP:
if ($_POST["email"]  or $_POST["otro"] =="") {
echo 
"error, rellena todo el formulario";
exit; 
etc....
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 24/10/2003 a las 20:03
  #13 (permalink)  
Antiguo 24/10/2003, 20:18
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Voy entendiendo

Código PHP:
 $cuerpo .=  "Email: " :  . $_POST["email"] . "\n";
 
$cuerpo .= "Bar Code: " $_POST["barcode"] . "\n"
 
$cuerpo .= "Iniciales: " $_POST["iniciales"] . "\n"
 
$cuerpo  nl2br($cuerpo);
        
    
$to "[email protected]";
    
$subject "$nombre ha enviado este formulario";
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Discos <$email> \r\n"
    
$mailheader .= "Return-path: $email \r\n";
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"
    if (
mail ($to,$subject,$cuerpo,$mailheader))
    {
    
header("Location:gracias.html");
    exit;
    } else {
    
header("Location:error.html");
    exit;
    }
    
?> 
Asi mis variables ya serian superglobales

En el caso de mail() asi las dejaria o que debo hacer
Código PHP:
if (mail ($to,$subject,$cuerpo,$mailheader)) 

gracias nuevo
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #14 (permalink)  
Antiguo 24/10/2003, 20:20
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
si estas var $to,$subject,$cuerpo,$mailheader, transportan los datos, claro que puedes dejarlo asi. ;)
__________________
3w.valenciadjs.com
3w.laislatv.com
  #15 (permalink)  
Antiguo 24/10/2003, 20:25
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Bueno gracias man :) eres un as, igualmente cluster son muy buenos maestros.
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #16 (permalink)  
Antiguo 24/10/2003, 20:29
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
jeje, yo no hecho mas que empezar... un saludo.
__________________
3w.valenciadjs.com
3w.laislatv.com
  #17 (permalink)  
Antiguo 25/10/2003, 23:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
nuevo ..

Es recomendable que no asumas un "existe" de una variable tipo

if ($_POST['nose'])

(a no ser que sea un booleano: TRUE/FALSE)

Es altamente recomendable usar:

if (isset($_POST['nose'])

o incluso

if (empty($_POST['nose']))

Con isset() preguntas si tal variable está "definida" . y con empty() ademas de ver si está definida .. se mira si tiene valor (distindo de NULL ('') o 0 (cero) ..)

Y para el resto de validaciones típicas como .. ver si el dato que pides es numérico que así sea .. y cosas por el estilo, tienes funciones tipo:

is_xxxx() .. que te devuelven un "true o false" para usarlo en tus:

IF (is_xxxx($_POST['nose']))

Un saludo,

PD: Gerald, uno como programador tiene que "saber" más que tu cliente. Si tu cliente está conforme con validación javascript .. OK, pero cuando reciba algún mail() sin algún dato de los que requieres ..ahí te "buscará" y te preguntará que "pasó?". Recuerda que los que tienen ganas de "joder" suelen aprovecharse de ese tipo de "ingenuidades" como la de sólo validar por javascript y otros descuidos vários (sean por desconocimiento o simplemente por omisión).
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #18 (permalink)  
Antiguo 25/10/2003, 23:54
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
Gracias Cluster por la aclaracion, como siempre tienes toda la razon, esq un maestro es un maestro, yo solo soy un pequeño y novato aprendiz.

un saludo y aupa!! fdw
__________________
3w.valenciadjs.com
3w.laislatv.com
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 22:15.