back to top

Gestire le checkbox con PHP

Una delle questioni in cui mi capita di imbattermi di frequente sui forum tecnici ai quali partecipo è legata alla gestione dei checkbox con PHP. In realtà si tratta di una tematica di base… ma a giudicare dalla frequenza in cui mi capita di imbattermi in discussioni sull’argomento non posso non pensare che sia necessario fare un po’ di chiarezza.

Quello che mi propongo di fare, quindi, è di mettere la parola fine sulla questione offrendo una trattazione il più possibile chiara ed esaustiva circa l’utilizzo dei controlli di tipo checkbox per effettuare scelte singole e multiple all’interno di un form gestito con PHP.

I checkbox

Come tutti sappiamo i checkbox sono un tipo di controllo previsto dall’HTML per la gestione dei moduli (form). Questo controllo è utilizzato, normalmente, per effettuare delle scelte di tipo SI/NO.

Un esempio tipico di utilizzo dei checkbox è per l’accettazione (o meno) di un regolamento o per l’attivazione (o meno) di un servizio opzionale; tuttavia il checkbox può essere utilizzato anche per effettuare delle scelte multiple all’interno di un elenco di voci come accade, ad esempio, quando ci viene chiesto di selezionare un elenco di servizi opzionali di nostro interesse all’interno dell’elenco di quelli disponibili.

Se l’utilizzo dei checkbox per un singolo valore può essere banale, sicuramente un po’ più complesso è l’utilizzo di questo controllo per la selezione di scelte multiple. Tuttavia andiamo con ordine e vediamo, per prima cosa, come recuperare il valore di un checkbox.

Recuperare il valore di un checkbox con PHP

Vediamo un esempio di un semplicissimo modulo in cui l’utente deve checkare in caso di accettazione del contratto:

<form method="post" action="modulo.php">
  <input type="checkbox" name="contratto" value="si"/> Accetto il contratto<br/><br/>
  <input type="submit" value="Invia il modulo"/>
</form>

Il nostro modulo invia i dati con metodo POST al file "modulo.php" all’interno del quale dovremo recuperare il valore del nostro checkbox. Normalmente per recuperare il valore di un campo input facciamo qualcosa del genere:

$contratto = $_POST['contratto'];

Nel caso dei checkbox, tuttavia, una simile sintassi potrebbe non esere corretta. Nel momento in cui il nostro checkbox non è stato spuntato, infatti, la nostra applicazione restituirà un E_NOTICE in quanto l’indice "contratto" non sarà presente all’interno dell’array $_POST.

Una soluzione corretta, pertanto, sarebbe:

$contratto = isset($_POST['contratto']) ? $_POST['contratto'] : 'no';

In questo modo non avremo nessun E_NOTICE nel nostro log e la nostra variabile $contratto avrà sempre un valore: "si" nel caso in cui il checkbox sia stato spuntato, "no" in caso contrario.

Recuperare scelte multiple attraverso i checkbox e PHP

Supponiamo ora di voler creare un modulo in cui l’utente può selezionare, all’interno di un set di opzioni prestabile, i propri interessi. Una simile necessità può essere gestita, appunto, attraverso i checkbox.

L’errore più comune è di predisporre il modulo in questa maniera:

<form method="post" action="modulo.php">
  <h3>Quali sono i tuoi interessi?</h3>
  <input type="checkbox" name="interessi" value="cinema"/> Cinema<br/><br/>
  <input type="checkbox" name="interessi" value="musica"/> Musica<br/><br/>
  <input type="checkbox" name="interessi" value="sport"/> Sport<br/><br/>
  <input type="submit" value="Invia il modulo"/>
</form>

In questo modo il modulo non riesce a trasmettere una molteplicità di valori ma uno solo; questo significa che se l’utente seleziona più valori l’appliazione (PHP) di destinazione raccoglierà unicamente il valore dell’ultimo checkbox. Per fare un esempio: se l’utente seleziona le voci "Cinema" e "Musica" l’applicativo PHP (supponendo che abbia lo stesso semplice codice visto per l’esempio precedente) assegnerà alla variabile $interessi il valore "musica" (cioè il valore dell’ultimo checkbox spuntato).

Ma come utilizzare i checkbox per consentire la selezione di scelte multiple? La cosa più importante da fare consiste nel modificare il markup del modulo trasformando il valore dell’attributo name da:

name="interessi"

in

name="interessi[]"

Il codice completo del nostro modulo, quindi, sarà:

<form method="post" action="modulo.php">
  <h3>Quali sono i tuoi interessi?</h3>
  <input type="checkbox" name="interessi[]" value="cinema"/> Cinema<br/><br/>
  <input type="checkbox" name="interessi[]" value="musica"/> Musica<br/><br/>
  <input type="checkbox" name="interessi[]" value="sport"/> Sport<br/><br/>
  <input type="submit" value="Invia il modulo"/>
</form>

A questo punto, però, dobbiamo fare una modifica anche nel file PHP di destinazione. Ciò che "arriverà" al nostro file PHP, infatti, non sarà più un semplice valore ma un vettore contenente una molteplicità di valori. Vediamo un esempio di codice PHP per gestire la selezione di scelte multiple tramite checkbox:

$interessi = isset($_POST['interessi']) ? $_POST['interessi'] : array();
foreach($interessi as $interesse) {
  echo $interesse . '<br/>';';  
}

Come potete vedere la variabile $interessi è un array e come tale viene gestita (nell’esempio, molto banalmente, ci limitiamo a ciclarne il contenuto per stamparne a video i vari valori).

Vediamo ora un esempio completo con qualche controllo a corredo. Supponiamo che il nostro utente debba selezionare almeno un interesse e non possa selezionarne più di due:

$interessi = isset($_POST['interessi']) ? $_POST['interessi'] : array();

if (!count($interessi)) echo 'Errore! Devi selezionare almeno un interesse!';
elseif (count($interessi) > 2) echo 'Errore! Non puoi selezionare più di due interessi!';
else {
  echo 'Complimenti! Questi gli interessi che hai selezionato:<ul>';
  foreach($interessi as $interesse) {
    echo '<li>' . $interesse . '</li>';  
  }
  echo '</ul>';
}

Si noti, per finire, che il medesimo risultato funzionale avrebbe potuto raggiungersi mediante l’utilizzo di una selecbox modificando il codice HTML del nostro esempio in questo modo:

<form method="post" action="prova.php">
  <h3>Quali sono i tuoi interessi?</h3>
  <select name="interessi[]" multiple="true">
    <option value="cinema">Cinema</option>
    <option value="musica">Musica</option>
    <option value="sport">Sport</option>
  </select>
  <input type="submit" value="Invia il modulo"/>
</form>

Anche in questo caso si noti come è stato settato l’attributo name del tag <select> e l’utilizzo dell’attributo multiple che consente di abilitare la selectbox alla selezione di scelte multiple.

Altri contenuti interessanti

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Cannot modify header information – headers already sent: come risolvere l’errore PHP

L'errore di PHP cannot modify header information - headers...

Ricavare l’estensione di un file con PHP

Quando si lavora con i file in un'applicazione web,...

GD Library: creazione, manipolazione e ridimensionamento immagini con PHP

Le librerie GD (o GD Library), sono componenti fondamentali...

PHP: impostare il fuso orario italiano

Le tue pagine PHP non mostrano l’orario corretto? Probabilmente...

5 script PHP per gestire BBCode

A volte può aversi l'esigenza di dover offrire agli...
Pubblicità