2010-06-28 16 views
5

Tengo una página web de php con un formulario. Después de completar el formulario en la página web, puedo enviarlo al servidor. Pero después de eso, si actualizo la página, inserta el mismo registro en la base de datos. ¿Hay alguna solución a este problema?Actualizar una página web vuelve a insertar datos en DB

Respuesta

1

Sí, haga dos consultas. La primera comprueba para asegurarse de que los datos no existen en la base de datos, la segunda inserta si no hay datos duplicados. Hay varias maneras de verificar que los datos duplicados no existan, pero este es el proceso básico por el que querrá pasar.

4

Hay un número de maneras, por ejemplo:

  • Crear un token que se inserta en la forma (campo oculto). si el mismo token se envía dos veces, deseche el segundo envío.
  • Compruebe en la base de datos si ya existe una publicación idéntica.
  • Guarde el formulario enviado en una variable de sesión.
  • Redirige al usuario a una segunda página después del envío, utilizando el Post/Redirect/Get pattern (preferiblemente en combinación con uno de los anteriores).
+1

+1: tokens de autenticación de formulario. También ayuda a protegerse contra CSRF. –

0

Antes de insertar en la base de datos compruebe si los mismos valores ya están duplicados, y si son duplicados, no los inserte. La comprobación de múltiples columnas ayuda aún más. Por ejemplo, en lugar de buscar solo un "nombre de usuario", debe buscar un "nombre de usuario" Y "contraseña".

Obviamente, los ejemplos anteriores son falsos, pero debe entenderse.

0

Puede hacer una página process.php y establecer el formulario action a la misma.

En process.php

//code to insert item to database 
header('Location: YOUR_FORM_PAGE_HERE); 

Luego se enviará de vuelta a la página original y no habrá ningún dato colocar

+0

Los navegadores no están obligados a enviar el encabezado HTTP_REFERER, puede estar en blanco. – Douglas

+0

@Douglas, gracias lo cambié. Si conoce la ubicación, no la necesitará. Acabo de utilizar HTTP_REFERER por el bien de generalizar – Rob

1

Bueno, eso es lo que significa Actualizar: "hacerlo de nuevo. "

Puede verificar si los datos que coinciden con los datos enviados ya se encuentran en la base de datos. Si es así, puede rechazar la nueva presentación.

-1

Se podría cambiar la consulta a INSERT IGNORE INTO table_name ...

esto va a impedir que se inserte dos veces.

Cuestiones relacionadas