Foros del Web » Programando para Internet » PHP »

Validar captcha antes de enviar email

Estas en el tema de Validar captcha antes de enviar email en el foro de PHP en Foros del Web. Hola, tengo un mini formulario en el home que permite enviar un mensaje pero quiero agregar un captcha y no me valida. El form está ...
  #1 (permalink)  
Antiguo 25/09/2012, 13:35
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Validar captcha antes de enviar email

Hola, tengo un mini formulario en el home que permite enviar un mensaje pero quiero agregar un captcha y no me valida. El form está aqui:

http://vamonosdevacaciones.com.ve/

Este es el código del form:

Código PHP:
Ver original
  1. $code = trim($_POST['code']);
  2. if(isset($_POST['save']))
  3.     {
  4.         if($_SESSION['captcha'] == $code)
  5.         {
  6.             echo "<span style='color:green'>Es correcto el captcha ingresado</span>";
  7.         }
  8.         else
  9.         {
  10.             echo "<span style='color:red'>Es incorrecto el captcha ingresado</span>";
  11.         }  
  12.     }
  13.  
  14.  
  15.         <form method="post" action="envio.php" id="myform" name="myform" onSubmit="return limpiar()" >
  16.         <fieldset id="caja_mensaje">
  17.         <legend>Contacto</legend>
  18.         <ol>
  19.             <li><label>Nombre:</label><input type="text" size="30" name="fname" /></li>
  20.             <li><label>E-mail:</label><input type="text" size="30" name="femail" /></li>
  21.             <li><label>Mensaje:</label><textarea name="fcomment" id="fcomment" rows="3" cols="25" onkeyup="limitarCaracter(this.id,80,'charTexto');"></textarea></li>
  22.             <li><div style="font-size:10px;" id="charTexto"></div></li><br />
  23.             <li><label></label><img src="captcha.php" width="100" height="30" vspace="3"></li><br />
  24.             <li><input name="code" type="text"/></li>
  25.             <li><input type="submit" name="save" value="Enviar"></li>
  26.         </ol>
  27.       </fieldset>
  28. </form>

este es el archivo de envio.php:

Código PHP:
Ver original
  1. $mensaje="";
  2. $mensaje.="Contacto desde:". "\n\n";
  3. $mensaje.="Nombre: ".$_POST['fname']."\n";
  4. $mensaje.="E-mail: ".$_POST['femail']."\n";
  5. $mensaje.="Mensaje: ".$_POST['fcomment']."\n";
  6. // definimos a quien se lo enviamos
  7. $email_destiny="[email protected]";
  8. $subject="Mensaje";
  9. // verificamos si se envió
  10. if (mail($email_destiny,$subject,$mensaje,"From: Contact<".$_POST['femail'].">")) {
  11.     echo '<p align="center" style="color:#263e88; font-family:Arial; font-size:11px;"><b>Gracias por su mensaje</b></p>';
  12. } else {
  13.     echo '<p align="center">Error '.$_POST['fname'].'</p>';
  14. }

y este es el codigo captcha.php:

Código PHP:
Ver original
  1. function texto($ancho)
  2. {
  3.      $cadena = "0123456789abcdefghijkmnñlopqrstwxyz";
  4.      for($i = 0; $i<$ancho;$i++)
  5.      {
  6.           $muestra .= $cadena{rand(0,35)};
  7.      }
  8.      return $muestra;
  9. }
  10.  
  11. // Define el ancho del texto usando un parametro (5) para la función creada anteriormente.
  12. $_SESSION['captcha'] = texto(5);
  13.  
  14. // La imagen gif de fondo.
  15. $captcha = imagecreatefromgif("images/bgcaptcha.gif");
  16.  
  17. // La localizacion de la imagen, lo dejamos en 0,0,0
  18. $letras = imagecolorallocate($captcha,0,0,0);
  19.  
  20. // Unir el texto en la imagen gif creada.
  21. imagestring($captcha,5,16,7,$_SESSION['captcha'],$letras);
  22.  
  23. // Pone la imagen en cabezera.
  24. header("Content-type: images/gif");
  25.  
  26. // Muestra la imagen.
  27. imagegif($captcha);

No entiendo porque no funciona.

Será que tengo que poner todo el código en envio.php?

y si es así, cómo debo colocarlo???

Gracias
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 25/09/2012, 13:47
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 11 meses
Puntos: 35
Respuesta: Validar captcha antes de enviar email

La validacion la debes hacer en la pagina q recibe los valores
obviamente debe ser en el archivo envio.php

Código PHP:
Ver original
  1. if(isset($_POST['save']))
  2.     {
  3.         if($_SESSION['captcha'] == $code)
  4.         {
  5.             echo "<span style='color:green'>Es correcto el captcha ingresado</span>";
  6. //realizas todo lo del envio
  7.         }
  8.         else
  9.         {
  10.             echo "<span style='color:red'>Es incorrecto el captcha ingresado</span>";
  11.         }  
  12.     }

Esto debe ir en envio.php
  #3 (permalink)  
Antiguo 25/09/2012, 13:54
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

hola, lo puse como me indicaste pero no valida nada. Si quieres puedes probarlo...
__________________
Caminando con el corazón partío
  #4 (permalink)  
Antiguo 25/09/2012, 14:31
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Validar captcha antes de enviar email

OJO que tu codigo de email debe ir en la condicional en donde verifica que el captcha es correcto

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 25/09/2012, 14:33
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 11 meses
Puntos: 35
Respuesta: Validar captcha antes de enviar email

Cita:
Iniciado por kimmy Ver Mensaje
hola, lo puse como me indicaste pero no valida nada. Si quieres puedes probarlo...
el session_start();
tambien lo pones en el archivo envio.php??...
  #6 (permalink)  
Antiguo 25/09/2012, 14:52
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

antes no lo tenia pero ahora lo puse. Este es el código que no me funciona:

Código PHP:
Ver original
  1. $code = trim($_POST['code']);
  2. if(isset($_POST['save']))
  3.     {
  4.         if($_SESSION['captcha'] == $code)
  5.         {
  6.             echo "<span style='color:green'>Es correcto el captcha ingresado</span>";
  7.            
  8.         // definimos el mensaje
  9. $mensaje="";
  10. $mensaje.="Contacto desde:". "\n\n";
  11. $mensaje.="Nombre: ".$_POST['fname']."\n";
  12. $mensaje.="E-mail: ".$_POST['femail']."\n";
  13. $mensaje.="Mensaje: ".$_POST['fcomment']."\n";
  14. // definimos a quien se lo enviamos
  15. $email_destiny="[email protected]";
  16. $subject="Mensaje";
  17. // verificamos si se envió
  18. if (mail($email_destiny,$subject,$mensaje,"From: Contact<".$_POST['femail'].">")) {
  19.     echo '<p align="center" style="color:#263e88; font-family:Arial; font-size:11px;"><b>Gracias por su mensaje</b></p>';
  20. } else {
  21.     echo '<p align="center">Error '.$_POST['fname'].'</p>';
  22. }
  23.    
  24.            
  25.         }
  26.         else
  27.         {
  28.             echo "<span style='color:red'>Es incorrecto el captcha ingresado</span>";
  29.         }  
  30.     }
__________________
Caminando con el corazón partío
  #7 (permalink)  
Antiguo 25/09/2012, 15:01
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Validar captcha antes de enviar email

para mi el error pude estar en el $_POST['save'] verifica que te devuelve este valor realizando un echo
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #8 (permalink)  
Antiguo 25/09/2012, 15:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Validar captcha antes de enviar email

Conmigo no funciona el formulario, el botón enviar ni pío dice!

Cita:
Iniciado por Firefox -> Consola de errores
Fecha y hora: 25/09/2012 04:05:53 p.m.
Error: TypeError: document.formulario is undefined
Archivo de origen: http://vamonosdevacaciones.com.ve/
Línea: 307
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 25/09/2012, 15:44
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

Hola Triby!!! Si, el formulario no funciona. Antes de poner lo del captcha funcionaba pero ahora no. Por qué????
__________________
Caminando con el corazón partío
  #10 (permalink)  
Antiguo 25/09/2012, 16:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Validar captcha antes de enviar email

No es el captcha, sino que tienes un conflicto de Javascripts, por un lado la función limpiar() que busca un formulario inexistente y, por otro lado, que usas jQuery para enviar los datos serializados (?).

Lo primero que deberías hacer es verificar qué estás recibiendo en $_POST, lo que tienes en $_SESSION y analizar el siguiente paso en base a eso.

PHP para procesar el formulario:
Código PHP:
Ver original
  1. <?php
  2.  
  3. var_dump($_POST, $_SESSION);

Los campos vienen como los esperas?, todos o falta alguno?
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 25/09/2012, 16:19
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

Gracias. Arreglé la función limpiar y realice lo que me indicaste y me arroja esto:

array(4) {
["fname"]=> string(5) "Kimmy"
["femail"]=> string(18) "[email protected]"
["fcomment"]=> string(5) "fdfdf"
["code"]=> string(0) "" }
array(1) {
["captcha"]=> string(5) "bcngt"
}
__________________
Caminando con el corazón partío
  #12 (permalink)  
Antiguo 25/09/2012, 16:22
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 11 meses
Puntos: 35
Respuesta: Validar captcha antes de enviar email

Cita:
Iniciado por kimmy Ver Mensaje
Gracias. Arreglé la función limpiar y realice lo que me indicaste y me arroja esto:

array(4) {
["fname"]=> string(5) "Kimmy"
["femail"]=> string(18) "[email protected]"
["fcomment"]=> string(5) "fdfdf"
["code"]=> string(0) "" }
array(1) {
["captcha"]=> string(5) "bcngt"
}
ahi te puedes dar cuenta que el code esta llegando vacio, revisalo para ver por q.
  #13 (permalink)  
Antiguo 25/09/2012, 16:27
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Validar captcha antes de enviar email

bueno yo estoy probando tu codigo desde la misma web y ahora si me toma los valores de code
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #14 (permalink)  
Antiguo 25/09/2012, 16:28
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

en el code si pasan los datos lo que pasó fue que no le coloqué nada para ver si daba error en el captcha
__________________
Caminando con el corazón partío
  #15 (permalink)  
Antiguo 25/09/2012, 16:30
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Validar captcha antes de enviar email

ya me di cuenta cual es tu error.

Tu error esta en el JavaScript cuando tu usas esto en el ajax

$('#myform').serialize() ya que no esta tomando el valor del input submit es por esto que cuando en tu codigo php estas haciendo esto

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

nunca entra y no realiza nada trata de cambiarlo por otra variable para que lo valides
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #16 (permalink)  
Antiguo 25/09/2012, 16:30
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 11 meses
Puntos: 35
Respuesta: Validar captcha antes de enviar email

Cita:
Iniciado por kimmy Ver Mensaje
en el code si pasan los datos lo que pasó fue que no le coloqué nada para ver si daba error en el captcha
Pues ya esta, ahora solo es enviar
  #17 (permalink)  
Antiguo 25/09/2012, 16:49
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

Gracias a todos, ahora si funciona. Le quité el if(isset($_POST['save'])).
__________________
Caminando con el corazón partío
  #18 (permalink)  
Antiguo 25/09/2012, 16:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Validar captcha antes de enviar email

Algo está mal con tu captcha, porque usa cadenas con caracteres "raros", a mí me apareció esto: �g�qk

Por cierto, si usas firefox, instala la extensión HTML Validator para que puedas ver y corregir los errores que tienes en el código; esto ayuda a tratar de mantener compatibilidad entre navegadores y te evita muchos dolores de cabeza.

Por ejemplo, estás agregando dos estilos css con la etiqueta <link ..> justo después de </head>, deberían estar antes.
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 25/09/2012, 16:52
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Validar captcha antes de enviar email

de nada solo aclarar que debes tener cuidado porque a veces el error esta en la parte cliente y no en el servidor es por eso que debes aclarar como estas enviando el formulario

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #20 (permalink)  
Antiguo 25/09/2012, 16:57
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 11 meses
Puntos: 35
Respuesta: Validar captcha antes de enviar email

cierto esa cadena de capcha te genera caracteres especiales.
quita la ñ de la cadena.

$cadena = "0123456789abcdefghijkmnñlopqrstwxyz";
  #21 (permalink)  
Antiguo 25/09/2012, 17:01
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Validar captcha antes de enviar email

otro error esta tambien que no es $cadena{rand(0,35)}; sino 33 ya que la cadena tiene como longitud 34 pero como el indice empieza en 0 debe ser 33 asi debe quedar

$cadena{rand(0,33)};
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #22 (permalink)  
Antiguo 25/09/2012, 17:04
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

ok maxpower, ya quité la ñ. Triby voy a instalar la extensión que me dices porque tengo un desastre con los css. Mil gracias a ambos.
__________________
Caminando con el corazón partío
  #23 (permalink)  
Antiguo 25/09/2012, 17:05
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

Gracias Dradi, también lo corregiré...
__________________
Caminando con el corazón partío
  #24 (permalink)  
Antiguo 25/09/2012, 17:16
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

Una pregunta mas: Cómo hago para que cuando el usuario no coloque lo del captcha al presionar enviar no se borren los datos del form y solo se borren si está correcto?
__________________
Caminando con el corazón partío
  #25 (permalink)  
Antiguo 25/09/2012, 17:20
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: Validar captcha antes de enviar email

en tu form cambia esto

<form method="post" action="envio.php" id="myform" name="myform" onSubmit="return limpiar()" >

por esto

<form method="post" action="envio.php" id="myform" name="myform" >

Solo debes quitar el onsubmit
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #26 (permalink)  
Antiguo 25/09/2012, 17:27
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

No funciona asi. debería ser con alguna condicion.
__________________
Caminando con el corazón partío
  #27 (permalink)  
Antiguo 25/09/2012, 17:55
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 11 meses
Puntos: 35
Respuesta: Validar captcha antes de enviar email

Cita:
Iniciado por kimmy Ver Mensaje
No funciona asi. debería ser con alguna condicion.
en cada campo valida con isset()
algo mas o menos asi
echo "<input type='text' name='nombre' ";
if(isset($_POST['nombre'])) {
echo "value ='".$_POST['nombre']."' ;
}
echo " />";
Esta medio chapuza pero algo asi te serviria
  #28 (permalink)  
Antiguo 25/09/2012, 18:01
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Validar captcha antes de enviar email

lo intentaré a ver que pasa. Gracias...
__________________
Caminando con el corazón partío

Etiquetas: captcha, email, formulario
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 14:08.