Cuando trabajas con formularios web, casi siempre es necesario colocar un captcha para evitar que robots envíen spam, lo que ayuda a reducir peticiones inútiles al formulario que se está creando.
Lo más fácil sería utilizar el sistema reCaptcha de Google, la adaptación resulta simple y el sistema es muy seguro, pero si no quieres utilizar servicios de terceros, puedes crear tu propio sistema de captcha con PHP.
Para esto vamos a crear dos archivos, uno llamado captcha.php y otro llamado ejemplo_captcha.php, los nombres pueden variar según tu proyecto.
Para el archivo captcha.php utilizaremos el siguiente código:
<?php <?php session_start(); //Se genera un string y se acorta a seis caracteres $ranStr = substr( sha1( microtime() ),0,6); //Se almacena el valor en una variable de sesión $_SESSION['captcha'] = $ranStr; //Se crea la imagen (esta debe existir) $imagen = imagecreatefromjpeg( "fondo_captcha.jpg" ); // la funcion imagecolorallocate ( $imagen , rojo , verde , azul ) genera un color $colortext = imagecolorallocate($imagen, 0, 0, 400); imagestring($imagen, 5, 30, 8, $ranStr, $colortext); header( "Content-type: image/jpeg" ); //Se crea la imagen imagejpeg($imagen); ?>
Este código es el que creará el captcha que se mostrará en el formulario, por medio de la función microtime que devuelve la fecha actual con microsegundos, reducida a seis caracteres. Esto se almacena en la variable $ranStr. Se utiliza una imagen de fondo en formato jpg para mostrar el código, esta imagen debe existir en el directorio donde están los otros dos archivos. Puedes descargar la imagen de fondo utilizada en este ejemplo:
Luego se le da color al texto y se crea la imagen con el código. Ahora pasamos al otro archivo, ejemplo_captcha.php, que tendrá el siguiente código:
<?php <?php session_start(); //Variable con el resultado de la comparación $resultado =''; if(isset($_POST['codigo'])): //Si el codigo ingresado es correcto: if($_POST['codigo'] == $_SESSION['captcha']): $resultado = "Codigo correcto"; else: $resultado = "Codigo incorrecto, prueba nuevamente"; endif; endif; ?> <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <title>Ejemplo de Captcha con PHP</title> <style type='text/css'> table tr td{ border:3px solid blue; text-align: center; } </style> </head> <body> <!-- Se asigna la misma página para procesar el resultado --> <form action="ejemplo_captcha.php" method='POST'> <table> <tr> <td><input type="text" name="codigo" required></td> <td><img src="captcha.php"/></td> </tr> <tr bgcolor="red"><td colspan="2"> <input type="submit" value="Comprobar"></td></tr> <tr><td colspan="2" id="resultado"> <?php echo $resultado; ?></td></tr> </table> </form> </body> </html>
Aquí se muestra el formulario con el Captcha, se evalúa si el código ingresado es correcto o no y se muestra el mensaje correspondiente. Se debe tomar en cuenta que en el formulario se hace el proceso dentro de la misma página, si vas a cambiar el nombre de los archivos php, es necesario cambiarlo también en esta parte del código.
Puedes ver el formulario funcionando aquí.
Si tienes alguna duda o sugerencia, escríbela en los comentarios.
Gracias me ha sido muy útil