Validazione dei dati in PHP – Parte 1 di 2

Posted on febbraio 20, 2009
Filed Under Form Email | 2 Comments

La validazione dei dati e’ parte integrante del lavoro di sviluppo con i form; non solo per gli svariati problemi di sicurezza ma anche perche’ potrebbe compromottere il funzionamento. Il tutorial sara’ incentrato sull’uso della funzione filter_var per rimuovere i caratteri illegali e validare i dati.
Un classico esempio e’ un form in cui un campo e’ l’indicazione dell’Home Page dove in molti potrebbero inserire: “Non presente” che non e’ sicuramente un indirizzo Web valido quindi ha senso utilizzarlo poi come link.
Utilizzare le espressioni regolari e/o filtrare i dati manualmente richiede molto tempo ed e’ sempre a rischio di errori ma dalla versione 5.2 di PHP la funzione filter_var puo’ darci un valido aiuto.

La funzione rimuove i caratteri illegali e valida i dati nel campo in maniera corretta questo per evitare anche errori nel copia ed incolla dei dati.
La funzione prende come parametri la variabile da controllare ed il tipo di controllo da utilizzare.
Se ad esempio volessimo rimuovere i tag HTML da una stringa ecco un esempio:
$testo = “<b>Testo in Bold</b>”;
$testoPulito = filter_var($string,FILTER_SANITIZE_STRING);
echo($testoPulito); // Testo in Bold

Se volessimo validare un IP questo un esempio:
$ip = “192.168.0.1”;
$ipValido = filter_var($ip, FILTER_VALIDATE_IP);
// $ipValido e’ TRUE

$ip = “192.168.0.1.1.1”;
$ipValido = filter_var($ip, FILTER_VALIDATE_IP);
// $ipValido e’ FALSE

Nel caso in cui volessimo validare EMAIL ed Home Page provenienti da un FORM possiamo utilizzare il seguente esempio:
<?php
if (isset($_POST[‘email’])) {
echo filter_var($_POST[‘email’], FILTER_SANITIZE_EMAIL);
echo “<br/><br/>”;
}

if (isset($_POST[‘url’])) {
echo filter_var($_POST[‘url’], FILTER_SANITIZE_URL);
echo “<br/><br/>”;
}
?>

<form name=”modulo” method=”post”>
Email: <br/>
<input type=”text” name=”email” value=”<?php echo $_POST[‘email’]; ?>” size=”50″/> <br/><br/>
Home Page: <br/>
<input type=”text” name=”url” value=”<?php echo $_POST[‘url’]; ?>” size=”50″ /> <br/>
<br/>
<input type=”submit” />
</form>

Se ad esempio inserissi i seguenti valori:
Email: info)(@freescriptphp\\\\.\\\com
Homa Page: http://www.free&&scriptphp.com

Otterrei come valori:
Email: info@freescriptphp.com
Homa Page: http://www.freescriptphp.com

In tal caso il dato viene ripulito ma non validato quindi se noi avessimo inserito i seguenti campi:
Email: info)(@freescriptphp\\\\
Homa Page: http://www.free&&scriptphp

Avremo ottenuto la stringa ripulita ma non validarla. Per validare la stringa ecco nel seguito l’esempio in PHP da utilizzare:
<?php
if (isset($_POST[‘email’])) {
$email = filter_var($_POST[‘email’], FILTER_SANITIZE_EMAIL);
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo “$email e’ un indirizzo mail valido<br/><br/>”;
} else {
echo “$email e’ un indirizzo mail <strong>non valido</strong><br/><br/>”;
}
}

if (isset($_POST[‘url’])) {
$url = filter_var($_POST[‘url’], FILTER_SANITIZE_URL);
if (filter_var($url, FILTER_VALIDATE_URL)) {
echo “$url e’ un URL valido.<br/><br/>”;
} else {
echo “$url e’ un URL <strong>non valido</strong><br/><br/>”;
}
}
?>
<form name=”modulo” method=”post”>
Email: <br/>
<input type=”text” name=”email” value=”<?php echo $_POST[‘email’]; ?>” size=”50″/> <br/><br/>
Home Page: <br/>
<input type=”text” name=”url” value=”<?php echo $_POST[‘url’]; ?>” size=”50″ /> <br/>
<br/>
<input type=”submit” />
</form>

In tal caso i dati vengono ripuliti e validati quindi inserendo:
Email: info)(@freescriptphp\\\\<br />
Homa Page: http://www.free&&scriptphp

Otterremo che l’email e l’indirizzo Web non sono validi anche se ripuliti.

Nella prossima parte vedremo come realizzare un form completo con validazione dei dati ed invio di mail.

Others Script adv

2 Responses to “Validazione dei dati in PHP – Parte 1 di 2”

  1. antonio on maggio 12th, 2009 06:31

    grazie mille per i suggerimenti

  2. leofire on agosto 1st, 2009 15:49

    Ciao Antonio…si fa il possibile; se hai degli script interessanti da postare ben vengano!

Leave a Reply