Un client invia ad un server web la richiesta di una pagina. Il server soddisfa la richiesta inviando la pagina al client e poi dimentica sia la richiesta sia il richiedente.
Il server web non mantiene lo stato della connessione, cioè dopo aver risposto al client non ha memoria della richiesta.
Ci sono situazioni in cui un utente navigando all'interno delle pagine di un sito effettua delle scelte in ciascuna pagina visitata, e per mantenere lo stato della connessione dovrebbe ripetere le sue scelte in ogni pagina. I casi in cui ciò si rende necessario potrebbero essere:
Ci sono tre tecniche per mantenere lo stato della connessione:
Un utente consulta un data base per estrarre da esso una serie di informazioni. Si ipotizzi che la consultazione richieda che l'utente possegga un account che lo autorizzi a leggere i dati contenuti nel data base.
La pagina che presenta il form per autenticarsi ed accedere all'area riservata propone:
I dati che verranno inseriti nelle caselle di testo verranno inviati alla pagina index.php
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="../iTestStili.css">
</head>
<body>
<div id="intestazione">
Inserimento Account.
</div>
<div id="areaStampa">
<form action="index.php" method="post">
<table border="0">
<tr><td colspan=2><h1>Login</h1></td></tr>
<tr><td>Nome Utente:</td><td>
<input type="text" name="utente">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="Pw">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="invio" value="Accedi">
</td></tr>
</table>
</form>
</div>
</body>
</html>
La pressione del pulsante Submit provoca la trasmissione dei campi del form alla pagina index.php
Questa pagina contiene il test preliminare di verifica dell'esistenza di una variabile nell'array $_POST corrispondente al nome del tasto submit. Se questa variabile non esiste l'utente viene ridirezionato alla pagina di login.
Se la variabile esiste, lo script prosegue e consente all'utente di interrogare il data base
La seguente pagina consente ad un docente di consultare gli elenchi delle classi senza ripetere le sue credenziali
<?php
$conta=0;
La variabile $conta verrà calcolata solo dopo l'accesso al data base, per contare quanti utenti soddisfano alla condizione di ricerca. Viene, inizialmente, impostata a 0 per impedire l'errore che si potrebbe verificare se l'accesso al data base non dovesse avvenire.
if (isset($_POST['invio'])) {
$ut = $_POST['utente'];
$pass = $_POST['Pw'];
$Pw = md5($_POST['Pw']);
require("account.php");
$con = mysql_connect($Sweb,$utente,$pw);
if (!$con) {
die('Impossibile connettersi al Server Web: ' . mysql_error());
}
$nomeDB = "iTest";
mysql_select_db($nomeDB, $con);
$sql="select * from studenti where pass='".$Pw."' and utente='".$ut."' and Privilegi='docente'";
$esito = mysql_query($sql);
$conta=mysql_num_rows($esito);
}
if ($conta!=1) header('location:login.htm');
?>
Ci si assicura che si sia giunti in questa pagine tramite il form e non inserendo direttamente l'indirizzo nella barra del browser.
invio è il nome assegnato al pulsante submit del form di login.
Se la variabile esiste, si leggono i valori delle due caselle di testo e con esse si forma la query di selezione per verificare se l'utente, con quella password e con il grado di autorizzazione docente esiste nel data base.
Se l'utente non esiste, o se la variabile $conta conserva ancora il valore 0, allora il browser viene indirizzato alla pagina di login.
Se invece la query conferma che l'utente ha l'autorizzazione ad accedere, viene preparata l'intestazine della pagina web
<html>
<head><meta http-equiv=content-type content=text/html; charset=iso-8859-1 />
<title>Consultazione elenchi</title>
<link rel="stylesheet" type="text/css" href="../iTestStili.css" />
</head><body bgcolor="antiquewhite">
<div id="areaStampa">
<h1>ITI F. Giordani - Caserta</h1>
<h2>Area Docenti: gestione Test</h2>
<h1>Anno Scolastico 2011-2012</h1>
<ol>
<li><a href="">Consulta</a> Esito Test</li>
<li><a href="">Inserisci</a> un nuovo test</li>
<li><a href="">Elimina</a> un test</li>
<li><a href="">Modifica</a> un test</li>
<li>Per visualizzare l’elenco degli alunni selezionare la classe:</li>
<?php
Dopo l'intestazione della pagina viene inviato il form che richiama la stessa pagina index.php
All'interno del form vengono inseriti tre tag input con il type="hidden", quindi nascosti, e con i nomi e i valori già impostati
Si deduce subito che questa tecnica non è consigliabile perchè un utente, leggendo il codice html della pagina, scopre la password. La tecnica del form nascosto, per la sua semplicità, viene usata quando si vuole raffinare l'ambito della ricerca delle informazioni in un data base. È il caso, ad esempio, della ricerca di un'attività commerciale in una certa città: l'utente dopo aver ottenuto l'elenco degli alberghi, ad esempio, potrebbe chiedere che vengano ordinati per categoria o per altre caratteristiche.
echo '<table border="1">';
echo '<form name= "scelta" method="post" action="index.php">';
echo '<input type="hidden" name="utente" value="'.$ut.'" />';
echo '<input type="hidden" name="Pw" value="'.$pass.'" />';
echo '<input type="hidden" name="invio" value="login" />';
Dopo le caselle nascoste viene inserita una casella a discesa (select) il cui nome è Cls e che al verificarsi dell'evento onChange (selezione di una nuova voce in elenco) esegue la funzione submit del form
$evento='scelta.submit()';
print('<select name="Cls" onchange="'.$evento.'">');
print('<option value="0">Scegli</option>');
$interroga = "SELECT DISTINCT Classe from studenti where Privilegi='studente'";
$rSet = mysql_query($interroga);
while ($classe = mysql_fetch_array($rSet)) {
print('<option value=');
print($classe['Classe']);
print('>');
print($classe['Classe'].'</option>');
}
print('</select>');
print('</form>');
Per inserire le voci nell'elenco a discesa si interroga il data base per ottenere tutte le classi presenti in archivio. Per ogni classe si assegna il valore alla proprietà value dell'elemento option.
Al verificarsi dell'evento onChange verranno trasmessi, alla pagina index.php, le seguenti coppie (nome, valore):
Il primo test vale la prima volta che si accede a questa pagina, quando l'utente è stato riconosciuto e gli è stato preparato il form di scelta della classe da visualizzare. In quel caso, infatti, la variabile Cls non è stata ancora impostata
La condizione Cls=0 si verifica quando si seleziona la riga che riporta solo l'invito a selezionare una classe.
if (!isset($_POST['Cls'])) exit();
$Cls=$_POST['Cls'];
if ($Cls!=0) {
$interroga = "SELECT Cognome, Nome ";
$interroga .= "FROM studenti ";
$interroga .= "WHERE Classe='".$Cls."' ORDER BY Cognome;";
$rSet = mysql_query($interroga);
echo '<h1>Alunni della classe: '.$Cls.'</h1>';
echo '<table border=\"1\">';
echo '<tr><td>Nr</td><td>Cognome</td><td>Nome</td></tr>';
$N=1;
while ($titolo = mysql_fetch_array($rSet)) {
$Cognome = $titolo["Cognome"];
$Nome = $titolo['Nome'];
echo '<td>'.$N++.'</td>';
echo '<td>'.$Cognome.'</td>';
echo '<td>'.$Nome.'</td>';
echo '</tr>';
}
}
mysql_free_result ($rSet);
echo '</table>';
echo '</div>';
echo '<div id="Menu"><p>area riservata<br />Utente: '.$ut.'</p></div>';
?>
</li>
</body></html>