15 IF / ELSE isset
Dato il seguente form html
<form action="elogin.php" method="post" name="login"> <table> <tbody> <tr> <td>Email:</td> <td><input name="mail" type="text" /></td> </tr> <tr> <td>Password:</td> <td><input name="pass" type="password" /></td> </tr> </tbody> </table> Login Sicuro <input name="secure[]" type="checkbox" value="login" /> Sicurezza FTP <input name="secure[]" type="checkbox" value="ftp" /> <input type="submit" value="Invia" /> <input type="reset" /> </form>
Risultato:
Ammettiamo di voler fare un controllo se è stato checkato il login sicuro o la sicurezza FTP,
$mail=$_POST['mail']; $pass=$_POST['pass']; $secure=$_POST['secure']; if ($mail=="") echo "Non puoi lasciare vuoto"; if ($secure=="") echo "Non hai messo il secure login"
Se flagghiamo entrambe le caselline, a $secure viene assegnato un valore (in questo caso una coppia di 2 valori). Il problema nasce se non flagghiamo i checkbox.
In questo caso, il check box Login Sicuro contiene un array di valori :
Login Sicuro
secure[] è la tipica struttura di un array, quindi se selezionato non crea problemi perché l’array genera un valore, se non checkato crea una nota di errore in quanto l’array di valori secure[] generato dai checkbox (come anche dai radio button) non è definito (non esiste). L’errore generato, se abilitato in php, è Notice: Undefined index.
Se vogliamo controllare che il valore sia settato dobbiamo usare la funzione isset che serve per controllare se un valore è stato settato o inizializzato.
if ( isset ($_POST['secure']) ) // se è stato settato allora eseguo $secure=$_POST['secure']; else $secure=""; // altrimenti lo setto a valore zero
Tutto questo precedente blocco di codice (controllo e assegnazione) può essere riscritto in una forma contratta e più chiara a cui è bene abituarsi per maggiore leggibilità:
Spegazione: la variabile $secure = (il nostro test) isset ($_POST[‘secure’] ) ? questa parte viene valutata se è settato, il suo valore viene assegnato a $_POST[‘secure’], altrimenti (else simboleggiato coi : ) gli assegno un valore, in questo caso zero “”
Una buona procedura, in questo caso, è legare i controlli con un else. effettuare un controllo :
if ($mail=="") echo "Non puoi lasciare vuoto";
Se il campo mail viene lasciato vuoto, parte il comando echo, non mi interessa andare a fare il controllo sul login sicuro.
elseif ($secure=="") echo "Non hai messo il secure login"
Se invece il campo mail viene compilato, quindi il primo controllo if è soddisfatto, allora con else effettuo il successivo controllo su secure.
Trabocchetto
if ($mail != "") // != sta per diverso if ($mail=="admin@sito.com") echo "Benvenuto Boss"; else echo "Email mancante";
In questo se il campo mail viene compilato stamperà comunque il messaggio echo Email mancante, perché l’else, viene associato all’if a lui più vicino.
Per farlo basta isolare il secondo if
if ($mail != "") { if ($mail=="admin@sito.com") echo "Benvenuto Boss"; } else echo "Email mancante";
Un commento su “15 IF / ELSE isset”