2010-09-29 16 views
5

Sono stato bloccato nel punto di cancellazione dei dati del modulo. Dopo che l'utente ha inviato un modulo, i dati vengono aggiunti al database. Va bene fino a qui. Ma se l'utente aggiorna la pagina i dati inseriti in precedenza vengono reinseriti nel database. Sto usando il metodo post per inviare i dati. Non sto usando AJAX. L'intera pagina viene ricaricata dopo l'invio dei dati per. Per favore aiutami con questo. Se esiste un modo per cancellare i dati del modulo dopo averlo inviato, in modo che dopo l'aggiornamento della pagina non vengano aggiunti dati al database, rispondere a questa domanda.Cancellazione dei dati del modulo dopo la sottomissione in PHP

+0

magari utilizzare un valore booleano per controllare prima di inviare, poi quando sottoposto impostato a true? – Emerion

risposta

1

Mi sembra che l'azione successiva del modulo sia la pagina del modulo stesso. È necessario aggiungere un controllo per verificare se il modulo è già stato inviato, in modo che i dati non vengano nuovamente salvati nel database. Oppure è possibile modificare l'azione successiva in una pagina diversa che esegue l'inserimento nel database e reindirizza l'utente al modulo di pagina iniziale.

0

La maggior parte delle persone utilizza un url per POST il modulo e quindi reindirizza nuovamente al modulo originale. Questo può essere lo stesso url.

8

Dopo aver inserito i dati, fare un reindirizzamento:

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

Dopo reindirizzamento, rinfrescante non provoca dati da inserire nuovamente.


Per mostrare il messaggio all'utente vorrei semplicemente impostare un flag via $_GET. Per esempio:

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

Per mostrare il div nascosti si potrebbe fare una funzione:

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

e utilizzare la funzione in questo modo:

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

Grazie amico funziona. ma c'è un altro problema. Ho un messaggio da visualizzare dopo la presentazione del modulo. Il messaggio viene visualizzato all'interno di un elemento div nascosto prima che l'utente invii il modulo. Potete aiutarmi a riguardo? –

+0

Sanket, ho aggiornato la mia risposta con un suggerimento per mostrare il div nascosto ai tuoi utenti. – Mischa

+0

Grazie capitano. Sta funzionando bene ora. Grazie ancora. –

0

Prova usando le sessioni. Impostare una variabile di sessione per registrare se l'utente ha già inviato il modulo.

mettere questo, all'inizio del codice (questo deve essere in ogni pagina):

session_start();

E poi, quando si invia il modulo, impostare una variabile di sessione:

$ _SESSION [ 'form_submitted'] = true;

Ecco un link ad un tutorial su sessioni: Tutorial

1

Se si utilizza POST invece GET come la proprietà di azione sul modulo, quindi aggiornare la pagina dei risultati non ripresentare la forma (alcuni browser possono offrire la opzione per farlo, ma certamente non dovrebbero farlo di default).

Tuttavia, non è possibile escludere la possibilità che un modulo venga pubblicato più di una volta: esistono diversi motivi comuni per cui ciò accade; ad esempio se la pagina è lenta da caricare, l'utente può fare clic più volte sul pulsante.

La cosa migliore da fare è avere un campo ID univoco nascosto nel modulo, in modo da poter dire quando si riceve un modulo che è stato inviato più di una volta e il programma può ignorarlo.

0

Genera una chiave univoca durante la generazione del modulo html e imposta un campo nascosto nel modulo su questa chiave. Salva la chiave insieme ai dati e non salvare i dati se la chiave è già presente nel database.

0

Se si sceglie il metodo di reindirizzamento, non dimenticare di aggiungere un dado dopo il reindirizzamento per indicare al server Web di interrompere l'esecuzione dello 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 
} 
Problemi correlati