Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Come evitare la ripetizione di POST quando si aggiorna la pagina?

    Salve a tutti.
    Ho costruito un programmino che prende il dato inserito in un campo, e lo registra nel database. Se il valore non è presente, lo aggiunge e gli associa un valore "conta" uguale a uno, se è già presente, incrementa di uno il campo "conta" associato a quel valore.
    In questo modo, ho una classifica dei termini più gettonati inseriti in quel campo.

    Dato che però questo valore viene passato alla pagina che lo registra tramite il metodo POST, se aggiorno la pagina lo script si esegue di nuovo, e "conta" viene incrementato nuovamente.

    Come posso fare per evitare che, premendo Aggiorna nel browser il contatore si incrementi ogni volta?
    Avete qualche idea? Grazie a tutti in anticipo

  2. #2
    Utente di HTML.it L'avatar di deleted_id_48586
    Registrato dal
    Nov 2002
    Messaggi
    1,732
    potresti fare il submit in una finestra popup che si apre e chiude solo per l'insert oppure dopo che hai effettuato l'insert a DB obblighi ad un redirect sulla stessa pagina con:

    header("Location: miapagina.php");

    Ciao.

    Probabilmente esistono metodi migliori ma questi sò che funzionano.
    deleted_id_48586
    Sgurbat
    y.redaelli@gmail.com

  3. #3
    Ciao Sgurbat, purtroppo nessuna delle due soluzioni che hai proposto va bene (ma grazie lo stesso!): la pop-up decisamente no, perchè il sito è tutto in una unica finestra e non ho intenzione di usare javascript per una funzione chiave; il ricaricamento della pagina nemmeno, perchè quella pagina oltre a inserire dati nel database visualizza l'output relativo alla stringa inserita, e se faccio un reload evito sì il doppio inserimento, ma mi sparisce pure tutto il resto dell'output a video (che dipende da $_POST).

    Oltretutto, header() non funziona solo se è la prima riga di uno script?

    Va bene, qualcuno ha da proporre un'altra soluzione?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    no, header funziona se non c'è già stato output, che è un po' diverso dall'essere o meno la prima riga della pagina.

    Comunque, ad inserimento avvenuto, potresti:

    registrare la variabile POST is SESSION e annullare il post (unset o $_POST = "" o che). Prima di inserire nel database controlli che esista $_POST e in caso contrario non esegui l'aggiornamento.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    think simple think ringo

  6. #6
    Andrea, la soluzione che mi hai proposto sembra essere la strada giusta

    Ho solo bisogno di capire il funzionamento delle sessioni, dato che non le ho mai usate.

    Per fare quel che mi consigli, posso scrivere semplicemente
    Codice PHP:
    $_SESSION['query'] = $_POST['query'];
    unset(
    $_POST['query']); 
    oppure... devo leggere la documentazione?

    edit: grazie piero.mac per il link alla pillola

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    La soluzione di andrea secondo me non funziona.

    Ti consiglio il redirect.

  8. #8
    Ho risolto con la pillola di piero.mac (che nel post precedente avevo ringraziato al posto di marketto).

    Ho avuto non poche difficoltà per capirla e per applicarla, ma ora sembra funzionare... per cui non mi resta che schiarirmi un poco le idee su alcune funzioni.

    Grazie a tutti

  9. #9
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    un esempio di sessione:

    session_start(); va messo a monte di qualsiasi output o potresti avere problemi(errori).. per creare un dato : $_SESSION['pwd'] = $_POST['pwd'];
    oppure if($_POST['pwd']) {$_SESSION['pwd'] = $_POST['pwd'];}
    da questo momento hai il dato di sessione che resta nello script anche se nn ripassi il post. Se vuoi lo puoi eliminare
    con unset($_SESSION['pwd']); "elimini solo questo"...
    www.php.net c'e' tutto
    La vita e' uno switch();

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    @luca200... avevi proprio ragione, togli pure il dubitativo.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.