View Full Version : [PHP] dinamicizzare elenco checkbox
anonimizzato
28-05-2006, 19:34
Ciao,
ho un problema concettuale, voglio dinamicizzare un elenco di campi checkbox i cui nomi di campo sono elencati a DB.
Faccio una select e li elenco uno ad uno in output e fin qui nessun problema.
Ora voglio però leggere quali di questi sono "checked" in modo da tenere la spunta una volta inviata la form.
Come faccio?
Dato per assunto che la cosa deve essere completamente dinamica ovvero se aggiungessi/togliessi record a DB lo stesso script continui a funzionare senza modifiche del caso.
Coscio che forse non è facile da capire per come mi spiego :fagiano: vi chiedo come si fà a recuperare in post il valore di un campo il cui name è dinamico es:
<input type="checkbox" name="<?php echo $myrow['campo']; ?>" ... />
Grazie.
Ciao,
ho un problema concettuale, voglio dinamicizzare un elenco di campi checkbox i cui nomi di campo sono elencati a DB.
Faccio una select e li elenco uno ad uno in output e fin qui nessun problema.
Ora voglio però leggere quali di questi sono "checked" in modo da tenere la spunta una volta inviata la form.
Come faccio?
Dato per assunto che la cosa deve essere completamente dinamica ovvero se aggiungessi/togliessi record a DB lo stesso script continui a funzionare senza modifiche del caso.
Coscio che forse non è facile da capire per come mi spiego :fagiano: vi chiedo come si fà a recuperare in post il valore di un campo il cui name è dinamico es:
<input type="checkbox" name="<?php echo $myrow['campo']; ?>" ... />
Grazie.È possibile. Il problema sta solamente nel nome da dare ai checkbox.
Dal punto di vista del PHP, i dati li puoi prendere usando le variabili speciali $_GET e $_POST. Sono array associativi, quindi se sai il nome del campo, lo prendi direttamente con $_POST['nomecampo'] ma puoi anche fare un foreach ($_POST as $campo => $valore).
Se però hai anche altri campo (testo, hidden, ecc...) rischi di confondere i campi dei checkbox con gli altri. Quindi l'ideale sarebbe quello di mettere un prefisso nel nome dei checkbox:
name="chk_<?php echo $myrow['campo']; ?>"A questo punto, puoi fare:
foreach ($_POST as $campo => $valore)
{
if (substr ($campo, 0, 4) == "chk_")
{
$nome_checkbox = substr ($campo, 4);
....
}
}
Questa è una possibile soluzione (e probabilmente non l'unica) che mi è venuta in mente. ;)
anonimizzato
29-05-2006, 19:05
Perfetto funziona, in quanto riesco a leggere il campo dopo il submit.
Ora però ho un altro problema che la mia scarsa conoscenza di PHP mi limita nel risolvere.
Nel ciclo do while con il quale costruisco dinamicamente i checkbox
$checked = "";
if($nome_checkbox == $myrow_sel['genere_nome']){
$checked = 'checked="checked"';
}
quando faccio il primo ciclo foreach per individuare i campi checkbox
foreach ($_POST as $campo => $valore){
if (substr ($campo, 0, 4) == "chk_"){
$nome_checkbox = substr ($campo, 4);
}
}
la variabile $nome_checkbox assume di volta in volta, giustamente, solo l'ultim o dei valori letti essendo ogni volta sovrascritta nel caso i campi fossero due o più.
Come faccio per memorizzare tutti i campi che vengono spuntati?
Grazie ancora.
quando faccio il primo ciclo foreach per individuare i campi checkbox
foreach ($_POST as $campo => $valore){
if (substr ($campo, 0, 4) == "chk_"){
$nome_checkbox = substr ($campo, 4);
}
}
la variabile $nome_checkbox assume di volta in volta, giustamente, solo l'ultim o dei valori letti essendo ogni volta sovrascritta nel caso i campi fossero due o più.
Come faccio per memorizzare tutti i campi che vengono spuntati?Li puoi, ad esempio, memorizzare in un array temporaneo. Poi successivamente farai altre elaborazioni sui checkbox spuntati, suppongo.
$checkbox_spuntati = array (); /* Array vuoto */
foreach ($_POST as $campo => $valore)
{
if (substr ($campo, 0, 4) == "chk_")
{
$nome_checkbox = substr ($campo, 4);
array_push ($checkbox_spuntati, $nome_checkbox);
}
}
....
foreach ($checkbox_spuntati as $chk)
{
....altre elaborazioni...
}
anonimizzato
29-05-2006, 20:02
perfetto ho fatto come hai detto (cosa che in effetti mi era venuta in mente di fare quella dell'array) ed ora funziona.
ho messo il ciclo foreach all'interno del do while per controllare ogni volta se il campo spuntato coincide con quello generato.
Azz! però non era proprio semplice semplice (almeno per me).
Thanks again! ;)
anonimizzato
29-05-2006, 20:11
Perdona un'ultima domanda:
facendo il ciclo foreach
foreach ($_POST as $campo => $valore)
la chiave è il nome del campo quindi
chk_campo1
chk_campo2
...
mentre valore è il valore assegnato al relativo campo
es:
chk_campo1 = 1
chk_campo1 = 2
non riesco bene a capire qual'è lo schema logico con cui vengono memorizzati questi dati all'interno dell'array associativo $_POST.
Bye.
Perdona un'ultima domanda:Nessun problema!
facendo il ciclo foreach
foreach ($_POST as $campo => $valore)
la chiave è il nome del campo quindi
chk_campo1
chk_campo2
...
mentre valore è il valore assegnato al relativo campo
es:
chk_campo1 = 1
chk_campo1 = 2
non riesco bene a capire qual'è lo schema logico con cui vengono memorizzati questi dati all'interno dell'array associativo $_POST.Prova a mettere nella pagina:
<pre>
<?php print_r ($_POST); ?>
</pre>Così ti stampa tutta la struttura dell'array in modo chiaro.
anonimizzato
29-05-2006, 20:25
Capito!!!
Fico il print_r non lo conoscevo mica :D
;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.