entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

formulario y captcha

Desde hace bastante tiempo me estaba llegando muchisimo spam a mi correo a través los formularios que tengo en mi pagina web
Tengo un formulario simple con un captcha . Dicho formulario llama a un php llamado formulario - adjunto codigo-

<?php

          session_start();
      if(strtoupper($_REQUEST["captcha"]) == strtoupper($_SESSION["captcha"])){
         // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
         $_SESSION["captcha"] = md5(rand()*time());

         // INSERTA EL CÓDIGO EXITOSO AQUI
         // var_dump($_POST);

         $cabecera ="From: andamiosBarcelona\r\n"; 

         $sendTo = "[email protected]"; 
         $subject = "formulario"; 
         $nombre = $_POST["nombre"]; 
         $telefono = $_POST["telefono"]; 
         $email = $_POST["email"]; 
         $eltexto = $_POST["eltexto"]; 
        // $headers .= ""; 
         $message = "\nNombre:" . $nombre . "\ntelefono:" . $telefono .  "\nemail:" . $email . "\nArea Texto:" . $eltexto; 

        mail($sendTo, $subject, $message, $cabecera);

        header ("Location: index.html");  

        // print($message);

       }else{
         // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
         $_SESSION["captcha"] = md5(rand()*time());
         // INSERTA EL CÓDIGO DE ERROR AQUÍ

         header ("Location:contacto.html");

      } 
?>

Cuando el usuario introduce el captcha bien me llega un correo con todos los datos.El problema es cuando se escribe el captcha mal ,en vez de ejecutar la sentencia del else, lo que hace es me envia un correo cada vez con una direccion de correo distinta con los datos vacios .
¿Que podrá ser ? De echo me están friendo a spam . Una autentica locura

El formulario del html es asi

<form id="formulario" method="POST" action="formulario.php">

<fieldset>

<input id="nombre" class="nick required" name="nombre" placeholder="Nombre" type="text" />
<input id="email" class="email required" name="email" placeholder="Email" type="text" />
<input id="telefono" class="subject" name="telefono" placeholder="Teléfono" type="text" />
<textarea id="eltexto" name="eltexto" class="required"></textarea>
 <img src="captcha.php" /><br/>
 <input id="captcha" name="captcha" type="text" required="" >
<input type="submit" value="Enviar" /></fieldset>

</form>

1voto

carlossevi comentado

¿Has comprobado el valor de $_SESSION["captcha"] al inicio del script? Puede ser que no lo hayas guardado bien o la sesión no esté funcionando y ambos campos estén vacíos, con lo que la comparación es afirmativa.

1voto

gonzalss comentado

He optado por cambiar el captcha y he puesto el de google.
He puesto en el html la llamada al captcha de google, pero tengo problemas en el php . Ya que el php no hace lo que debiera

<?php
$recaptcha = $_POST['g-recaptcha-response'];

//test captcha
if($recaptcha != '')
{
    $secret = " xxxxxxxx";
    $ip = $_SERVER['REMOTE_ADDR'];
    $var = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip);
    $array = json_decode($var,true);

    //check if captcha ok then check fields empty
    if($array['success']) {

   // Supuestamente aqui deberia meter el codigo bueno , recoger los datos del formulario y enviar el correo 
} else {
  // 
       // Si pongo un echo si me imprime en pantalla lo que pongo pero si le redirigo a otra pagina no funciona
        header ("Location:index.html");

}

} else {

 // Que tendría que poner en este else 

}

?>

1voto

Leonardo-Tadei comentado

"Perdí las llaves de auto en el baño, pero como no hay luz en el baño y no las puedo encontrar, las busco en la cocina en dónde sí hay luz"...

Usar tu captcha o el de Google no te cambiará las cosas, porque evidentemente el problema está en otro lugar.

En este momento, ni siquiera sé qué código es el que estás usando realmente para intentar ver qué pasa...

No estarás mandando el formulario por AJAX, verdad? No tenés el log de error del servidor para ver qué es lo que pasa? Al menos ponele el display_error = 1 en el propio PHP para ver los errores que ese script provoca en ese servidor... trabajar a ciegas es igual a dar palos a ciegas...

1voto

gonzalss comentado

Este es el código que tengo en el php . He incluido el display_error = 1.
Envía el correo , pero luego se queda en el header con la redirección .
Pero lo que me extraña es que no debería ir por el else, se debería quedar en if

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$recaptcha = $_POST['g-recaptcha-response'];

//test captcha
if($recaptcha != '')
{
    $secret = " xxxx";
    $ip = $_SERVER['REMOTE_ADDR'];
    $var = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip);
    $array = json_decode($var,true);

    //check if captcha ok then check fields empty
    if($array['success']) {
     $cabecera ="From: andamiosBarcelona\r\n"; 

         $sendTo = "[email protected]"; 
         $subject = "formulario"; 

         $nombre = $_POST["nombre"]; 
         $telefono = $_POST["telefono"]; 
         $email = $_POST["email"]; 
         $eltexto = $_POST["eltexto"]; 

            $message = "\nNombre:" . $nombre . "\ntelefono:" . $telefono .  "\nemail:" . $email . "\nArea Texto:" . $eltexto; 

        mail($sendTo, $subject, $message, $cabecera);

header ("Location:contacto.html");  

} else {

header ("Location:contacto.html"); 
}

} else {

}

?>

1 Respuesta

1voto

Leonardo-Tadei Puntos227320

Hola @gonzalss,

estoy mirando lo que tenés publicado en este momento y el último código PHP de tu pregunta y sin ver más, el código parece hacer lo que tu script indica:

  • si se envía el formulario sin CAPTCHA, no hace nada (entra al ELSE vacío).
  • si se envía el formulario con el CAPTCHA, manda el mail y va a contacto.html.
  • si se envía el formulario con el CAPTCHA incorrecto, no manda el mail y va a contacto.html.

Desde acá lo único que puedo ver es en qué momento se redirige a contacto.html y cuándo no, porque en dos casos distintos redirigís al mismo HTML... podrías devolver sin afectar al funcionamiento del sitio a contacto.html?bien y a contacto.html?mal para que se pueda ver a dónde va, aunque lo mejor sería devolver a una página de "gracias" cuando el mail sí se envía y a contacto.html cuando falla la validación.

Otro tema: decís que te están llenando de spam. Cómo estás verificando que el spam llega del formulario? Porque al publicar la dirección de la cuenta de correo, bien podría ser enviado por otra vía.

Saludos cordiales

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta