es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Prevenir que el usuario regrese desde el navegador utilizando php.

Tengo campos agregados a la base de datos por el usuario. Después de presionar el botón de enviar, redirijo la página a otro lugar, pero si el usuario hace clic en el botón de regresar en el navegador web, el mismo formulario aparece y si vuelve a hacer clic en el botón de enviar, los campos se agregan a la base de datos. ¿Cómo puedo evitar esto?

Siguiendo mi código:

HTML:

<form action="index.php" method="post">
<input type="text" name="firstname">
<input type="text" name="lastname">
<button name="submitForm">Submit</button>
</form>

PHP:

if (isset($_POST['submitForm'])) {
$insert = $connect->prepare("INSERT INTO users (firstname,lastname) VALUES ('{$_POST['firstname']}','{$_POST['lastname']}')");

$insert->execute();

if($insert){
    header('Location:index.php?Status=True');
}else {
    header('Location:index.php?Status=False');
}
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una de las formas de prevenir esto es usar el patrón Post/Redirect/Get. Esto significa que al enviar el formulario, se redirige al usuario a otra página (o a la misma página con una URL diferente) utilizando el código de estado HTTP 302. De esta manera, si el usuario hace clic en el botón de retroceso del navegador, volverá a la página en la que estaba antes de enviar el formulario, y no al formulario en sí. Para implementar este patrón, modifica tu código PHP de la siguiente manera:

    if (isset($_POST['submitForm'])) {
    
        $insert = $connect->prepare("INSERT INTO users (firstname, lastname) VALUES (:firstname, :lastname)");
        $insert->bindParam(':firstname', $_POST['firstname']);
        $insert->bindParam(':lastname', $_POST['lastname']);
    
        $success = $insert->execute();
    
        if ($success){
            header('Location: success.php', true, 302);  // Redireccionar después de enviar el formulario exitosamente
            exit;  // Detener la ejecución adicional del script
        } else {
            header('Location: index.php?status=error', true, 302);
            exit;
        }
    
    }
    
    // Luego, en la página success.php, muestra un mensaje de éxito y un enlace para volver a la página de inicio:
    echo "¡Tu formulario se ha enviado exitosamente!";
    echo "<br>";
    echo "<a href='index.php'>Volver a la página de inicio</a>";
    

    Ten en cuenta que estamos utilizando la función header() para establecer una cabecera de ubicación y un código de estado 302. También estamos utilizando la función exit() para detener la ejecución adicional del script después de enviar la cabecera. Esto es importante, ya que evita que el formulario se vuelva a enviar si el usuario actualiza la página o hace clic en el botón de retroceso. En la página success.php, mostramos un mensaje de éxito y un enlace para volver a la página de inicio. Este enlace llevará al usuario a la página de inicio sin que el formulario esté prellenado.

Comments are closed.