Visualizzazione dei risultati da 1 a 9 su 9

Discussione: elaborazione dati form

  1. #1

    elaborazione dati form

    Salve, ho una questione tecnica generale da risolvere:
    ho un file php che mostra una form per l' inserimento e aggiornamento record di una tabella
    l'action della form è la pagina stessa con in più il parametro ?action=savedata.
    nel file php all'inizio c'è una sezione if($_GET['action']=='savedata').....ecc
    che controlla appunto se la pagina viene richiamata dopo avere compilato e inviato la form.
    funziona tutto ok questo passaggio

    il problema è che se premo il pulsante di refresh del browser mi viene ricaricata la pagina ma viene anche rielaborato il codice di inserimento dati nella tabella per cui mi aggiunge i dati inseriti nella form (perchè la chiave principale è autonum).

    il fatto è che il refresh fa rielaborare i dati $_POST e $_GET
    come si può risolvere il problema del refresh che se premuto non fare avvenire l'elaborazione ma eventualmente solo fare il refresh della pagina?

    grazie
    Giorgio

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Usa due pagine invece che una

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    142
    oppure all'inizio testi se esiste in post o get una variabile che passi alla stessa pagina solo se compilato.(la variabile la fai passare da un campo nascosto )

    così se all'inizio la pagina non trova in get o post la variabile "test"

    non gli fai eseguire il codice php che non vuoi che esegua

  4. #4
    generalmente io faccio una cosa del genere:
    - viene effettuato il submit del form
    - controllo la presenza di eventuali errori ed in caso ristampo la pagina con i dati inseriti e l'elenco degli errori
    - se non ci sono errori mostro una pagina di conferma dell'operazione e dopo 1 secondo effettuo un redirect usando l'header refresh verso l'elenco delle informazioni piuttosto

    in questo modo qualcuno dovrebbe premere il tasto refresh durante la pagina di conferma, ma questo non credo si possa risolvere con linearità (si dovrebbe passare da javascript ma non è una buona idea)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    26
    Un modo abbastanza rapido è quello di usare delle variabili di sessione. In pratica quando viene effettuato il submit prima di eseguire la computazione dei dati provenienti dal form (suppongo si tratti di salvare dei dati in DB) controlli se una variabile di sessione a tua scelta è presente, qualcosa tipo:
    Codice PHP:
    session_start();

    // ...

    if(!empty($_SESSION['form_submitted'])) {
        
    /* sava data... */
        
    $_SESSION['form_submitted'] = true;
    }
    else { 
    /* error */ 
    In questo modo è possibile compilare il form una sola volta.
    Ovviamente se l'utente deve poter inviare i dati più di una volta e vuoi solo evitare il refresh devi modificare opportunamente la pagina di raccolta dati in modo che pulisca eventualmente la variabile di sessione.

  6. #6
    ehm ... è pericoloso

    in questo modo se apro due schede con due form distinti posso compilare il primo ma non il secondo (la variabile di controllo la devo resettare all'accesso, ma se apro prima le schede e compilo dopo il risultato sarà che il secondo form verrà bloccato)

    ovviamente una soluzione immediata potrebbe essere quella di avere una variabile di sessione ad hoc per ogni form, ma credo che la cosa si complichi eccessivamente

    di norma, basta semplicemente fare un redirect dopo la compilazione ed il problema è risolto senza scrivere codice in più per gestire la situazione

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    26
    Originariamente inviato da daniele_dll
    ehm ... è pericoloso

    in questo modo se apro due schede con due form distinti posso compilare il primo ma non il secondo (la variabile di controllo la devo resettare all'accesso, ma se apro prima le schede e compilo dopo il risultato sarà che il secondo form verrà bloccato)

    ovviamente una soluzione immediata potrebbe essere quella di avere una variabile di sessione ad hoc per ogni form, ma credo che la cosa si complichi eccessivamente

    di norma, basta semplicemente fare un redirect dopo la compilazione ed il problema è risolto senza scrivere codice in più per gestire la situazione
    Beh, è ovvio che era un codice di esempio per un singolo form.
    Se il form è uno solo il codice che ho incollato basta e avanza, se ci sono più form è possibile far diventare quella variabile di sessione un array, non vedo particolari complicazioni nè pericoli.
    Il redirect è sicuramente più semplice nel caso di una thank you page semplice/statica, mentre la soluzione con sessione magari può essere più comoda se si vogliono stampare nella pagina i dati appena immessi dall'utente perchè si evita di andarli a recuperare nella thank you page.
    Mi sembrano soluzioni alternative, si può scegliere la più adatta in base alla situazione.

  8. #8
    se i dati li hai già nell'array del post (visto che stampi la pagina e poi fai il redirect) non serve metterli nella sessione (nella quale permarranno per MOLTE e MOLTE e MOLTE ore)

    tra l'altro l'uso delle sessioni di php in un normale hosting è qualcosa di ALTAMENTE sconsigliato e sconveniente perché nel 99% dei casi i file delle sessioni di php stanno tutti nella stessa cartella creando gravi problemi di sicurezza

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    26
    In sessione viene memorizzato esclusitamente la variabile (o array, in caso di più form da tenere d'occhio) che indica se quell'utente ha compliato o meno quel form. Utilizzando le variabili di sessione e non il redirect è possibile accedere ai dati direttamente da $_POST e quindi non è necessario memorizzarli in sessione, visto che si svolge tutto nella stessa pagina. Il fatto poi che le sessioni rimangano memorizzate per diverso tempo può rappresentare un vantaggio, dipende sempre dai casi.
    Parlare di problema di sicurezza quando in sessione si memorizza un valore booleano mi sembra un tantivo eccessivo
    Fermo restando che se necessario è possibile implementare soluzioni di sessione più sicure, ma penso siamo già abbastanza OT e quindi eviterei l'argomento :P

    In ogni caso ripeto, sono soluzioni differenti per esigenze differenti, la mia voleva solo essere un'alternativa, non la soluzione ideale

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.