• User Attivo

    Refresh pagina - inserimento dati form

    Ciao ragazzi,
    nel tempo perso-libero sto cercando di fare qualcosa di semplice-stupido con php ma ahimè brancolo nell'incapacità totale. Grazie anche ai vostri suggerimenti sn arrivato a scrivere un cavolo script semplice semplice che invia dati da una form al db, me li rispara in una tabella e c'è il famoso tasto cancella per eliminare il record. ora il problema è che se io faccio aggiorna (F5 o come vi pare :2: dopo aver inviato i dati con la form, questi vengono continuamente inviati e ad ogni refresh mi si aggiunge un dato. come faccio ad evitare ciò? Ho paura che c'entrino cookies e sessione e che dovrò studiarmeli asdasd fatemi sapere ^^


  • User

    Ciao, credo proprio che in qualsiasi applicazione in cui invii dei dati via POST, se poi fai il refresh, il browser ti chiede se devi reinviarli... E mi sembra anche una cosa "teoricamente corretta"... Probabilmente potresti risolvere utilizzando AJAX...


  • Super User

    Accanto alla proposta precedente la mia, che è ottima ma non facilmente accessibile ai newbie ( come hai detto di essere ), mi permetto di suggerirti questo escamotage.

    Fai un controllo sui dati prima di procedere all'inserimento. Questo controllo lo puoi decidere tu, siccome non so il tipo di dati coinvolti te ne suggerisco un paio:

    1. Controllo sui dati nel database: se esiste già un record con i dati che cerchi di inviare, allora lo blocchi ( NON utilizzabile nel caso in cui nel db sono ammessi dati doppi )

    2. Controllo sull'ip ed il tempo : Se un indirizzo IP invia due richieste a distanza di poco tempo, blocchi la seconda

    3. Controllo su IP e dati: Memorizzi nella sessione i dati che ricevi per POST, e prima di procedere all'inserimento, verifichi se i dati che hai appena ricevuto sono identici a quelli che hai nella sessione. In questo caso blocchi la richiesta.

    La terza è quella che io uso regolarmente, l'unica cosa a cui devi prestare attenzione è al fare PRIMA il controllo sulla sessione e POI riscrivi il POST nella SESSION.


  • User

    Non avevo pensato a questa soluzione... Grazie PaTeR, interessante...


  • User Attivo

    Grazie mille, non è che riesci (visto che sono niubbone) a esemplificarmi con qualche riga di codice quello che hai detto? a grandi linee, poi riaddato io il tutto (se riesco ^^)! Mitico!


  • Super User

    Ok... Giusto l'ultimo punto che mi sembra il più versatile:

    
    if(array_key_exists('exPOST', $_SESSION) &&
    $_SESSION['exPOST']['campo1'] == $_POST['campo1'] &&
    $_SESSION['exPOST']['campo2'] == $_POST['campo2'] &&
    $_SESSION['exPOST']['campo3'] == $_POST['campo3'] // && etc etc
    ) hai_gia_inviato_questi_dati(); else {
     inserisci_in_database($_POST);
    $_SESSION['exPOST'] = $_POST;
    }
    
    

    Ora, te lo devi gestire tu... Tipo, se ti serve che TUTTI i campi devono essere diversi, e che nemmeno uno può essere un doppione, allora devi aggiungere qualche parentesi in può e sostituire gli AND con degli OR.

    Altrimenti, se ti basta che se ne differenzi anche uno solo, lo puoi lasciare così. Come vedi non occupa tanto spazio... E lo puoi integrare facilmente con altri sistemi di controllo sui dati.

    PS: Ovviamente ricordati il session_start() ( sempre che le sessioni non ti si avviino in automatico! )


  • User Attivo

    incredibile ci sono riuscito XD grande è stato + semplice di quanto pensassi grazie mille, tornerò presto a rompere le balle ^^