Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281

    redirect, aggiornamento e duplicazione record

    Ciao a tutti!

    Questa domanda è stata fatta 1000 volte ma vorrei un ulteriore consiglio, se possibile.

    Poniamo il caso di avere una pagina php suddivisa in 3 parti:

    1° compilazione del form
    2° visualizzazione dati inseriti
    3° inserimento del database e visualizzazione messaggio : "inserimento avvenuto".

    Se faccio un back dal passaggio 3 al 2 e riclicco, l'insert viene rifatta un'altra volta, quindi il record viene duplicato.

    Le soluzioni che ho pensato sono :

    disabilitare il tasto destro del mouse, F5 e backspace (soluzione più brutta e comunque rimane il tasto destro del browser)

    prima dell'insert fare una select con tutti i dati provenienti dal form. se estrae un record non faccio l'insert

    dopo il passaggio 2, fare l'insert e un redirect ad un'altra pagina. però se faccio un back, posso duplicare nuovamente il record

    Ho notato, per esempio in fineco (se qualcuno ha il conto può controllare) o in tiscali mail, che non è permesso tornare indietro sia con il tasto desctro del mouse che con quello del browser...non riesco a capire.

    Voi come fate? Avete qualche consiglio?

  2. #2
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    uppino

  3. #3
    non me ne intendo molto, ma se il problema è solo quello di non avere un doppione fai un select al database di controllo con i campi inseriti, se trova una corrispondenza mandalo ad una pagina in cui viene detto che i dati inseriti sono già presenti, senò glieli fai inserire...

  4. #4
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    probabilmente farò così.

    ti spiego il mio problema. dovrei fare tipo 70/80 select per 40/50 file....
    allora volevo sapere se ci sono metodi alternativi, tipo quello di fare il redirect dopo l'insert e non far tornare indietro al modulo precedente.

    qualche altra idea?

  5. #5
    Utente di HTML.it L'avatar di *Ray*
    Registrato dal
    Oct 2000
    Messaggi
    495
    L'unica soluzione che mi viene in mente e' inserire un campo hidden con un numero random a 32 bit che viene memorizzato in una tabella apposita con un solo campo per salvare tale numero, che sia unique.

    Nella pagina di inserimento dati prima di procedere provi a fare una insert di quel valore. Se fallisce per duplicate entry allora i dati in questione sono gia' stati inseriti.

    La soluzione e' piu' veloce dell'altra ma rimane comunque sporca e non mi piace, ma e' la prima che mi viene in mente.

  6. #6
    Ho fatto un accrocchio che funziona perfettamente per questo. In pratica se l'inserimento e' andato a buon fine valorizzo con un valore conosciuto $_SESSION.
    codice:
    se inserimento OK.
    
    $_SESSION['fatto']="75535";  // <---- quello che ti pare
    Ora se si fa un refresh della pagina (F5) mi trovo $_SESSION['fatto'] valorizzato e quindi:

    pag. dati_in_db.php
    codice:
    <?
    session_start();
    if (!isset($_SESSION['user'], $_SESSION['dbase'])) {
       header("location:../area/login.php");    
       exit();  }
    
       elseif($_SESSION['fatto'] == "75535") {
           $_POST = array();
           $_SESSION['fatto'] = "";
           echo "
           window.location=\"./inserisci.php\"
           ";
           exit;
           }
    Se trovo il valore, azzero $_SESSION['fatto'] e rimando alla pagina di inserimento.

    Ora pero' nella pagina di inserimento dobbiamo provvedere a ripulire anche qui $_SESSION['fatto'], altrimenti se si ripresenta valorizzato verrebbe scartato.

    pag inserisci.php
    codice:
    <?
    session_start();
    if (!isset($_SESSION['user'], $_SESSION['dbase'])) {
    header("location:../area/login.php");    
        exit();
        } elseif($_SESSION['fatto'] == "75535") {
           $_POST = array();
           $_SESSION['fatto'] = "";
           }
    Semplice e funzionale....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    adesso provo e poi ti faccio sapere

    grazie mille

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 © 2024 vBulletin Solutions, Inc. All rights reserved.