Jueves, 18 Abril 2013 13:24

Utilizar reCaptcha de google en formularios

Escrito por 
Valora este artículo
(0 votos)

Saludos mis estimados usuarios, en este tutorial vamos a ver como utilizar el servicio de reCaptcha de google en nuestro framework MVC básico, vamos a crear un formulario de contacto y lo validaremos con reCaptcha.

Lo primero que debemos tener a mano son nuestras llaves pública y privada que nos proporciona google, si no tienes estas llaves, para obtenerlas deberás tener una cuenta en google y luego solicitar tus llaves en  http://www.google.com/recaptcha. Puedes descargar la librería desde el sitio oficial:   https://code.google.com/p/recaptcha/downloads/list .

luego de haber descragado la librería la descomprimimos y la copiamos en el directorio libs, esta será la estructura de los archivos que debemos crear:

/controllers/contactoController.php
/views/contacto/index.tpl
/libs/recaptchalib.php

Primero vamos a crear el controlador, lo llamaremos contactoController:

<?php
/* contactoController.php */ class contactoController extends Controller { public function __construct() { parent::__construct(); } public function index() { $this->getLibrary("recaptchalib"); // cargamos la librería recaptcha $this->_view->assign("titulo", "Contacto"); $this->_view->assign("public", "tu-llave-publica"); if($this->getPostParams()){ if($this->getInt('enviar') == 1){ $this->_view->assign("data", $_POST);
/* tomamos los datos */ $nombre = $this->getSql("nombre"); $telefono = $this->getAlphaNum("telefono"); $correo = $this->getPostParam("correo"); $mensaje = $this->getSql("mensaje"); $asunto = $this->getSql("asunto");
/* validamos los campos del formulario */ if(!$nombre){ $this->_view->assign("_error", "Ingrese su nombre"); $this->_view->renderizar("index", "contacto"); exit; } if(!$telefono){ $this->_view->assign("_error", "Ingrese su número de teléfono"); $this->_view->renderizar("index", "contacto"); exit; } if(!$this->validaEmail($correo)){ if(!$this->validarEmail($correo)){ $this->_view->assign("_error", "Dirección de correo inválida"); $this->_view->renderizar("index", "contacto"); exit; } if(!$asunto){ $this->_view->assign("_error", "Ingrese el asunto"); $this->_view->renderizar("index", "contacto"); exit; } if(!$mensaje){ $this->_view->assign("_error", "Ingrese su mensaje"); $this->_view->renderizar("index", "contacto"); exit; }
/* validamos el recaptcha */ $resp = recaptcha_check_answer( "tu-llave-privada", $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"] );
/* si la respuesta fue inválida */ if(!$resp->is_valid){ $this->_view->assign("_error", "<strong>reCaptcha error:</strong> " . $resp->error); } else{
/* si la respuesta fue válida */ try{ $mail = new PHPMailer(1); // el 1 es para activar las excepciones de PHPMailer $mail->From = APP_NAME; $mail->FromName = $nombre; $mail->Subject = $asunto . " de: " . $nombre . " " . $correo; $mail->Body = $mensaje; $mail->AltBody = "Su servidor de correo no soporta html"; $mail->AddAddress("tu-correo", "tu-nombre"); $mail->Send();
/* si se envió el correo redireccionamos */ if($mail->Send()){ $this->redireccionar("contacto"); } else{
/* enviamos el error si el correo no fue enviado */ $this->_view->assign("_error", "Error al enviar el correo, por favor inténtelo más tarde"); } }
/* manejamos la excepción de PHPMailer */ catch (phpmailerException $e){ $this->_view->assign("_error", "<strong>Correo no enviado!</strong> " . $mail->ErrorInfo . ", " . $e->getMessage()); } } } $this->_view->renderizar("index", "contacto"); } } ?>
 

Y esta será nuestra vista:

<!-- index.tpl -->
<div class="span6"> <div class="page-header"> <h2>Contacto</h2> </div> <div class="row"> <div class="span6"> <form method="post" class="form-horizontal"> <input type="hidden" name="token" value="{$token}"> <input type="hidden" name="enviar" value="1"> <div class="control-group"> <label class="control-label" for="nombre">Nombre</label> <div class="controls"> <input type="text" id="nombre" name="nombre" placeholder="Nombre" value="{$data.nombre|default:""}"> </div> </div> <div class="control-group"> <label class="control-label" for="correo">Correo</label> <div class="controls"> <input type="text" id="correo" name="correo" placeholder="Email" value="{$data.correo|default:""}"> </div> </div> <div class="control-group"> <label class="control-label" for="telefono">Teléfono</label> <div class="controls"> <input type="text" id="telefono" name="telefono" placeholder="Teléfono" value="{$data.telefono|default:""}"> </div> </div> <div class="control-group"> <label class="control-label" for="asunto">Asunto</label> <div class="controls"> <input type="text" id="asunto" name="asunto" placeholder="Asunto" value="{$data.asunto|default:""}"> </div> </div> <div class="control-group"> <label class="control-label" for="mensaje">Mensaje</label> <div class="controls"> <textarea rows="5" id="mensaje" name="mensaje" placeholder="Mensaje">{$data.mensaje|default:""}</textarea> </div> </div> <div class="control-group"> <div class="controls"> <p>{recaptcha_get_html($public)}</p> <p><button type="submit" class="btn btn-primary btn-large">Enviar &raquo;</button></p> </div> </div> </form> </div> </div> </div>

Y eso es todo!, ya contamos la validación recaptcha para el formulario. 

Leer 20382 veces Modificado por última vez en Viernes, 19 Abril 2013 15:18

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el Código HTML.

Categorías

hosting joomla