Foros del Web » Programando para Internet » PHP »

Validación en envío de mail

Estas en el tema de Validación en envío de mail en el foro de PHP en Foros del Web. Hola gente!!! Hace algo de tiempo ya, encontré dentro del foro este código (gracias a quien corresponda por aclararme algunos puntos) para hacer el envío ...
  #1 (permalink)  
Antiguo 09/04/2005, 20:58
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Validación en envío de mail

Hola gente!!!

Hace algo de tiempo ya, encontré dentro del foro este código (gracias a quien corresponda por aclararme algunos puntos) para hacer el envío de mails y recepcionarlo en una casilla determinada, funciona bien, excepto que cuando no se ingresa el nombre o el mail no sale el mensaje correspondiente como debería, cómo puedo hacer la validación???

Espero alguna ayuda...
Gracias!!!

enviar.php

<?
$mensaje = "";
if (isset($_POST["enviar"])){
if(empty($_POST[nombre])){
$mensaje .= "Ingrese su nombre.<br>";
}
if(empty($_POST[email])){
$mensaje .= "Ingrese su email.<br>";
}
if ($mensaje != ""){
echo "Se han producido los siguientes errores:<br>".$mensaje;
echo "<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";

}
}

//Estoy recibiendo el formulario, compongo el cuerpo
$cuerpo .= "<b>Nombre:</b> " . $_POST["nombre"] . "\n";
$cuerpo .= "<b>E-mail:</b> " . $_POST["email"] . "\n";
$cuerpo .= "<b>Teléfono:</b> " . $_POST["telefono"] . "\n";
$cuerpo .= "<b>Localidad:</b> " . $_POST["localidad"] . "\n";
$cuerpo .= "<b>Comentario:</b> " . $_POST["comentario"] . "\n";
$cuerpo = nl2br($cuerpo);
$to = "[email protected]";
$subject = "$nombre - Consulta";
$mailheader = "MIME-Version: 1.0 \r\n";
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n";
$mailheader .= "From: Formulario de Consulta <$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;
}
?>
__________________
Saludos!!!
Maru.-
  #2 (permalink)  
Antiguo 09/04/2005, 21:16
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Iniciado por Maru77
(...) cuando no se ingresa el nombre o el mail no sale el mensaje correspondiente como debería, cómo puedo hacer la validación???
(...)
Qué te sale?... el código que mencionas ya tiene un sistema de validación; bastante sencillo y no confiable... pero lo tiene:
Código PHP:
<? 
$mensaje 
"";
if (isset(
$_POST['enviar'])){
if(empty(
$_POST['nombre'])){ // checa que el campo "nombre" no este vacio
$mensaje .= "Ingrese su nombre.<br>";
}
if(empty(
$_POST['email'])){ // checa que el campo "email" no este vacio
$mensaje .= "Ingrese su email.<br>";
}
if (
$mensaje != ""){ // si hubo algún campo vacio... imprime el mensaje un link de "atrás"
echo "Se han producido los siguientes errores:<br>".$mensaje;
echo 
"<input TYPE=\"button\" VALUE=\" ATRÁS\" onClick=\"history.go(-1)\">";
¿entonces??...

Saludos!
Nota: he cambiado algunas cosillas del código... comillas... corrigelas. Y puedes poner tu código entre las etiquetas [ PHP] Y [ /PHP] (sin espacios) para que sea más fácil a la lectura... así como lo hice yo; se te agradeceria.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 09/04/2005 a las 21:17
  #3 (permalink)  
Antiguo 09/04/2005, 21:18
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
Si todo vento te dirigés a gracias.html, si todo mal te redirreccionas a error.html, pero los echo "debes completar el nombre, mail, blabla"; estan el script enviar.php
Es decir q los imprime en una página q ya no existe, porq redirecciona a error.html.
Pasale el error por url Ej.: error.php?error=mensaje
__________________
Dios dira que esto no es justo, pero lo sera...
  #4 (permalink)  
Antiguo 09/04/2005, 21:36
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... de hecho... sí tienes un error... gracias a lo mencionado por sebvet lo ví:

Primero tienes la validación de la que ya hice mención yo... pero el if inicial (if (isset($_POST["enviar"])){) solo envuelve a esa parte del código... no tiene un else, por lo que la segunda parte también se ejecutará... y en la segunda parte tienes algo como una segunda validación (lo que menciona sebvet) en la que haces usos de la función header()... error... no puedes convinar ambas...

La solución rápida sería que borraras esos header()'s del final.. y que el código propio del envio del mail lo encerraras en un else, quedando una estructura como esta:
Código PHP:
if(se_envió) {
   if (
campo vacio){
      
imprimo botón volver atrás
   
} else {
      
mando correo
   
}

... no habría problemas con que pierdas los valores con tu botón de "atrás"... pués empleas una función de JS...

Ahora bien, esto sería lo fácil... pero sería mejor usaras la función header(). Para tal caso sería un poquito más complejo... tendrías que pasar los errores por la URL.. como lo mencionaron.

Te dejo un link http://www.forosdelweb.com/showthrea...=258911&page=2 en que hice algo sencillo... simplemente ve si un campo esta vacio y de estaro redirecciona a una página anterior y cambia de color los dichos campos vacios.. además de que paso los valores introducidos para no perderlos... observalo bien, puedes personalizarlo para que te envie un mensaje de error ó lo que se te ocurra, el funcionamiento es el mismo... igual en ese mismo post dejé otro enlace hacia otro sistema de validación... y si buscas en el foro encontrarás más.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 09/04/2005 a las 21:40
  #5 (permalink)  
Antiguo 13/04/2005, 15:46
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Disculpas por demorarme en probar el código... y muchas gracias por su

ayuda!!!

Intenté hacer algo de lo que me dijeron, pero cuando no ingreso ningún

dato no sale ningún mensaje.

Código PHP:
<? 
$mensaje 
"";
if (isset(
$_POST["enviar"])){
  if(empty(
$_POST[nombre])){
  
$mensaje .= "Ingrese su nombre.<br>";
  }
  if(empty(
$_POST[email])){
  
$mensaje .= "Ingrese su email.<br>";
  }

else { 
    
    
//Estoy recibiendo el formulario, compongo el cuerpo 
    
$cuerpo "<b>Estudio A - Formulario de Consulta</b>\n\n"
    
$cuerpo .= "<b>Nombre:</b> " $_POST["nombre"] . "\n"
    
$cuerpo .= "<b>E-mail:</b> " $_POST["email"] . "\n"
    
$cuerpo .= "<b>Teléfono:</b> " $_POST["telefono"] . "\n";         
    
$cuerpo .= "<b>Comentario:</b> " $_POST["comentario"] . "\n"
    
$cuerpo  nl2br($cuerpo); 
    
$to "[email protected]"
    
$subject "$nombre - Consulta"
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Consulta <$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)
    
header("Location:gracias.html"); 

}
?>
__________________
Saludos!!!
Maru.-
  #6 (permalink)  
Antiguo 13/04/2005, 15:53
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
¿y cuándo haces un echo $mensaje; ???
Código PHP:
// elimino $mensaje= "";
if (isset($_POST['enviar'])){  // ojo con las comillas
  
if(empty($_POST['nombre'])){ // comillas
  
$mensaje .= "Ingrese su nombre.<br>"
  } 
  if(empty(
$_POST['email'])){  // más comillas
  
$mensaje .= "Ingrese su email.<br>"
  } 
// a este punto... solo si hubo un campo vacio la variable $mesaje existe.
// Entonces....
if(isset($mensaje)) echo $mensaje;
else echo 
"mandamos mail";  // este else debe de estar relacionado con el if anterior.. no el inicial 
Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 15:37.