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 name="piace" type="checkbox" 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 ":D";
} else {
echo ":(";
}
?>
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à il value nel caso in cui la checkbox sia stata selezionata.
Gestire Gruppi di CheckBox
A volte capita che abbiamo bisogno di gestire più checkbox contemporaneamente.
Per esempio, poco tempo fa’ mi è capitato di dover creare un sistema di gestione di commenti e di dover 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 name="piace[]" type="checkbox" value="articoli">
Gli utenti <input name="piace[]" type="checkbox" value="utenti">
La grafica <input name="piace[]" type="checkbox" value="grafica">
I video <input name="piace[]" type="checkbox" value="video">
I sorgenti <input name="piace[]" type="checkbox" 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 tutte le checkbox con quel 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){
// In caso non abbia cliccato su nessuna checkbox:
echo ":(";
} else {
// Altrimenti itero sugli elementi dell'array, e stampo il valore:
for($i = 0; $i < count($piace); $i++) {
echo('Di InformaticaLab, ti piace: ' . $piace[$i]);
}
}
?-->
Credo che il sorgente sia commentato a sufficienza, in ogni caso non esitare a lasciare un commento in caso di dubbi!
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!
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
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
🙂
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!
Grazie! 🙂
ciao….e se io volessi passare anche il name del check-box e non solo il value?
Ciao Vice, è strano voler fare una cosa del genere comunque prova con:
http://us3.php.net/manual/it/reserved.variables.post.php
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.
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:
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…
Ottimo lavoro!
Federico
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?
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
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;
}
?>
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
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_;
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! 🙂
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? 🙁
Salve,
Sto cercando di fare ciò che mi consiglia la guida sopra citata, ma in una “textbox” o input type=”text” come da comanda del professore.. Non funziona, non so perchè, anche spostando la porzione di codice php al di fuori della textbox.. Lascio di seguito il codice che ho scritto.. Potreste aiutarmi?
“Php:”
Mezzo di trasporto:
<input type="text" name="mezzo" value="<?php $Nmezzi = count ($mezzo);
for($i=0; $i”/>
“Html:”
Possessore di:
Bici
Moto
N.B. Le righe di codice sono in celle di una tabella per formattare meglio la pagina web.. Un grazie in anticipo a chiunque cercherà di aiutarmi!
Ciao! Potresti incollare il codice sorgente in un nopaste? https://nopaste.xyz/
I commenti di wordpress talvolta vengono filtrari da alcuni codici.
Comunque, credo tu possa avere un po di confusione nella differenza fra linguaggio lato server e lato client (in riferimento alla frase “anche spostando la porzione di codice php al di fuori della textbox”).
Fammi avere il codice completo così sarà più facile capire qual è il probema!
Ciao Federico grazie , molto esauriente
Ciao, mi potresti spiegare come intabellare i valori passati dall’utente nelle checkbox multiple?
Ho una tabella in cui devo stampare a video i dati di un form (nome, password e una selezione di 5 argomenti tramite checkbox che ho impostato come array col nome di argomenti[] e value=”si”). I dati riesco a recuperarli, ma non riesco ad inserire i valori delle checkbox nelle celle corrette. Un aiuto su come fare?? Grazie mille
Ciao a tutti,
e se volessi acquisire il gruppo di checkbox da una query SQL come si potrebbe fare?