Captcha con PHP y JpGraph

  • 30/10/2007
  • 10:33 am
  • unijimpe

JpGraph una de las librerías mas completas para generar imágenes de la cual hemos hablado en JpGraph: Gráficos con PHP tiene entre una de sus características la de generar imágenes para hacer captcha. En esta ocasión veremos la forma de implementar un formulario que incluya verificación por captcha para protegerlo del ataque de los spammers.

catpcha-jpgraph.gif

Captcha con JpGraph
JpGraph posee una librería llamada jpgraph_antispam.php la cual permite generar las imagenes con textos aleatorios distorsionados. Entonces lo primero es incluir el archivo jpgraph_antispam.php y luego creamos la imagen con la función Rand que recibe como parámetro la cantidad de caracteres a generar.

PHP:
  1. include("inc/jpgraph_antispam.php");
  2. $spam = new AntiSpam();
  3. $code = $spam->Rand(6);
  4. $spam->Stroke();

En el ejemplo hemos generado una imagen con un texto aleatorio de 6 caracteres. Notese que el texto generado es devuelto por esta función y la hemos almacenado en la variable $code. Esta variable la podríamos almacenar en una variable de sesión para verificarla posteriormente.

Creando el Captcha
Entonces creamos un archivo php llamado captcha.php en el cual generaremos un texto aleatorio y lo almacenaremos en una variable de sesión y luego generamos la imagen captcha.

PHP:
  1. // file: captcha.php
  2. include("inc/jpgraph_antispam.php");
  3. $spam = new AntiSpam();
  4. $_SESSION['tmptxt']= $spam->Rand(6);
  5. $spam->Stroke();

Con lo cual obtenemos el siguiente resultado:

Creando el formulario
el siguiente paso es la creación del formulario que deseamos proteger, para nuestro ejemplo solo incluiremos un campo de texto solicitando nombres y luego incluimos la imagen.

HTML:
  1. <h3>Formulario</h3>
  2. <form name="register" method="post">
  3. Nombres<br />
  4. <input name="nombres" type="text" id="nombres" /><br />
  5. Verificacion:<br />
  6. <img src="captcha.php" width="100" height="30"><br />
  7. <input name="tmptxt" type="text" id="tmptxt" /><br />
  8. <input type="submit" name="Submit" value="Enviar" />
  9. <input name="action" type="hidden" value="checkdata">
  10. </form>

Verificando los datos
Finalmente en la pagina que recibe los datos del formulario primero verificamos que el texto ingresado corresponda al generado en el captcha antes de procesar los datos.

PHP:
  1. if ($_POST['action'] == "checkdata") {
  2.     if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {
  3.         echo "Bienvenido ".$_POST['nombres'];
  4.     } else {
  5.         echo "Error: Inténtalo nuevamente";
  6.     }
  7.     exit;
  8. }

Sencillo y con código muy entendible para poder modificarlo y adaptarlo a nuestras necesidades. Pueden ver el resultado del ejemplo funcionando en: http://samples.unijimpe.net/jpgraph/demo-captcha.php .

Posts Relacionados

Total de Comentarios: 5

Publicidad
30/10/2007
7:18 pm

Gracias me viene de perlas :)

01/11/2007
12:30 am

Muy bueno :D
Me hacia mucha falta

juan
06/12/2007
3:38 am

Hola unijimpe, como puedo modificar la imagen creeada con esta libreria, que fuera mas parecida a la de tu ejemplo de “crear captcha con php” pues la que genera el jpgraph_antispam.php aveces es poco entendible

Raul
17/05/2008
9:50 am

Hola, me viene muy bien, tengo un pequeño problemita, la imagen no es igual a la variable de sesión, en la variable de sesión guarda el captcha anterior, alguna forma de solucionar esto?.

juanito
23/08/2008
9:33 pm

solo un pequeño detalle, en la carpeta “inc”, hay un monton de archivos (4MB en total), pero solo necesitamos 2:
jpgraph_antispam-digits.php y
jpgraph_antispam.php

Enviar Comentario

(*)

(*)