Verificare un form con Php

In verità già l’ottima in_array (documentazione) svolge un ottimo lavoro, se utilizzata più o meno così (supponiamo che sia già stato inviato un form con metodo “post” e che quindi esista l’array super-globale $_POST):
1//Verifica che tutti i campi siano stato compilati, ovvero che nessun elemento dell'array abbia un valore vuoto
2if(!in_array("", $_POST)) {
3//Tutti i campi sono stati compilati, fai qualcosa
4// ...
5}
6else {
7//Almeno un campo è vuoto, fai qualcosa
8// ...
9}
Il problema è che con in_array vengono verificati indistintamente tutti gli elementi dell’array, quindi è utilizzabile solo se il nostro form deve essere totalmente compilato. In più, non c’è modo di venire a conoscenza – tramite questa funzione – degli elementi vuoti e quindi dei campi non compilati.
Da qui la mia funzione, che prevede delle eccezioni al controllo (e che può essere facilmente estesa per restituire anche i nomi degli elementi/campi vuoti, se ce ne sono – magari vi illustrerò io stesso un esempio fra qualche giorno):
01/**
02* Verifica la validità dei campi di un form
03* @param array $arrayForm array $_POST o $_GET
04* @param string|array $exceptions eccezioni (array o separate da virgola)
05* @return boolean validità del form
06*/
07function isValidForm($arrayForm, $exceptions=Array()) {
08//Trasforma la lista delle eccezioni in un array, se è stata passata come stringa
09if(!is_array($exceptions) && trim($exceptions))
10$exceptions = explode(",", str_replace(" ", "", $exceptions));
11//Imposta una variabile di controllo, indica la validità dei dati
12//Se verrà trovato un elemento vuoto, verrà cambiata in FALSE
13$form = TRUE;
14//Cicla il contenuto dell'array
15foreach($arrayForm as $key => $value) {
16//Verifica se l'elemento è vuoto e se non è tra le eccezioni
17if(!(trim($value)) && !in_array($key, $exceptions)) {
18$form = FALSE; //Imposta la variabile di controllo su FALSE
19break;
20}
21}
22return($form);
23}
La funzione accetta due parametri: $arrayForm (obbligatorio) è l’array con gli elementi da verificare, quindi generalmente gli passeremo $_POST o $_GET, mentre $exceptions è la lista delle chiavi da escludere sul controllo, e gli si può passare o un array (dove ogni chiave da escludere è un elemento dell’array) o una stringa (dove ogni chiave è divisa da una virgola, volendo anche con spazio).
Commento velocemente il codice:
  • alle righe 9 e 10 la lista delle eccezioni, se passate come stringa, vengono trasformate in un array;
  • alla riga 13 viene impostata la variabile $form su TRUE. Questa è una variabile di controllo e sarà la variabile restituita dalla funzione. In altri termini, indicherà – alla fine della funzione – se il form per il quale abbiamo richiesto il controllo è valido o meno. Per questo motivo viene inizialmente impostata su TRUE; poi, nel corso dei controlli, se un elemento del form risulterà vuoto (riga 17) verrà modificato in FALSE (riga 18), per essere infine restituito alla fine della funzione (riga 22);
  • alla riga 15 cicliamo il contenuto dell’array con un comunissimo ciclo foreach;
  • alla riga 17 effettuiamo il controllo vero e proprio. Ovvero controlliamo che l’elemento attuale non sia vuoto e che contemporaneamente la sua chiave non sia indicata tra le eccezioni (in altri termini, l’if ha esito positivo se l’elemento non è vuoto o se, alternativamente, è una delle eccezioni che abbiamo richiesto);
  • se il precedente controllo ha avuto esito negativo (e quindi un elemento è vuoto e contemporaneamente non è tra le eccezioni), alla riga 18 cambiamo il valore della variabile di controllo in FALSE e alla riga 19 interrompiamo il ciclo con break (non è necessario continuare il ciclo e controllare anche gli altri elementi, a meno che non si voglia modificare la funzione affinché restituisca anche i nomi degli elementi/campi lasciati vuoti);
  • alla riga 22 restituiamo la variabile di controllo, che indica – come detto più volte – la validità del form. Questa era stata inizialmente impostata su TRUE: se è stata trovato un elemento vuoto, sarà invece stata modificata in FALSE, altrimenti avrà mantenuto il suo valore originale.
Supponiamo di avere tre campi: “name”, “surname” e “age”. Come già spiegato, volendo impostare questi campi tra le eccezioni, le seguenti tre sintassi sono equipollenti:
1//Le eccezioni vengono passate come array: ogni eccezione è un elemento dell'array
2checkForm($_POST, array("name", "surname", "age"));
3//Le eccezioni vengono passate come una stringa, divise da una virgola più uno spazio
4checkForm($_POST, "name, surname, age");
5//Le eccezioni vengono passate come una stringa, divise solo da una virgola (senza spazio)
6checkForm($_POST, "name,surname,age");
In tutti e tre i casi il funzionamento sarà lo stesso.
Vediamo ora qualche applicazione pratica. In un caso reale avremo un vero e proprio form, qui invece mi limiterò a impostare manualmente e in chiaro alcuni elementi di $_POST (le chiavi/campi saranno ancora “name”, “surname” e “age”), per rendere perfettamente chiaro il funzionamento.
1$_POST['name'] = "Mirko";
2$_POST['surname'] = "Pagliai";
3$_POST['age'] = "23";
4
5if(checkForm($_POST)
6echo "Corretto";
7else
8echo "Incorretto";
L’esempio sopra riportato stamperà “Corretto”.
1$_POST['name'] = "Mirko";
2$_POST['surname'] = "";
3$_POST['age'] = "23";
4
5if(checkForm($_POST)
6echo "Corretto";
7else
8echo "Incorretto";
L’esempio sopra riportato stamperà “Incorretto” (“surname” è vuoto!).
1$_POST['name'] = "Mirko";
2$_POST['surname'] = "";
3$_POST['age'] = "23";
4
5if(checkForm($_POST, "surname")
6echo "Corretto";
7else
8echo "Incorretto";
L’esempio sopra riportato stamperà “Corretto” (“surname” è vuoto, ma è indicato tra le eccezioni!).
1$_POST['name'] = "";
2$_POST['surname'] = "";
3$_POST['age'] = "23";
4
5if(checkForm($_POST, "surname")
6echo "Corretto";
7else
8echo "Incorretto";
L’esempio sopra riportato stamperà “Incorretto” (“name” e “surname” sono entrambi vuoti, ma solo “surname” è indicato tra le eccezioni!).
1$_POST['name'] = "";
2$_POST['surname'] = "";
3$_POST['age'] = "23";
4
5if(checkForm($_POST, "name, surname")
6echo "Corretto";
7else
8echo "Incorretto";

fonte notizia: Mirko Pagliai http://www.mirkopagliai.it/verificare-un-form-con-php/

Commenti