Svuotare dati $_Post

antonioantonio

Nuovo Utente
27 Set 2015
25
0
0
Ciao a tutti,

in giro tra forum e web ho visto che moltissimi si sono scontrati con questo problema, ed ho letto di sessioni , di script multipli e varie.....ma non sono arrivato da nessuna parte

vi da di darmi una mano ?

Chiaramente il mio problema sta nel fatto che , dopo aver riempito il form con i dati che poi inserisco nel db , se aggiorno la pagina del browser i dati vengono nuovamente inseriti nel db

Nella fattispecie il codice del mio file è questo:

questo è il form:

PHP:
<form method="post" runat="server" action="<?php echo $_SERVER['PHP_SELF']; ?>" autocomplete="on"> 
    <table class="table" align="center">
      <tr>
        <td align="center" colspan="8" class="registro"><h1>REGISTRO</h1></td>
    </tr>

      <tr class="lbl">  
         <td class="lbl"; align="center">DATA</td>
       </td>
     <td class="lbl"; align="center">UTENTE
       </td>
     <td class="lbl"; align="center">CATEGORIA
       </td>
     <td class="lbl"; align="center">SOTTO<br>CATEGORIA
       </td>
         <td class="lbl"; align="center">STATO
       </td>
     </tr>
      <tr>   
         <td> <input type="text" id="data"  name="data" value="" size="10" autocomplete="on">
       </td>
     <td> <input type="text" id="ut"  name="ut" value="" size="15" autocomplete="on">
       </td>
     <td> <input type="text" id="cat"  name="cat" value="">
       </td>
     <td> <input type="text" id="sotcat"  name="sotcat" value="" size="15" autocomplete="on">
       </td>
         <td> <select id="stato"  name="stato" value="">
        <option></option>
        <option>Aperta</option>
        <option>Chiusa</option>
        <option>Annullata</option>
          </select>
       </td>
     </tr>
       <tr>
         <td class="lbl"; align="center"; colspan="8">DESCRIZIONE
       </td>
     </tr>
       <tr>
     <td colspan="8"> <input type="text" class="desc" id="desc"  name="desc" value="" size="137" autocomplete="on">
       </td>
     </tr>
       <tr>
     <td align="center"; colspan="8"><input type="submit" name="inserisci" value="Inserisci"></td>
     </tr>
   </table>
  </form>

Seguito poi dal solito comando

PHP:
if(isset($_POST['inserisci'])){

etc....etc


Grazie a tutti in anticipo!
 
ciao, in teoria si usa
PHP:
unset($_POST['inserisci']));
ma se l'utente preme F5 il browser visualizza un messaggio dicendo che aggiornando la pagina potrebbero ripetersi alcune operazioni. Questo perché il browser ricorda attraverso la cache tutte le operazioni fatte in precedenza.
 
Ultima modifica:
prova così:

PHP:
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['inserisci'])) {
  
  $Stato = $_POST["inserisci"];
  
  if (! is_null($Stato)) {
    unset($_SESSION['inserisci']);
    $_SESSION['inserisci'] = $Stato;
  }
  $checkStato = $_SESSION['inserisci'];
  if (! is_null($checkStato)) {
    
    //codice d'invio dati al db.
    
  }
  unset($_SESSION['inserisci']);
}
?>

Il massaggio del browser appare lo stesso, ma dato che elimini la sessione, la variabile $checkStato sarà vuota e non invierà nulla.
 
Ultima modifica:
Ciao The Night,

purtroppo non funziona....refreshando la pagina continua comunque ad inserire i dati nel db!!!!!!

come posso fare cavolo!....ci sarà pure un modo!?!?
 
ciao, ho aggiunto document.location.reload(true); che da quello che dice la guida php dovrebbe refreshare la pagina senza usare la cache del browser. Prova e fammi sapere.

PHP:
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['inserisci'])) {
  
  $Stato = $_POST["inserisci"];
  
  if (! is_null($Stato)) {
    unset($_SESSION['inserisci']);
    $_SESSION['inserisci'] = $Stato;
  }
  $checkStato = $_SESSION['inserisci'];
  if (! is_null($checkStato)) {
    
    //codice d'invio dati al db.
    
  }
  unset($_SESSION['inserisci']);
  echo "
  <script>
  document.location.reload(true);
  </script>
  ";
}
?>
 
:crying:......Ha avuto un'effetto a dir poco .......IMPATTANTE!!

la pagina va praticamente in loop ricaricandosi di continuo e continuando ad inserire righe nel db ad ogni refresh.......bah!..non so proprio che pesci prendere!!!

Help!
 
ciao
puoi provare così dovrebbe vuotare la cache
PHP:
<?php
ob_start();//questa serve in quanto si usa la funzione header dopo un outpt html
session_start();
//.....
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form method="post" runat="server" action="<?php echo $_SERVER['PHP_SELF']; ?>" autocomplete="on"> 
<!-- tutto il form -->
</form>
<?php
if(isset($_POST['inserisci'])){
	header("Cache-Control: no-cache"); //dovrebbero vuotare la cache
	header("Expires: -1"); 
// ecc....
}
?>
</body>
</html>
<?php
ob_end_flush();//chiude ob_start
?>
se ti funziona fammi sapere non l'ho mai utilizzato il sistema
 
ma come è possibile che va in loop se non ha un post da ricevere? -.-"

C'è una condizione all'inizio.....
 
Ciao borgo italia,

ho provato ma....nulla da fare....tutto resta invariato, facendo il refresh le informazioni vengono spedite di nuovo....

Pare sia un problema bello spinoso!....anche in giro ho letto di tanta gente "disperata" dietro a questo problema
 
Io faccio così e non ho problemi:
1. compilo form
2. Mando i dati in una seconda pagina ( solitamente la classe che li processa ) e poi gli piazzo un header finale che mi riporta alla pagina di provenienza.

In alternativa puoi provare così:
1. Invii i dati dal form
2. Li processi con un if che controlla che un dato obbligatorio a tua scelta ( anche un campo nascosto ) sia stato settato
3. Finito il lavoro unsetti le variabili così che al secondo controllo risultino vuote e come else gli piazzi un break e un header, un pó grezzo ma è un'alternativa da provare


Saluti.
G.G.
 
Ciao 892

Quindi...tradotto in "codicese" come sarebbe, possibilmente restando nella stessa pagine?

Scusa ma io non sono così pratico da fare da solo la traduzione
 
Ora sono dal cell, ma credo in poche parole che il tuo problema sta nell'action. La soluzione che ti propongo io, spero di riuscire a postarti presto un pó di codice, non è difficile da implementare, ed è quella di avere due pagine, una con il form e un'altra che riceve i dati post. Quindi l'action punta a questa seconda pagina. Finito il processamento dei dati inserisci qui $_SERVER['PHP_SELF'] facendo il modo che dalla pagina che serve a processare i dati ritorni a quella del form. L'utente nn si accorge di nulla e puoi farlo quante volte vuoi.. Anche refreshando la pag non continua ad inviare perchè l'action nn punta alla stessa pagina.. Poi per una sicurezza ulteriore, anche se non credo serva a questo punto, puoi unsettare. Comunque appena posso ti mando un essmpio.


Saluti.
G.G.
 
Ultima modifica:
Vedi se funziona una cosa del genere..

Premesso che le pagine del form e quella che ricevono i dati devono essere diverse..
Facciamo finta che i tuoi dati del form arrivano in questa pagina:
PHP:
<?php
//Ti recuperi tutte le variabili in entrata..
$controllo = $_POST['datocontrollo'];
$nome = htmlspecialchars ($_POST['nome'], ENT_QUOTES, 'UTF-8');
//ecc..
//controlliamo che un campo esista
if($controllo && isset($controllo)){
	
// Uso PDO per inserimento dati nel db se hai un altro metodo usa pure il tuo..
// Inserisci dati nel db ( ovviamente modifica il link di connection.php in base alla posizione del tuo file )
			include "connection.php";
 			$sql = 'INSERT INTO tabella SET
					nome = :nome,
					ecc = :ecc,
					ultimo = :ultimo';
			$s = $pdo->prepare($sql);
			$s->bindValue(':nome', $this->nome);
			$s->bindValue(':ecc', $this->ecc);
			$s->bindValue(':ultimo', $this->ultimo);
			$s->execute();
			
			//finito il caricamento torno al modulo vuoto ( in questo caso alla pagina precedente "di provenienza" )
// Per sicurezza unsetta tutte le variabili.. ( anche se non credo che serva, o meglio puoi farne a meno salvo che non si tratti di un ciclo, in quel caso è necessario.. )
unset($controllo);
unset($nome);
//ecc..
			header("Location:".$_SERVER['HTTP_REFERER']."");
  			exit();
		}else{
		
		echo 'Quello che ti pare..';
		
		}
?>
 
Ultima modifica:
Ciao 892,

Oggi provo e ti faccio sapere...purtroppo. tra il lavoro ed il supporto del motore della mia auto ( che mi ha abbandonato in autostrada) .. .sto avendo poco tempo per le prove

Grazie
 

Discussioni simili