Controllo di dati inseriti da form html
Il controllo dei dati inseriti dall’utente può essere effettuato sia lato client attraverso javascript (al submit dell’utente) o lato server. In questo articolo vedremo come effettuare un controllo molto semplice sui dati attraverso PHP.
Supponiamo di avere un form di questo tipo:
<?php
if(isset($_SESSION['errore'])){
echo $_SESSION['errore'];
unset($_SESSION['errore']);
}
?>
<form name=”mioForm” action=”inoltra.php” method=”post” >
<table width=”420″ border=”0″ cellspacing=”2″ cellpadding=”2″ >
<tr>
<td><label for=”nome”>Nome*</label></td>
<td><input type=”text” name=”nome” id=”nome” size=”20″ maxlength=”40″ value=”<?php
if(isset($_SESSION['nome'])){
echo $_SESSION['nome'];
unset($_SESSION['nome']);
}
?>”/></td>
</tr>
<tr>
<td><label for=”password”>Password*</label></td>
<td><input type=”password” name=”password” id=”password” size=”20″ maxlength=”40″ value=”<?php
if(isset($_SESSION['password'])){
echo $_SESSION['password'];
unset($_SESSION['password']);
}
?>”/></td>
</tr><input type=”submit” value=”Invia” />
</form>
Per adesso commentiamo solo il fatto che il form è composto da 2 campi: nome e password. I dati verranno passati alla pagina inoltra.php tramite il metodo POST; tale pagina effettueremo il controllo, vediamo una parte di codice:
<?php session_start();
if (isset($_POST['nome']) && $_POST['nome']!=”"){
$_SESSION['nome']=(string)$_POST['nome'];
$nome=$_SESSION['nome'];
}else{
$_SESSION['errore']=’<p><strong>ERRORE: completare il campo “Nome”</strong></p>’;
//ricavo l’URL della pagina di provenienza
$url = $_SERVER['HTTP_REFERER'];
//effettuo il reindirizzamento
header(”Location: $url”);
break;
}
if (isset($_POST['password']) && strlen($_POST['password'])<4){
$_SESSION['password']=(string)$_POST['password'];
$password=$_SESSION['password'];
}else{
$_SESSION['errore']=’<p><strong>ERRORE: il campo “Password” deve essere di almeno 4 caratteri</strong></p>’;
$url = $_SERVER['HTTP_REFERER'];
header(”Location: $url”);
break;
} ?>
Il codice è molto semplice. Con un if controlliamo che il dato passato sia settato e non sia un campo vuoto, se la condizione è verificata allora inserisco il valore del dato passato sia in una variabile si sessione che in una variabile locale (è una scelta soggettiva, io preferisco usare le variabili di sessione solo tra pagine e poi utilizzare variabili locali per tutti gli altri scopi); il controllo su una variabile vuota si può anche fare tramite la funzione empty(). Per quanto riguarda il campo password ho effettuato il controllo sulla lunghezza della stessa che deve, in questo caso, essere formata da almeno 4 caratteri.
Se almeno un controllo non va a buon fine si inizializza un’altra variabile di sessione riportante l’errore riscontrato, si richiama l’indirizzo della pagina di provenienza (molto utile se il form è inserito in più di una url), si fa il redirect alla pagina suddetta e infine si blocca l’esecuzione dello script. Senza l’istruzione break verrà fatto il reindirizzamento dopo che lo script sarà eseguito completamente, quindi verranno eseguite eventuali query o altre operazioni su dati incompleti o mancanti.
Ritorniamo alla pagina contenente il form. Se è la prima volta che si arriva al form il codice php non contribuirà a dare nessun risultato perché le variabili di sessione non sono ancora state inizializzate. Nel caso in cui il form sia già stato compilato ma in maniera incompleta, la prima operazione php è la visualizzazione dell’errore riscontrato prima del form così da avvisare l’utente dell’errore. Successivamente le sessioni vengono utilizzate per immettere nei campi i valori precedentemente immessi, velocizzando quindi, in caso di errore, la compilazione dei campi da parte dell’utente. Alla fine di ogni operazione viene de-allocata la variabile di sessione per evitare che essa sia visualizzabile ogni volta all’arrivo del form dello stesso utente.
Naturalmente il controllo visto ora è un controllo minimale che tende solo a verificare che l’utente abbia inserito dei dati e che essi rispettino una certa lunghezza; controlli più estesi si potrebbero fare sul contenuto del campo attraverso le espressioni regolari. In un altro articolo vedremo come usare le espressioni regolari e come modificare il contenuto dei dati sia per motivi di sicurezza che per evitare errori nell’utilizzo del database.
gennaio 20th, 2010 at 15:31
Giò, tutto chiaro, solo due appunti:
1) mai innestare i tag HTML nel codice PHP;
2) conviene utilizzare il meno possibile le variabili di sessione. Per far propagare l’errore avrei preferito utilizzare un campo hidden da propagare mediante un semplice POST.
Ciao
gennaio 21st, 2010 at 19:52
Sempre utile come al solito