/ //

Validazione dei dati in PHP - GM Multimedia

Vai ai contenuti

Menu principale:

Validazione dei dati in PHP

Guida PHP



        In questo capitolo descriveremo gli strumenti di PHP per validare e/o "ripulire" dati attraverso la funzione filter_var().
         Esistono due macrotipi di filtri che possiamo utilizzare con essa:
  1. validation: verificano che un dato sia o meno valido;
  2. sanitizazion: modificano il dato per renderlo valido.


Validation dei dati
         La validazione di un indirizzo email è probabilmente il caso più comune di utilizzo di filter_var():
				$emailValida = "test@gmail.com";
				$emailNonValida = "invalid.email";
				if (filter_var($emailValida, FILTER_VALIDATE_EMAIL)) {
				    echo "$emailValida valida";
				}
				if (filter_var($emailNonValida, FILTER_VALIDATE_EMAIL)) {
				    echo "$emailNonValida valida";
				}
         Il primo if stamperà la stringa “email valida”; nel secondo caso, dato che abbiamo utilizzato una stringa che contiene una mail non valida, non verrà stampato nulla.
         Abbiamo visto che filter_var() prende in ingresso due parametri:
  1. la variabile da validare;
  2. il filtro per verificare se il dato è valido.
e restituisce come valore un booleano.
         Vediamo quali sono i filtri a disposizione:
FILTRODESCRIZIONE
FILTER_VALIDATE_BOOLEAN
Restituisce true per i valori "1", "true", "on" e "yes".
FILTER_VALIDATE_EMAIL
Verifica la validità di una mail.
FILTER_VALIDATE_FLOAT
Verifica che una variabile sia un float valido.
FILTER_VALIDATE_INT
Verifica che la variabile sia un intero valido. È possibile anche verificare che sia compreso in un range.
FILTER_VALIDATE_IP
Verifica la validità di un IP.
FILTER_VALIDATE_REGEXP
Verifica che la variabile sia valida per un’espressione regolare.
FILTER_VALIDATE_URL
Verifica la validità di un URL
         Abbiamo detto che in FILTER_VALIDATE_INT è possibile definire un range di interi in cui la variabile dovrebbe essere compresa. Vediamo qualche esempio di utilizzo creando un array di numeri e passandoli ad una funzione che ne verifica la validità. Supponiamo inoltre che un valore sia valido se intero e compreso tra 1 e 5:
				$valori = [
				    '1',
				    '-1',
				    '2.0',
				    'asd',
				    '0',
				    '5',
				    '10',
				];
				function validaIntero($valore) {
				    $options = [
				        'options' => [
				            'min_range' => 1,
				           'max_range' => 5,
				        ]
				    ];
				    if (filter_var($valore, FILTER_VALIDATE_INT, $options)) {
				        echo "Il valore $valore è valido\n";
				    } else {
				        echo "Il valore $valore non è valido\n";
				    }
				}
				foreach($valori as $valore) {
				    validaIntero($valore);
				}
         Il risultato che otterremo è:
				Il valore 1 è valido
				Il valore -1 non è valido
				Il valore 2.0 non è valido
				Il valore asd non è valido
				Il valore 0 non è valido
				Il valore 5 è valido
				Il valore 10 non è valido


Sanitization dei dati
         Oltre che validare un dato possiamo anche modificarlo affinché il PHP provi a renderlo valido:

				$email1 = "test@gmail.com";
				$email2 = "(test@gmail.com)";
				$email3 = "testATgmail.com";
				function sanitizzaEmail($email) {
				    $emailSanitizzata = filter_var($email, FILTER_SANITIZE_EMAIL);
				    $emailValida = filter_var($emailSanitizzata, FILTER_VALIDATE_EMAIL);
				    echo "Indirizzo email: $email\n";
				    echo "Indirizzo email sanitizzato: $emailSanitizzata\n";
				    echo "Email valida: " . ($emailValida ? 'SI' : 'NO') . "\n\n";
				}
				sanitizzaEmail($email1);
				sanitizzaEmail($email2);
				sanitizzaEmail($email3);
				
				//Risultato:
				
				Indirizzo email: test@gmail.com
				Indirizzo email sanitizzato: test@gmail.com
				Email valida: SI
				Indirizzo email: (test@gmail.com)
				Indirizzo email sanitizzato: test@gmail.com
				Email valida: SI
				Indirizzo email: testATgmail.com
				Indirizzo email sanitizzato: testATgmail.com
				Email valida: NO
         Nel primo caso avevamo una mail valida quindi era facile aspettarsi un risultato positivo. Nel secondo PHP ha provato a modificare il valore e ha restituito un’email valida. L'ultimo caso non ha avuto risultato positivo neppure dopo aver applicato FILTER_SANITIZE_EMAIL.
         Come per la validazione, anche la sanitizzazione dei dati ha diversi filtri:

FILTRODESCRIZIONE
FILTER_SANITIZE_EMAIL
Rimuove tutti i caratteri eccetto lettere, numeri e !#$%&'*+-/=?^_`{
FILTER_SANITIZE_ENCODED
Codifica un URL.
FILTER_SANITIZE_MAGIC_QUOTES
Rimuove tutti i caratteri eccetto numeri e i simboli + e –
FILTER_SANITIZE_NUMBER_FLOAT
Rimuove tutti i caretteri eccetto i simboli + e –
FILTER_SANITIZE_NUMBER_INT
Escape HTML dei caratteri '"<>&
FILTER_SANITIZE_SPECIAL_CHARS
Equivale a richiamare la funzione htmlspecialchars() con il parametro ENT_QUOTES.
FILTER_SANITIZE_STRING
Rimuove tutti i tags, opzionalmente codifica i caratteri speciali.
FILTER_SANITIZE_STRIPPED
Alias del filtro FILTER_SANITIZE_STRING.
FILTER_SANITIZE_URL
Rimuove tutti i caratteri eccetto lettere, numeri e $-_.+!*'(),{}
FILTER_UNSAFE_RAW
Non compie operazioni, opzionalmente rimuove o codifica caratteri speciali.
         Nel caso avessimo bisogno di passare un URL come parametro GET di una richiesta HTTP abbiamo bisogno di codificarlo così da non creare problemi nell'interpretazione dell’URL. Sui dettagli riguardo al metodo GET e alle richieste HTTP in generale ci occuperemo nella prossima lezione, per ora limitiamoci a dire solo che un parametro GET è un parametro che possiamo passare ad una URL. Ad esempio:
				http://localhost/test/?redirect=<>
         Per passare come parametro GET un URL su cui fare il redirect abbiamo bisogno di un encoding usando il filtro
				FILTER_SANITIZE_ENCODED:
				$url = "http://localhost/test/?firstName=Simone&lastName=D'Amico";
				echo filter_var($url, FILTER_SANITIZE_ENCODED);
che restituirà:
				http%3A%2F%2Flocalhost%2Ftest%2F%3FfirstName%3DSimone%26lastName%3DD%27Amico
         A questo punto potremmo salvare il valore in una variabile da appendere alla stringa del redirect.
Visitatori online:
Sei il nostro visitatore n°:
© - Copyright 2015. - Tutti i diritti riservati - G.M. Multimedia
Torna ai contenuti | Torna al menu