Come gestire le Checkbox con PHP

PHP Script

Come gestire le Checkbox con PHP

17

In questo articolo vedremo come gestire le CheckBox di HTML, sfruttando PHP.

Intanto, avremo bisogno di una pagina di esempio:

checkbox.html:

<form action="gestire-checkbox.php" method="post">
Ti piace InformaticaLab? <input type="checkbox" name="piace" value="si" />
<input type="submit" value="Invia!">
</form>

Vediamo adesso la pagina che riceverà i dati, ovvero “gestire-checkbox.php“:

<?php
if($_POST['piace'] == "si")
{
    echo "Sono la tua fan numero uno!"; //Cit. Misery non deve morire 😀
}
else
{
    echo "Vai a farti un giro.";
}
?>

I dati della checkbox inviati dal form possono essere recuperati utilizzando l’array $_POST, da cui estrapoleremo il dato corrispondente al nome della checkbox che restituirà Yes nel caso in cui la checkbox sia stata selezionata.

Ovviamente, restituisce “si” perchè è il valore che abbiamo associato al checkbox nel form utilizzando

value="yes"

.

Gestire Gruppi di CheckBox

A volte capita che abbiamo bisogno di gestire più Checkbox contemporaneamente.

Per esempio, poco tempo fà mi è capitato di dover creare un sistema di gestione di commenti, e dovevo dare la possibilità di eliminare più commenti contemporaneamente.

Ecco quindi, un’esempio su come gestire gruppi di checkbox con PHP:

Al solito, abbiamo la nostra pagina contentente il form “checkbox.html”:

<form action="gestire-checkbox.php" method="post">
Che cosa ti piace di InformaticaLab?
Gli articoli <input type="checkbox" name="piace[]" value="articoli" />
Gli utenti <input type="checkbox" name="piace[]" value="utenti" />
La grafica <input type="checkbox" name="piace[]" value="grafica" />
I video <input type="checkbox" name="piace[]" value="video" />
I sorgenti <input type="checkbox" name="piace[]" value="sorgenti" />
<input type="submit" value="Invia!">
</form>

La prima cosa che noterai, è che l’attributo “name” di tutte le checkbox è “piace[]” con due parentesi quadre alla fine del valore.

Utilizzando [] a questo modo, avviseremo PHP che tute le checkbox con quelle valore sono collegate. PHP quindi, creerà un’ array con tutti i valori del form che sarà recuperabile come prima utilizzando “$_POST[‘piace’]“.

Per farti capire meglio, selezionando tutte le checkbox del form precedente avremo come risultato un’array contente i valori:

{
articoli;
utenti;
grafica;
video;
sorgenti;
}

Adesso allora, vedremo un semplice script in PHP che stamperà i dati forniti dal form precedente:

<?php
$piace = $_POST['piace']; //prendo i dati dal form
if(!($piace))
{ 
    //Vedo se ha cliccato su qualche checkbox;
    echo "Vai a farti un giro."; //In caso positivo lo mando a farsi un giro
}
else
{ 
    $npiace = count ($piace); //Utilizzo count per contare il numero di valori contenuti nell'array
    for($i=0; $i < $npiace; $i++)
    {
        echo('A te piace ' . $piace[$i] .' di InformaticaLab.');
    } 
}
?>

Credo che il sorgente sia commentato a sufficienza, in ogni caso non esitare a lasciare un commento in caso di dubbi!

About the Author

Federico Ponzi

Studente, Webmaster ed appassionato di tutto ciò che è informatico con una spruzzata di scienza.

View all posts by Federico Ponzi

  1. chiara
    chiara03-20-2013

    Ciao Federico!
    a me mancano proprio le basi.
    Ho capito dove scrivere il testo HTML, e che devo fare un file con php. Ora il mio problema è che non si parlano!
    Io sto usando ARUBA + WORDPRESS per la creazione delle mie pagine, e nella pagina
    http://www.ricettedelcuore.it/ricette/ ho scritto il codice HTML.
    Poi sono andata in ARUBA, gestione files, e ho scritto un file .php dove ho gli altri codici
    (ossia nella cartella del mio tema, ossia in wp-content/themes/oxygen-child/).
    Il problema è che non viene trovato questo file!
    E ottengo un messaggio di errore:
    “You tried going to http://www.ricettedelcuore.it/ricette/recuperaCheckbox.php, and it doesn’t exist. All is not lost! You can search for what you’re looking for. ”
    Come posso fare? Vorrei tenere il php, dove l’ho messo, perché è una cartella con tutti i php che uso…
    Grazie!

    • Federico Ponzi
      Federico Ponzi03-20-2013

      Ciao Chiara,
      Il problema è che usando il motore WordPress, tutto il sito passa attraverso questo.
      Ciò vuol dire che non puoi semplicemente caricare il file, bensì devi:
      – Creare una pagina apposita (magari non linkandola da nessuna parte)
      – Installare un plugin che permetta di eseguire il codice php nella pagina (ne trovi a dozzine da Plugin -> Aggiungi nuovo)
      – Inserire il codice PHP e fare quello che volevi fare.
      Ad ogni modo, se volessi un consiglio più preciso dovresti dirmi che hai intenzione di fare, in quanto è difficile che non esista un plugin che lo faccia già facilmente.
      Ciao e buona fortuna per il tuo blog!
      Federico

  2. Chiara
    Chiara03-22-2013

    Grazie Federico! Con i tuoi consigli penso che possa riuscire pure io nel gestire le checkbox con php!
    Però mi pare di capire che, utilizzando wordpress, posso utilizzare strade più semplici, e aggiungere un plugin!
    Quello che devo fare è creare un filtro di ricerca per le mie ricette. Ho associato ogni ricetta a 1 o più categorie, e adesso vorrei mettere un filtro in cui l’utente possa fare un chek sulle varie categorie che ho, e poi premendo “submit” ved il risultato!
    Avevo fatto una ricerca veloce nei plugin, ma avevo trovato solo plugin molto obsoleti!
    Grazie
    🙂

  3. Federico Ponzi
    Federico Ponzi03-22-2013

    Ciao chiara!
    Non capisco, in pratica vuoi che l’utente possa ricette in base a più categorie o in base ai tags?
    In ogni caso credo che dovresti provare a cercare un plugin per effettuare “Ricerche avanzate”, sicuramente troverai quello che cerchi 🙂
    Ciao!

  4. ricettedelcuore
    ricettedelcuore03-23-2013

    Grazie! 🙂

  5. Vice
    Vice11-07-2013

    ciao….e se io volessi passare anche il name del check-box e non solo il value?

  6. alessandro
    alessandro03-14-2014

    Riapro questo articolo, chiedendo se non è un disturbo, considerato che non riesco a risolvere il problema da ormai due settimane, tenuto presente quanto sopra se nel mio form html avessi 4 o cinque campi checkbox e l’utente selezionasse un paio di campi come farei ad estrarre in base alla sua scelta solo questi due campi nello schermo?.
    N.B. i valori dei campi nella tabella del database sono link a foto che risiedono in una directory. Grazie mille.

  7. alessandro
    alessandro03-15-2014

    Ho trovato la soluzione la scrivo se servisse a qualcun’altro:
    ricapitolando ho creato una cartella nel server, vi messo delle foto dentro, da un form scritto in html viene data la possibiltà all’utente di selezionare il numero di esercizi per palestra che vuole, ovviamente ad ogno esercizio della palestra selezionato corrisponde una foto, nel form il nome di tutti i checkbox è uguale ossia “esercizi[]“, il valore di ogni checkbox, corrisponde al link della foto stessa. il form ha un campo hidden sempre con il nome esercizi[], che ha come valore l’header della scheda di allenamento, quindi sempre presente nell’output finale prima degli esercizi scelti. Premendo il tasto viene richiamato lo script seguente, grazie all’autore della sopra citata guida:

    <?php
    //include 'connessione-db.php';
    $esercizi = $_POST['esercizi'];
    if(!($esercizi) )
    {
        echo $esercizi;
    }
    else 
    {
    
        $nesercizi = count ($esercizi);
        for($i=0; $i<$nesercizi; $i++) 
        {
            echo ' ‘;
        }
    }
    ?>

    il risultato è un immagine globale degli esercizi scelti che rappresenta la scheda di allenamento dell’interessato e che può semplicemente stampare.
    Grazie della sopra citata guida, continuerò a seguire questo blog…

  8. Giacomo
    Giacomo09-29-2015

    Ciao, bel post, ma vorrei aggiungere un print che dica “Non hai scelto alcun valore” con relativa condizione da aggiungere all’esercizio, ma non riesco a formularla.
    Mi daresti una mano?

    • Federico Ponzi
      Federico Ponzi09-29-2015

      Ciao Giacomo!
      Ti aiuterei volentieri, ma se è un esercizio credo ti sarebbe più utile se mi postassi il codice o mi dicessi eventuali problemi che ti ritrovi o che tentativi hai fatto o almeno come pensi si possa fare 🙂
      Federico

  9. Giacomo
    Giacomo09-30-2015

    Premetto che non studio php da molto, quindi (sebbene poco codice, e la metà copiato) potrei aver fatto errori elementari.
    Il mio obbiettivo è quello di stampare il messaggio di errore: “Devi scegliere almeno un insegnante”, quando non seleziono alcuna checkbox, ristampando lo stesso form.
    Per vie traverse riesco a farlo… Anche i valori una volta scelti me li riesce a stampare, l’unico errore è che sotto ad essi mi ristampa ancora tutto il form!

    Codice qua sotto:

    <?php
    $insegnanti = $_POST['insegnanti'];
    $error = false;

    if($_POST["submit_check"]=="1"){

    if (!count($insegnanti))
    $erroruser = "Devi scegliere almeno un insegnante";
    $error = true;
    }

    $form =<<<_HTML_

    Segna i migliori insegnanti:{$erroruser}
    Signor Rossi
    Signor Verdi
    Signor Bianchi
    Signor Gialli

    _HTML_;

    if($_POST[‘submit_check’]){
    $ninsegnanti = count ($insegnanti); //Utilizzo count per contare il numero di valori contenuti nell’array
    for($i=0; $i<$ninsegnanti; $i++){
    print $insegnanti[$i] . '’;
    }

    //parte errata
    if($error){
    print $form;
    }

    } else {
    print $form;
    }

    ?>

    • Federico Ponzi
      Federico Ponzi10-01-2015

      Ad occhio, sono quasi sicuro che non volevi fare questo:

      if (!count($insegnanti))
      $erroruser = “Devi scegliere almeno un insegnante”;
      $error = true;

      Ma in verità volevi fare questo:
      if (!count($insegnanti)){
      $erroruser = “Devi scegliere almeno un insegnante”;
      $error = true;
      }
      E’ un errore abbastanza comune: il segreto è non usare mai l’ if in quella forma!
      Inoltre, come scritto anche nel post, non hai bisogno di fare count lì per sapere se è stato selezionato almeno un insegnante! 🙂
      Fammi sapere!
      Federico

  10. Giacomo
    Giacomo09-30-2015

    La parte HTML me l’ha completamente tagliata.
    Provo a rinviartela. L’errore in ogni caso non si dovrebbe trovare li.

    $form =<<<_HTML_
    $
    $Segna i migliori insegnanti:{$erroruser}
    $Signor Rossi
    $Signor Verdi
    $Signor Bianchi
    $Signor Gialli
    $
    $
    $
    $_HTML_;

    • Federico Ponzi
      Federico Ponzi10-01-2015

      I commenti filtrano automaticamente il codice HTML, avresti dovuto usare un sito di nopaste! Comunque non fa niente, come hai già detto tu il codice è nel lato server! 🙂

  11. Gio
    Gio02-03-2016

    Ciao, avrei un quesito riguardo questo argomento. Io ho una tabella su mysql e voglio che tramite le mie selezioni nel checkbox, vengano filtrate tutte le righe collegate. Il mio problema è che all’interno di una stessa cella sono inseriti più valori del checkbox e non riesco a fare in modo che vengano considerati tutti.Spero di essermi spiegata bene. Potete aiutarmi? 🙁

Leave a Reply