Foros del Web » Programando para Internet » PHP »

envio de formulario por email

Estas en el tema de envio de formulario por email en el foro de PHP en Foros del Web. Hola a todos: tengo un formulario que envio por mail. El codigo es: <? if (!isset($_POST)){ ?> <form name="valoracion" method="POST" action="prprp.php"> aqui viene el fom... ...
  #1 (permalink)  
Antiguo 18/12/2004, 07:05
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 9 meses
Puntos: 0
envio de formulario por email

Hola a todos:

tengo un formulario que envio por mail. El codigo es:
<?
if (!isset($_POST)){
?>
<form name="valoracion" method="POST" action="prprp.php">
aqui viene el fom...
</form>
<?
}else{
$cuerpo = "Se ha recibido una nueva valoracion de asturnatura.com\n";
$cuerpo .= "Valoración del diseño: ".$_POST["dise"]."\n";
$cuerpo .= "Valoración de las descripciones: ".$_POST["descr"]."\n";
$cuerpo .= "¿Encontré lo que buscaba?: ".$_POST["buscabas"]."\n";
$cuerpo .= "Lo que más me ha gustado: ".$_POST["gustado"]."\n";
$cuerpo .= "Lo que hecho en falta: ".$_POST["falta"]."\n";
mail("[email protected]","Valoración asturnatura",$cuerpo);
echo "Gracias por colaborar con nosotros y por visitar asturnatura.com";
}
?>

funciona bien, pero ocurre que cuando envio el formulario, se recarga la misma pagina otra vez, y si le doy a actualizar se envia un nuevo mail con los datos en blanco.

¿Como puedo evitar este reenvio al actualizar?
Gracias
  #2 (permalink)  
Antiguo 18/12/2004, 09:31
Avatar de Parzival  
Fecha de Ingreso: junio-2004
Ubicación: Vive en el foro
Mensajes: 190
Antigüedad: 20 años, 5 meses
Puntos: 2
Puedes enviar una variable GET junto con el formulario y según el valor de esta variable ejecutas el código de mandar el mail y luego redireccionas a otra página.

En la propiedad action pon: action="prprp.php?enviar=1"

y luego al principio del archivo, escribe en php:

Código:
<?php
   if ($_GET['enviar']==1)
   {
      //Código para mandar el mail
      header("location: prprp.php");
   }
Con esto ya no pasas la variable $_GET['enviar'] y por lo tanto no vuelve a mandar el mail.

Espero que te sirva
  #3 (permalink)  
Antiguo 18/12/2004, 15:48
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 9 meses
Puntos: 0
No entiendo muy bien lo que quieres decir
  #4 (permalink)  
Antiguo 19/12/2004, 05:56
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 9 meses
Puntos: 0
ya te entendi, pero me da error y no se porque. lo que tengo ahora es esto:

en la cabecera del archivo, antes de <html>
Código PHP:
<? 
   
if ($_GET['enviar']==1)
 {
    
//Estoy recibiendo el formulario, compongo el cuerpo 
    
$cuerpo "Valoración de la web\n"
    
$cuerpo .= "Diseño: " $_POST["dise"] . "\n"
    
$cuerpo .= "Descripciones: " $_POST["descr"] . "\n"
    
$cuerpo .= "Lo que buscaba: " $_POST["buscaba"] . "\n"
    
$cuerpo .= "Lo que más me gusto: " $_POST["gustado"] . "\n"
    
$cuerpo .= "Lo que falta: " $_POST["falta"] . "\n"
    
    echo 
$_POST["buscaba"];

    echo 
"Gracias por colaborar con nosotros y visitarnos"
    
//mando el correo... 

    
mail("[email protected]","Valoracion web",$cuerpo); 
   
    echo 
"hh";
 
    
header("location: prueba.php");
      } 
     
?>
y debajo, en el body,

<form name="valoracion" method="POST" action="prueba.php?enviar=1">
......
</form>

lo que ocurre es qe sale en pantalla una vez que envias el formulario:
Gracias por colaborar con nosotros y visitar asturnatura.com.hh

y me da el error
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/prueba.php:12
por lo que no se abre prueba.php

y ademas me manda un mensaje en blanco, porque no reconoce las variables $_POST["..."]

Una mano porque si no me vuelvo loco, por favor.
  #5 (permalink)  
Antiguo 20/12/2004, 05:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
undariarose ´

En ese script no puedes tener ningún echo "algo" ni nada de salida HTML/javascript/etc al cliente antes de usar header() .

El script (o parte del proceso) que envia el e-mail (que toma tus variables del formulario y lo envia por mail()) no ha de generar ninguna salida.

Quita todo el HTML y echo que tengas ahí. Muestra tus mensajes de error o fallo en la página que redireccionas con header().

A su vez .. si mail() se ejecutó .. devuelve un "true" y sino .. un "false" .. así que pudes usar:

Código PHP:
if (mail(....)){
  
header ("Location: todook.php");
  exit;
} else {
  
header ("Location: todomal.php");
  exit;

Un saludo,
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 13:09.