0

Implementar Captcha Simple en Formularios con PHP

Comparte

📋 Introducción

Cuando creamos formularios en PHP, es muy importante protegerlos contra envíos automáticos realizados por bots. Una forma sencilla de hacerlo es usando un captcha simple generado con PHP. Aquí te mostraré cómo hacerlo paso a paso.


🛠️ Código fuente paso a paso

1. Formulario HTML con el captcha

<form action="procesar.php" method="POST">
  <label>Nombre:</label>
  <input type="text" name="nombre" required><br><br>

  <label>¿Cuánto es <?php echo $num1 = rand(1,9); ?> + <?php echo $num2 = rand(1,9); ?>?</label>
  <input type="text" name="captcha_resultado" required><br><br>

  <input type="hidden" name="captcha_suma" value="<?php echo $num1 + $num2; ?>">

  <input type="submit" name="enviar" value="Enviar">
</form>

Explicación:

  • Se generan dos números aleatorios entre 1 y 9.
  • Se muestra la pregunta al usuario y se guarda la respuesta correcta en un input hidden.

2. Archivo PHP para procesar (procesar.php)

<?php
if (isset($_POST['enviar'])) {
    $nombre = htmlspecialchars($_POST['nombre']);
    $respuesta_usuario = intval($_POST['captcha_resultado']);
    $respuesta_correcta = intval($_POST['captcha_suma']);

    if ($respuesta_usuario === $respuesta_correcta) {
        echo "Formulario enviado correctamente. ¡Hola, " . $nombre . "!";
    } else {
        echo "Captcha incorrecto. Por favor, vuelve a intentarlo.";
    }
}
?>

Explicación:

  • Se recibe la respuesta del usuario y la respuesta correcta.
  • Si ambas coinciden, el formulario es válido.
  • Si no, se muestra un error.

📌 Consejos adicionales

  • Puedes complicar un poco más el captcha usando operaciones como restas, multiplicaciones o preguntas de lógica simples.
  • Si quieres hacerlo visual (como una imagen captcha), puedes usar GD Library de PHP, pero este método sencillo es suficiente para muchos proyectos básicos.





codigo fuente gratis

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *