PDA

View Full Version : [PHP-HTML] Cancellare Post Data


demos88
01-10-2006, 17:45
Sto creando delle pagine php e mi sono trovato necessitato a usare un form html in esse. Il form mi serve per raccogliere dei dati da inserire in un database mysql mediante codice php. Il problema e' che questa pagina php spedisce i valori di POST della form a se stessa e il codice per l'inserimento nel DB e' contenuto nella stessa pagina php del form. Cio' comporta che, una volta inseriti i valori e inviati questi, ovviamente si riapre la stessa pagina, identica, con lo stesso form ma con l'aggiunta della scritta "Dati inviati con successo" in coda.
Questo e' l'effetto, dal punto di vista grafico, che voglio ottenere, cioe' rimango sempre nella stessa pagina php visualizzando sempre lo stesso form da compilare; cio' mi permette inserimenti veloci e continui.
Il punto sta nel fatto che se malauguratamente refresho la pagina, i valori POST si ripresentano immutati e il refresh comporta una loro rispedizione al codice php che va a inserirli ancora nel database.
Il mio obbiettivo e' fare in modo che una volta inseriti i dati nel db, i valori di post scompaiano, o comunque riuscire a fare in modo che il browser non riesca piu' a rispedirli, cosa che causerebbe un ulteriore inserimento degli stessi dati nel DB.
Ho letto in giro qualcosa su header, ma francamente non ho capito nulla :confused:

Qualcuno sa come fare?

demos88
01-10-2006, 23:10
Ma sapete che statisticamente i miei post hanno il 90% di possibilità a rimanere senza risposte? :stordita:

Mi serve decisamente un consiglio per ovviare al riinvio dei postdata con il refresh.
plz :(

Slide
02-10-2006, 01:09
Io credo che sia un problema incontrato da molti. Un ricerca su google gruppi potrebbe aiutarti.

Dunque, se l'utente esegue il refresh della pagina, l' array $_POST[] si
rirempie completamente? Sicuro che vi siano tutti i valori? Anche il nome del bottone "invia" ?

Fai qualche controllo... puoi stampare $_POST con
print_r
o
var_dump

Ora non ho l'ambiente di sviluppo sotto mano, mi spiace. Altrimenti facevo qualche prova anche se non tocco PHP da un bel po'.

Slide
02-10-2006, 01:24
Hai già provato questa soluzione?

Thread su NG (http://snipurl.com/xrcq)

Fai sapere come va ;)

demos88
02-10-2006, 06:39
Io credo che sia un problema incontrato da molti. Un ricerca su google gruppi potrebbe aiutarti.

Dunque, se l'utente esegue il refresh della pagina, l' array $_POST[] si
rirempie completamente? Sicuro che vi siano tutti i valori? Anche il nome del bottone "invia" ?

Fai qualche controllo... puoi stampare $_POST con
print_r
o
var_dump

Ora non ho l'ambiente di sviluppo sotto mano, mi spiace. Altrimenti facevo qualche prova anche se non tocco PHP da un bel po'.

Quando invio i dati con il bottone lui compila il vettore $_POST e lo spedisce a se stesso e li inserisce. I post data non vengono cancellati e rimangono in cache, tanto che facendo refresh, firef0x mi manda un messaggio di conferma di refresh in quanto ci sono proprio i post data e cliccando su prosegui vengono reinseriti tali e quali creando un doppione nel database.
Io voglio eliminare tutti i post, evitare che il browser li rilevi e mandi la finestrella di conferma, ed evitare in fin dei conti dei doppioni nel db.


edit: ho letto ora il tuo secondo post :stordita:, oggi quando torno da scuola ci provo :D thx

Slide
02-10-2006, 09:28
Quando invio i dati con il bottone lui compila il vettore $_POST e lo spedisce a se stesso e li inserisce. I post data non vengono cancellati e rimangono in cache, tanto che facendo refresh, firef0x mi manda un messaggio di conferma di refresh in quanto ci sono proprio i post data e cliccando su prosegui vengono reinseriti tali e quali creando un doppione nel database.
Io voglio eliminare tutti i post, evitare che il browser li rilevi e mandi la finestrella di conferma, ed evitare in fin dei conti dei doppioni nel db.


edit: ho letto ora il tuo secondo post :stordita:, oggi quando torno da scuola ci provo :D thx

Eh, ho ben presente il problema e l'ho capito. Io volevo sapere se, per scrupolo, ti eri comunque fatto una stampa video dell'array $_POST sia prima che dopo il refresh, e magari avevi scoperto che differivano per uno o due valori.
Comunque, c'è mezzo mondo che si è confrontato sul problema e ti conviene vedere le diverse soluzioni. ;)

Fammi sapere se sei riuscito a far funzionare la soluzione adottata in quell' NG.

ByeZ!

kk3z
02-10-2006, 10:24
$_POST = array();
header("Location: {$_SERVER['PHP_SELF']}");

demos88
02-10-2006, 15:45
$_POST = array();
header("Location: {$_SERVER['PHP_SELF']}");

Da quello che posso capire svuoti l'array $_POST e fai un reindirizzamento alla pagina su cui lavoro. Effettivamente se io, al posto di aggiornare, riapro la pagina stessa mediante "vai", i postdata si cancellano e funziona come vorrei.
Il problema e' che queste righe non ho ben capito dove posizionarle, oltretutto ovunque le metta ottengo che premendo il bottone di invio dati la pagina si ricarichi e in coda visualizzi la scritta:
Warning: Cannot modify header information - headers already sent by (output started at /home/www/nomesito.com/pagina.php:7) in /home/www/nomesito.com/pagina.php on line 147

Oltretutto i post data rimangono presenti, infatti se refresho la pagina ci sono ancora. :(

Puoi spiegarmi come usare quel codice? :confused:

demos88
03-10-2006, 17:41
uppino? :D

Slide
03-10-2006, 18:08
Warning: Cannot modify header information - headers already sent by (output started at /home/www/nomesito.com/pagina.php:7) in /home/www/nomesito.com/pagina.php on line 147

Oltretutto i post data rimangono presenti, infatti se refresho la pagina ci sono ancora. :(

Puoi spiegarmi come usare quel codice? :confused:

Ti tira fuori quell' errore perchè la funzione header() deve esser usata prima di inviare sull' http qualsiasi cosa. Quindi prima di "stampare" qualsiasi cosa, andrebbe quella chiamata.
Scaricati il manuale in formato CHM dal sito di php, così puoi cercare velocelmente le funzioni e capirne il funzionamento.

Ciao.

demos88
04-10-2006, 18:29
la funzione la avevo studiata pero' se la metto all'inizio del codice, quando vado a caricarla ovviamente l'header mi manda il loop il caricamento, se l'istruzione la metto nella stessa pagina che devo visualizzare è ovvio...
Ciò mi fa dedurre che dovrei fare piu' di una pagina ma non saprei come strutturarla... un header nella pagina che chiamo che mi reindirizza alla pagina del form? ma poi non e' la stessa cosa?

Non sono convinto :help: