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