invio multiplo e refresh pagina come evitare?

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, mi sapete dire come fare per evitare se io premo f5 e mi rinvia i dati dal form al database ?
ecco il codice che uso io (e solo un pezzo poi ci sono delle classi dietro).

PHP:
<?php

require_once(dirname(__FILE__) . '/../../inc.php');


if(isset($_POST["submit"]))
{
	 if($_POST["titolo"]=="")
		{ 
		  $error =  "Inserire il titolo.";
			
		}
		
		elseif($_POST["_text"]=="")
		{ 
		  $error =  "Inserire testo.";
			
		}
	
		elseif($_POST["data"]=="")
		{ 
		  $error =  "Inserire la data";
			
		}
		elseif($_POST["stato"]=="")
		{ 
		  $error =  "Inserire lo stato.";
			
		}else
		
		{
	
			
				$query = "INSERT INTO note(";
				$query.="_userid,";
				$query.="_user,";
				$query.="_titolo,";
				$query.="_text,";
				$query.="_stato,";
				$query.="_data)VALUES('".$_POST["userid"]."',";
				$query.="".$db->qstr($_POST["Name"]).",";
				$query.="".$db->qstr($_POST["titolo"]).",";
				$query.="".$db->qstr($_POST["_text"]).",";
				$query.="".$db->qstr($_POST["stato"]).",";
				$query.="".$db->qstr($_POST["data"]).")";
			
				$result = $db->query($query);
				
				$num = mysql_affected_rows();
				
				 if($num == 1)  {
                      $msg =  "Aggiungta : <a href=\"index.php\">Torna alla pagina</a><br><br><br><br><br>";
					  
						
                    
                       }
                            else  {
                                  $msg =  "<br />Dati NON inseriti - Riprova";
                              
                                   }
				
				
				
			}
			
}

 require_once(dirname(__FILE__) . '/../../template/admin/header.php');  ?>

<?php	if ( isset ( $error ) )	{ echo '			<p style="error">' . $error . '</p>' . "\n";	}	?>
<?php	if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {//if we have a mesage we don't need this form again.?>
<p class="titolo">Note - Aggiungi</p>
 
<form id="form" method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
<input type = "hidden" name = "check" value ="1">
<table width="100%">
<tr>
	<td></td>
	<td><input type="hidden" name="userid"   value="<?php echo $_SESSION['user_id']?>" readonly /></td>
</tr>
<tr>
	<td>Nome</td>
	<td><input type="text" name="Name"  size="40" value="<?php echo get_username($_SESSION['user_id'])?>" readonly /></td>
</tr>
<tr>
	<td>Data</td>
	<td><input type="text" name="data" size="40"  value="<?php echo date("m-d-Y"); ?>" /></td>
</tr>
<tr>
	<td>Titolo</td>
	<td><input type="text" name="titolo"  size="80" value="<?php if($_POST['titolo']){echo "".$_POST['titolo']."";}?>" /></td>
</tr>
<tr>
	<td>Nota:</td>
	<td><textarea name="_text" rows="10" cols="80"><?php if($_POST['_text']){echo "".$_POST['_text']."";}?></textarea>
 </td>
</tr>

<tr>
	<td>Stato</td>
	<td>  <select name="stato">
        <option selected="selected" value="">SELEZIONA</option>
        <option value="0">Disattivo</option>
        <option value="1">Attivo</option>
        </select></td>
</tr>
</table>
<input class="submit" type="submit" name="submit" value="Aggiungi NOTA" />
</form>
<?php

}
require_once(dirname(__FILE__) . '/../../template/admin/footer.php'); 
?>

grazie aspetto soluzione.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
1) Inizializza una sessione
2) crea un valore qualsiasi per la sessione, ad esempio una stringa alfanumerica
3) passa il valore all'applicazione che inserisce i dati nel db tramite campo hidden
4) confronta il valore di sessione con quello passato per post
4) una volta effettuato l'inserimento distruggi la sessione

A questo punto il confronto tra valore di sessione e il valore inviato per post restituirà FALSE e lo stesso record non potrà essere inserito nuovamente.
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
1) Inizializza una sessione
2) crea un valore qualsiasi per la sessione, ad esempio una stringa alfanumerica
3) passa il valore all'applicazione che inserisce i dati nel db tramite campo hidden
4) confronta il valore di sessione con quello passato per post
4) una volta effettuato l'inserimento distruggi la sessione

A questo punto il confronto tra valore di sessione e il valore inviato per post restituirà FALSE e lo stesso record non potrà essere inserito nuovamente.

hai un esempio di codice?

grazie mille per la risposta.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
La struttura è più o meno la seguente:
PHP:
<?php
session_start();

if (isset($_POST['submit'])) {
    if (!isset($_SESSION['code']) || !isset($_POST['code']) || $_POST['code'] != $_SESSION['code']) {
        // sessione non impostata, visualizza un errore
    }

    unset($_SESSION['code']);
    
    // esegui le normali operazioni
}
else {
    $_SESSION['code'] = uniqid();

    echo <<<EOF
<form action="{$_SERVER['REQUEST_URI']}" method="post">
EOF;

    // visualizza i campi del form

echo <<<EOF
    <input type="hidden" name="code" value="{$_SESSION['code']}" />
    <input type="submit" name="submit" value="Invia" />
</form>
EOF;
}
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
G form invio multiplo con checkbox PHP 12
Cosina Upload multiplo con invio allegati per email PHP 0
cobra_72 [PHP] problema invio multiplo allegati mail PHP 21
G Form invio multiplo da database PHP 0
P Invio multiplo mail con phpmailer PHP 5
F Invio multiplo [help] PHP 1
A invio form multiplo PHP 3
M problema script invio email multiplo PHP 8
I Invio multiplo di form PHP 6
G invio mail multiplo PHP 1
R Invio dai tessera sanitaria PHP 1
M telecamera Foscam - mancato invio mail ad account gmail IP Cam e Videosorveglianza 0
G Invio di più valori con la stessa checkbox PHP 4
M Invio dati database via email php PHP 0
K [php]form invio dati PHP 0
nivaria.achinet Intercettare form solo dopo invio Javascript 1
M Memorizzare i dati nei campi prima dell'invio al db PHP 4
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
M Invio di email PHP 0
A invio massivo dati a file php Javascript 4
P Funzione jQuery Ajax invio file a php jQuery 1
C Mailchimp ritardo invio newsletter subscribers Email Marketing 1
G creazione menu a tendina e invio a pagina php PHP 1
R Invio mail con allegati multipli PHP 0
R Invio mail con allegati da directory PHP 1
Cosina Invio messaggio a mailing list su file txt PHP 9
W Invio Dati ad un altra pagina Classic ASP 1
S Invio email da form PHP 8
psicomia Server e url per invio di file Server Dedicati e VPS 3
max1974 Invio email PHP 12
Daniele_Carrara Problema timeout - invio mail PHP 7
U PHP bottone per invio mail o ritorno al form PHP 15
G Invio mail con php da dati prelevati da un database PHP 9
L [PHP] Invio Immagini PHP 1
AC1 [PHP] Invio Mail PHP 18
I [PHP] Invio sms multipli PHP 4
S Consigli per invio di comunicati stampa Discussioni Varie 2
A [PHP] Invio automatico dati da form PHP 6
F Estrazione Email di persone selezionate e attive / facebook + invio di massa! Annunci servizi di Social Media Marketing 0
ANDREA20 [PHP] Modulo email invio PHP 5
Shyson [PHP] Codice iscrizione e invio avviso nuovi articoli PHP 3
Tommy03 Errore invio email con PHP PHP 1
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
A [PHP] errore 404 e invio mai path pagina con link interrotto PHP 2
A [PHP] Invio messaggio a tutti gli iscritti PHP 2
M [PHP] Problema script ricezione e invio posta... PHP 1

Discussioni simili