Newsgroup: it.comp.www.php
Titolo: Refresh di una pagina contenente un form

Salve a tutti,
sono nuovo del forum e abbastanza nuovo anche di php. Ho inserito in
una pagina un form per uploadare dei dati in un db. Si tratta delle
attività che svolgo nella giornata lavorativa, quindi tranne che l'id
che è auto increment, tutte le altre informazioni possono essere
ugualli tra una riga e l'altra. Visto che quando mi collego a quella
pagina per inserire le attività ne devo inserire molte il form
ricarica la stessa pagina. Se l'utente preme il pulsante per il refresh
della pagina il form ricarica i dati due volte.
Tra le varie soluzioni proposte non ce n'è una che faccia al caso
mio....
Qualche anima pia ha un modo per farlo? Per esempio posso fare un
include della pagina php che contiene la query di upload dei dati?
Risolve qualcosa? Oppure posso fare si che il target della pagina (in
loop) sia un'altra pagina identica alla precedente (così posso
inserire altri dati nel form) evitando che il refresh mi dia altri dati
identici?
Grazie per la pazienza e la comprensione :-))
Lelio

della pagina il form ricarica i dati due volte.
La pagina PHP che riceve il form deve caricare roba nel DB solo se il form
e' stato mandato con il pulsante submit; dopodiche' anziche' rimandarti la
pagina, fa
	Header("Location: 
http://sito.
../pagina.php?" . session_name() .
'=' . session_id());
dove pagina.php e' la pagina appunto del form. Ma, cosi', la carichi senza
il parametro associato al button Submit.
In questo modo se anche refreshi la pagina, non succede niente: la carichi
piu' volte nel browser, ma non va a immettere nulla nel database.
A questo punto il problema e' che hai perso le informazioni ricevute dagli
altri parametri, sicche' ti tocca metterle in sessione, riestraendole SOLO
SE il parametro Submit non e' valorizzato.
Es.:
	session_start();
	$campi = array('nome', 'cognome');
	if (isset($_POST['submit']))
	{
		// Lo sventurato clicco'.
		$SAVED = array();
		foreach($campi as $campo)
		{
			if (isset($_POST[$campo]))
				$SAVED[$campo] =
AddSlashes(HTMLEntities(StripSlashes($_POST[$campo])));
			else
				$SAVED[$campo] = '';
			// Costruzione della query di insert
		}
		$_SESSION['SAVED'] = $SAVED;
		// Esecuzione query di insert
		if ($no_error)
			Header("Location: $THIS_PAGE"); // Potrebbe
volerci il session ID, qui...
		else
		{
			// Spiega errore
		}
		die();
	}
	// Questo e' un refresh o la prima volta che ci vediamo.
	if (isset($_SESSION['SAVED']))
		$SAVED = $_SESSION['SAVED'];
	else
	{
		// Prima volta che ci vediamo; crea array vuoto.
		$SAVED = array();
		foreach($campi as $campo)
			$SAVED[$campo] = '';
	}
	$OutputForm = <<<FORM
...
<input type="text" name="nome" value="$SAVED[nome]" />
...
<input type="submit" name="submit" value="BORDA!" />
FORM;
	...
Questa e' la versione semplice per i campi TEXT; per altri campi le cose
si complicano.
Leonardo
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

 Leonardo
Grazie; non ho molti problemi come "altri parametri" in quanto l'unico
altro parametro che la pagina ha è il nome dell'utente che inserisce i
record e a questo punto lo inserisco in session sin dall'inizio e
taglio la testa al toro!
Grazie per la soluzione.
Lelio