Categorías
Programacion PHP

Agregar recaptcha a formulario en php

Muchas veces nos ha sucedido que tenemos un formulario de contacto en nuestro sitio pero de repente comienzan a llegarnos un monton de correos de spam, y todo por que no tenemos un método para minimizar que los bots spams envíen formularios de forma automatizada,si bien hay formas de como saltarse estos captchas, pero por lo menos disminuiremos la cantidad de correos de spam en nuestros buzones.

Explicare con un pequeño ejemplo como agregar el recaptcha al formulario y una vez validado lso datos envie un mensaje de felicitacion,que seria en lugar de enviar el correo electrónico, o un mensaje de error si algún dato no esta bien o no se resolvió correctamente el captcha.

 

Prerequisitios.

  • una cuenta en google para poder hacer uso del recaptcha
  • un servidor de pruebas(como wampp)
  • libreria recaptcha(https://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest)

Lo primero sera crear nuestro formulario de contacto,y luego lo validamos con otro script

 

El codigo del formulario es el siguiente recpatcha.php:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Prueba Recatpcha</title>

<style type=”text/css”>
<!–
.formulario {
padding: 2px;
width: 400px;
margin-top: 5px;
margin-right: auto;
margin-bottom: 5px;
margin-left: auto;
}
#form1 label {
display: block;
}
–>
</style>
</head>

<body>
<form action=”validar.php” method=”post” name=”form1″ class=”formulario” id=”form1″>
<label>Nombre:</label><input name=”nombre” type=”text” />
<label>Edad:</label><input name=”edad” type=”text” />
<label>Asunto:</label><textarea name=”asunto” cols=”40″ rows=”5″></textarea>
<br />
    <!–Codigo mostrar repacatcha –>
       <?php
          require_once(‘rutalibreria/recaptchalib.php’);
          $publickey = “tupublickey”; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
<input name=”enviar” type=”submit” value=”Enviar” />
</form>
</body>
</html>

El codigo es el de un formulario normal salvo donde esta el comentario en html  del codigo solo debes cambiar dos cosas, en la funcion requiere_once debes colocar la ruta donde descomprimiste la libreria de recaptcha, de preferencia en una carpeta llamada lib para mejor orden, y la clave publica la cual obtienes cuando te logueas con tu cuenta de google en este sitio

https://www.google.com/recaptcha

1

 

copiar las dos claves publica y privada

 

2

luego creamos otro archivo,llamado validar.php con el que comprobaremos  los datos introducidos antes de enviarlos

 

<?php
  require_once(‘rutalibreria/recaptchalib.php’);
  $privatekey = “tuclave”;
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER[“REMOTE_ADDR”],
                                $_POST[“recaptcha_challenge_field”],
                                $_POST[“recaptcha_response_field”]);
if(empty($_POST[‘nombre’])){
echo ‘No ha ingresados tu nombre’;
echo ‘<br />’;
}
if(empty($_POST[‘nombre’])){
echo ‘No ha ingresados u nombre’;
echo ‘<br />’;
}
if(empty($_POST[‘asunto’])){
echo ‘No ha ingresados el asunto’;
echo ‘<br />’;
}
 //comprobando solucion de captcha      
  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die (“The reCAPTCHA wasn’t entered correctly. Go back and try it again.” .
         “(reCAPTCHA said: ” . $resp->error . “)”);
  } else {
    // Your code here to handle a successful verification
    echo “Good job,you solve the captcha”;
  }

?>

en negrita marque la parte mas importante del codigo,lo demas es una validacion normal de los otros campos del formulario, observa que en el archivo validar es donde pegamos la clave privada ya que son valores que no estaran accesible a los usuarios y en la parte de presentacion(recaptcha.php) dejamos la clave publica, al final nuestro formulario debera verse asi

formulario recpatcha

y debera mostrar este texto,sino escribes correctamente el recpatcha

The reCAPTCHA wasn’t entered correctly. Go back and try it again.(reCAPTCHA said: incorrect-captcha-sol)

cabe aclarar que solo presento la idea general del concepto de como agregar un caprcha a un formulario, pero te puede servir de base si quieres mejorarlo.

 

Si tienen comentarios o sugerencias para este articulo pueden hacerlas aqui.