Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Variabili $_POST

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    21

    Variabili $_POST

    Ciao, ho una pagina PHP a.php con una form di inserimento. Quando viene fatto il submit della form, la action porta a un'altra pagina PHP b.php che effettua una insert in un DB mysql e stampa l'esito dell'inserimento ( se è andato a buon fine o meno).

    Dunque lancio a.php, inserisco i dati, faccio submit e vado in b.php dove vedo che è stato effettuato un inserimento.

    Il problema è che se faccio il refresh di b.php viene rieffettuato l'inserimento! A ogni refresh effettua un nuovo inserimento!

    Ho pensato di usare un campo hidden nella form:
    <input type="hidden" name="new_row" value="ok">

    e poi in b.php di inserire il codice della insert nel DB in questa if:

    Codice PHP:
    if(($_POST['new_row']=="ok"))
     {
      
    // Qui va il codice della insert
      
    $_POST['new_row']= "not_ok";
     } 
    Però la cosa non funziona, a ogni refresh new_row è ancora uguale a OK...
    Anche una semplice assegnazione new_row="not_ok" ha lo stesso esito...

    Come si comportano le variabili passate in post da una form? Oppure ci son dei modi standard di strutturare le pagine di inserimento tramite form?

    Grazie in anticipo...

  2. #2
    invia con un redirect ad una terza pagina con le segnalazioni del caso in modo da impedire il refresh della pagina con l'inserimento.

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

  3. #3
    ennò, tu non hai mica accesso all'Array $_POST solo il core di PHP può.

    Guarda, il modo "standard" (metto le virgolette perché è il MIO modo standard) per evitare questo problema è la separazione delle pagine PHP (che non mi stancherò mai di ripetere, quanto è importante):

    hai la pagina form.php (ti prego non usare a.php e b.php, i nomi devono indicare COSA fa il file, sennò dopo 3 - 4 mesi come te li ricordi...) che contiene la form che tu hai fatto.
    La form ha la action ad un file :actor.php

    Questo file fa l'inserimento nel DB, SENZA stampare niente, e poi, alla fine, fa un
    Codice PHP:
    header("Location: result.php?result =".($error 'KO' 'OK'));
    exit; 
    la pagina finale result.php, vede che gli passi in GET e stampa il risultato secondo questo.

    Perché tutto questo?

    Perché il browser tiene conto delle pagine ritornate con STATUS 200 (OK), mentre un Location nell'header è uno STATUS 302 (redirect) e non viene salvato come Cronologia di navigazione (appunto per questo è utile). Infatti, ti trovi sulla pagina result.php?result=OK e se fai Indietro vai sulla pagina form.php, perché il browser non ha tenuto traccia della pagina intermedia.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    21
    Artorius, ho usato il tuo metodo standard e funziona ottimamente...
    Grazie anche della spiegazione molto esauriente....

    Alla prossima

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.