Diferencia entre revisiones de «Ejemplo de reCAPTCHA en KumbiaPHP»

De KumbiaPHP Framework Wiki
m
(Corrijo un pequeño error, no sé como pude ponerlo así al princípio. No se "heredaban" las variables publickey y privatekey de recaptcha.php.)
Línea 12: Línea 12:
  
  
* Crea el fichero '''recaptcha.php''' en ''app/libs/'' con el siguiente contenido, sustituyendo '''X''' e '''Y''' por tus API Key obtenidas.
+
* Creamos un controlador para el captcha:
<source lang=php >
 
<?php
 
include ("recaptchalib.php");
 
$publickey  = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
 
$privatekey = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
 
?>
 
</source>
 
 
 
 
 
* Ahora creamos un controlador para el captcha:
 
 
<source lang=php >
 
<source lang=php >
 
<?php
 
<?php
 
// Incluimos el fichero con la libreria y nuestra API Key
 
// Incluimos el fichero con la libreria y nuestra API Key
require_once APP_PATH. '/libs/recaptcha.php';
+
require_once APP_PATH. '/libs/recaptchalib.php';
  
 
class CaptchaController extends ApplicationController {
 
class CaptchaController extends ApplicationController {
 +
public $publickey  = "6LePF7oSAAAAALYNEfbbOfRAc9lCz3LKvoKcQkwZ";
 +
public $privatekey = "6LePF7oSAAAAADRQBaACf7imDRSwq-kPXyZOCBCA";
  
 
public function index() {  
 
public function index() {  
 
// Generamos el reCAPTCHA
 
// Generamos el reCAPTCHA
$this->Captcha = recaptcha_get_html($publickey);
+
$this->Captcha = recaptcha_get_html($this->publickey);
 
}  
 
}  
  
Línea 39: Línea 31:
 
if ($_POST["recaptcha_response_field"]) {
 
if ($_POST["recaptcha_response_field"]) {
 
// Realizamos la comprobacion
 
// Realizamos la comprobacion
$resp = recaptcha_check_answer ($privatekey,
+
$resp = recaptcha_check_answer ($this->privatekey,
 
                $_SERVER['REMOTE_ADDR'],
 
                $_SERVER['REMOTE_ADDR'],
                $_POST['recaptcha_challenge_field'],
+
                $this->post('recaptcha_challenge_field'),
                $_POST['recaptcha_response_field']);
+
                $this->post('recaptcha_response_field'));
  
 
if ($resp->is_valid) {
 
if ($resp->is_valid) {
Línea 58: Línea 50:
  
 
// Generamos un nuevo reCAPTCHA con el codigo de error obtenido
 
// Generamos un nuevo reCAPTCHA con el codigo de error obtenido
$this->Captcha = recaptcha_get_html($publickey, $error);
+
$this->Captcha = recaptcha_get_html($this->publickey, $error);
  
 
// Mostramos la misma vista que en el index
 
// Mostramos la misma vista que en el index

Revisión del 20:31 17 jun 2010

{{#if:Information icon4.png |}}

{{#if:

|}}


Nota previa Este ejemplo esta sacado de la documentacion de reCAPTCHA y adaptado a un controlador/vista de KumbiaPHP de forma básica. Se puede mejorar creando un helper, pero queda fuera del ejemplo :)


  • Descargar la libreria reCAPTCHA, descomprimela y copia el fichero recaptchalib.php en /app/libs de tu arbol de directorios de KumbiaPHP.


  • Si no lo has hecho ya, registrate y solicita una key de API en la web de reCAPTCHA.


  • Creamos un controlador para el captcha:
<?php
// Incluimos el fichero con la libreria y nuestra API Key
require_once APP_PATH. '/libs/recaptchalib.php';

class CaptchaController extends ApplicationController {
	public $publickey  = "6LePF7oSAAAAALYNEfbbOfRAc9lCz3LKvoKcQkwZ";
 	public $privatekey = "6LePF7oSAAAAADRQBaACf7imDRSwq-kPXyZOCBCA";

	public function index() { 
		// Generamos el reCAPTCHA
		$this->Captcha = recaptcha_get_html($this->publickey);
	} 

	public function comprobar() { 		
		// Comprobamos que se haya rellenado el reCAPTCHA
		if ($_POST["recaptcha_response_field"]) {
			// Realizamos la comprobacion
			$resp = recaptcha_check_answer ($this->privatekey,
		                $_SERVER['REMOTE_ADDR'],
		                $this->post('recaptcha_challenge_field'),
		                $this->post('recaptcha_response_field'));

			if ($resp->is_valid) {
				// Aqui seguría nuestra comprobacion del resto de los 
				// datos del formulario
				echo "You got it!"; die;
			} else {
				// Capturamos el error para mostrarlo
				$error = $resp->error;
			}
		}

		// Si vienen datos de formulario, los enviamos a la vista de nuevo
		if ($this->has_post('Datos')) $this->Datos = $this->post('Datos');

		// Generamos un nuevo reCAPTCHA con el codigo de error obtenido
		$this->Captcha = recaptcha_get_html($this->publickey, $error);

		// Mostramos la misma vista que en el index
		$this->render('index');
	}
}
?>


  • Por último, creamos la vista:
<strong>Rellena el cuadro con tu nombre: </strong>
<?php 
	echo form_tag('captcha/comprobar');
	echo input_field_tag('DatosForm.nombre');
	echo $Captcha;	
	echo submit_tag('Enviar datos');
?>


  • Ya esta! Ahora ya puedes visitar la URL de tu controlador en http://<tuhost>/captcha y probarlo.

Saludos, Soukron