15 IF / ELSE isset

Dato il seguente form html

<form action="elogin.php" method="post" name="login">&nbsp;
<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:

Email:
Password:

Login Sicuro
Sicurezza FTP

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

<input type=”checkbox” value=”login” name=”secure[]” />

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à:

$secure = isset ($_POST[‘secure’])   ?   $_POST[‘secure’]  : “” ;

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";