Nonostante potrebbe sembrare una banalità per i più esperti del settore, vi illustro una funzione Php da me scritta e utile per verificare che i campi di un form siano stati riempiti.
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):
//Verifica che tutti i campi siano stato compilati, ovvero che nessun elemento dell'array abbia un valore vuoto if(!in_array("", $_POST)) { //Tutti i campi sono stati compilati, fai qualcosa // ... } else { //Almeno un campo è vuoto, fai qualcosa // ... }
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):
/** * Verifica la validità dei campi di un form * @param array $arrayForm array $_POST o $_GET * @param string|array $exceptions eccezioni (array o separate da virgola) * @return boolean validità del form */ function isValidForm($arrayForm, $exceptions=Array()) { //Trasforma la lista delle eccezioni in un array, se è stata passata come stringa if(!is_array($exceptions) && trim($exceptions)) $exceptions = explode(",", str_replace(" ", "", $exceptions)); //Imposta una variabile di controllo, indica la validità dei dati //Se verrà trovato un elemento vuoto, verrà cambiata in FALSE $form = TRUE; //Cicla il contenuto dell'array foreach($arrayForm as $key => $value) { //Verifica se l'elemento è vuoto e se non è tra le eccezioni if(!(trim($value)) && !in_array($key, $exceptions)) { $form = FALSE; //Imposta la variabile di controllo su FALSE break; } } return($form); }
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:
//Le eccezioni vengono passate come array: ogni eccezione è un elemento dell'array checkForm($_POST, array("name", "surname", "age")); //Le eccezioni vengono passate come una stringa, divise da una virgola più uno spazio checkForm($_POST, "name, surname, age"); //Le eccezioni vengono passate come una stringa, divise solo da una virgola (senza spazio) checkForm($_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.
$_POST['name'] = "Mirko"; $_POST['surname'] = "Pagliai"; $_POST['age'] = "23"; if(checkForm($_POST) print "Corretto"; else print "Incorretto";
L’esempio sopra riportato stamperà “Corretto”.
$_POST['name'] = "Mirko"; $_POST['surname'] = ""; $_POST['age'] = "23"; if(checkForm($_POST) print "Corretto"; else print "Incorretto";
L’esempio sopra riportato stamperà “Incorretto” (“surname” è vuoto!).
$_POST['name'] = "Mirko"; $_POST['surname'] = ""; $_POST['age'] = "23"; if(checkForm($_POST, "surname") print "Corretto"; else print "Incorretto";
L’esempio sopra riportato stamperà “Corretto” (“surname” è vuoto, ma è indicato tra le eccezioni!).
$_POST['name'] = ""; $_POST['surname'] = ""; $_POST['age'] = "23"; if(checkForm($_POST, "surname") print "Corretto"; else print "Incorretto";
L’esempio sopra riportato stamperà “Incorretto” (“name” e “surname” sono entrambi vuoti, ma solo “surname” è indicato tra le eccezioni!).
$_POST['name'] = ""; $_POST['surname'] = ""; $_POST['age'] = "23"; if(checkForm($_POST, "name, surname") print "Corretto"; else print "Incorretto";
L’esempio sopra riportato stamperà “Corretto” (“name” e “surname” sono entrambi vuoti, ma solo entrambi indicati tra le eccezioni!).