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):
2 | if(!in_array("", $_POST)) { |
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):
07 | function isValidForm($arrayForm, $exceptions=Array()) { |
09 | if(!is_array($exceptions) && trim($exceptions)) |
10 | $exceptions = explode(",", str_replace(" ", "", $exceptions)); |
15 | foreach($arrayForm as $key => $value) { |
17 | if(!(trim($value)) && !in_array($key, $exceptions)) { |
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:
2 | checkForm($_POST, array("name", "surname", "age")); |
4 | checkForm($_POST, "name, surname, age"); |
6 | 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.
1 | $_POST['name'] = "Mirko"; |
2 | $_POST['surname'] = "Pagliai"; |
L’esempio sopra riportato stamperà “Corretto”.
1 | $_POST['name'] = "Mirko"; |
L’esempio sopra riportato stamperà “Incorretto” (“surname” è vuoto!).
1 | $_POST['name'] = "Mirko"; |
5 | if(checkForm($_POST, "surname") |
L’esempio sopra riportato stamperà “Corretto” (“surname” è vuoto, ma è indicato tra le eccezioni!).
5 | if(checkForm($_POST, "surname") |
L’esempio sopra riportato stamperà “Incorretto” (“name” e “surname” sono entrambi vuoti, ma solo “surname” è indicato tra le eccezioni!).
5 | if(checkForm($_POST, "name, surname") |
Commenti
Posta un commento