2010-09-29 11 views
5

Me he quedado atrapado en el punto de borrar los datos del formulario. Después de que el usuario envía un formulario, los datos se agregan a la base de datos. Está bien hasta aquí. Pero si el usuario actualiza la página, los datos ingresados ​​previamente se vuelven a ingresar en la base de datos. Estoy usando el método de envío para enviar los datos. No estoy usando AJAX. La página completa vuelve a cargarse después de enviar los datos. Por favor, ayúdame con esto. Si hay alguna manera de borrar los datos de formulario después de enviarlos, de modo que después de actualizar la página no se agreguen datos a la base de datos, responda esta pregunta.Borrando los datos del formulario después de la sumisión en PHP

+0

uso pueden ser un booleano para comprobar antes de enviar, a continuación, cuando se presente la ponemos a true? – Emerion

Respuesta

1

Me parece que la acción posterior de su formulario es la página del formulario en sí. Debe agregar un cheque para ver si el formulario ya se ha enviado, de modo que los datos no se vuelvan a guardar en la base de datos. O puede cambiar la acción posterior a una página diferente que hace la inserción en la base de datos y redirige al usuario al formulario de página inicial.

0

La mayoría de las personas usa una URL para PUBLICAR el formulario y, a continuación, redireccionar al formulario original. Esta puede ser la misma url.

8

Después de introducir los datos, hacer una redirección:

header('Location:'.$_SERVER['PHP_SELF']); 

Después de redirigir, refrescante no va a hacer que los datos sean insertados de nuevo.


Para mostrar el mensaje al usuario quisiera simplemente establecer un indicador a través de $_GET. Por ejemplo:

// Redirect and set $_GET variable 
header('Location:'.$_SERVER['PHP_SELF'].'?showmsg=true'); 

Para mostrar el div oculto se puede hacer una función:

function show_confirmation() 
{ 
    return isset($_GET['showmsg']) && $_GET['showmsg'] == 'true'; 
} 

Y el uso de la función de la siguiente manera:

<div style="display:<?php echo show_confirmation() ? 'block' : 'none'; ?>"> 
    <!-- Message for user --> 
</div> 
+0

Gracias amigo, funciona. pero hay otro problema. Tengo un mensaje para mostrar después del envío del formulario. El mensaje se muestra dentro de un elemento div que está oculto antes de que el usuario envíe el formulario. ¿Puedes ayudar con esto? –

+0

Sanket, actualicé mi respuesta con una sugerencia para mostrar el div oculto a sus usuarios. – Mischa

+0

Gracias capitán. Está funcionando bien ahora. Gracias una vez más. –

0

Trate de usar sesiones. Establezca una variable de sesión para registrar si el usuario ya envió el formulario.

poner esto en el comienzo de su código (esto tiene que estar en cada página):

session_start();

Y luego, cuando se envía el formulario, establezca una variable de sesión:

$ _SESSION [ 'form_submitted'] = true;

Aquí hay un enlace a un tutorial sobre sesiones: Tutorial

1

Si utiliza POST en lugar de GET como la propiedad de acción en el formulario, a continuación, la actualización de la página de resultados no se vuelva a enviar el formulario (algunos navegadores pueden ofrecer la opción para hacerlo, pero ciertamente no deberían hacerlo de manera predeterminada).

Sin embargo, no puede descartar la posibilidad de que un formulario se publique más de una vez; hay varias razones comunes por las que sucede; por ejemplo, si la página tarda en cargarse, el usuario puede hacer clic más de una vez en el botón.

Lo mejor que puede hacer es tener un campo ID único oculto en el formulario, para que pueda saber cuándo recibe un formulario que se ha enviado más de una vez, y su programa puede ignorarlo.

0

Genere una clave única al generar el formulario html y establezca un campo oculto en el formulario para esta clave. Guarde la clave junto con los datos y no guarde los datos si la clave ya está presente en la base de datos.

0

Si elige el método de redirección, no olvide agregar un dado después de la redirección para indicarle al servidor web que detenga la ejecución del script.

if(saveFormInformation()) 
{ 
    header('Location: http://www.example.com/'); //this line instructs browser 
               //to go to example. com 
               //but the webserver will keep executing the rest of the script 
               //unless you instruct it to stop 

    die; //this line instructs web server to stop execution of the script 
} 
Cuestiones relacionadas