Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [FORM]Aiuto per ciclo while e foreach con checkboxes!

    Ciao a tutti, è da diverse ore che sto perdendo la testa con un ciclo, vi chiedo gentilmente di darmi una mano...

    Allora, ho un campo nel db che contiene le particolarità che può avere un'automobile (abs, airbag, navigatore, etc.).

    Ho creato una tabella "particolarita" che contiene due colonne, "id" e "nome" (es "1" "abs", "2" "airbag", etc)
    Nel modulo di inserzione delle auto ho creato diverse checkboxes aventi come name "particolarita[]" in modo che da crearmi un array contenente i numeri delle particolarità selezionate, dopodichè inserisco il dato nel database facendo un implode e separando i numeri da "-".

    Nel database quindi compare una stringa simile a questa: "1-4-5-8-12", quando vado poi a visualizzare l'auto faccio un'explode di quel campo sul carattere "-" e vado a richiamare i nomi delle particolarità sfruttando gli id.

    Spero di esser stato chiaro fin qui

    Ora sto scrivendo un modulo per modificare un'inserzione e vorrei quindi che le checkboxes delle particolarità fossero "checkate" o meno a seconda dei valori precedentemente inseriti nel database.
    Per i campi <Option><Select> non ho mai avuto problemi, dentro un ciclo while infatti inglobavo un ciclo if che dava alla variabile "$selected" un valore "SELECTED" se l'id coincideva con quello corrispondente all'auto, in questo modo il ciclo while mi stampava qualcosa come:

    <option value=tot SELECTED>marca auto</option>

    oppure

    <option value=tot>altra marca auto</option> per tutte le altre.

    Come posso riuscire a fare una cosa simile per le checkboxes?
    Vi passo il codice che ho creato, il problema è che nel ciclo foreach mi ristampa la stessa stringa tante volte quanti elementi sono presenti nell'array creato (quello creato con explode, ricordate?).

    Ecco il pastrocchio:

    codice:
    // Qui prendo il dato del database (es: 1-5-6-7-12-15) 
    $particolarita_exp = explode('-',$dati['particolarita']);
    
    //Con l'explode ottengo l'array $particolarita_exp contenente i 6 valori
    
    //La tabella "particolarita" ha 2 colonne, id e nome (es: 1 - ABS, 2 - Airbag, etc.)
    $query_particolarita = "SELECT * FROM particolarita ORDER BY id";
    $result_particolarita = mysql_query("$query_particolarita") or die("$diesql".mysql_error());
    
    while ($dati_particolarita = mysql_fetch_array($result_particolarita)){
    $particolarita2 = $dati_particolarita['id']; 
    $nome_particolarita2 = $dati_particolarita['nome'];
    
    
    //Con questo ciclo vorrei riempire la variabile $checked 
    foreach($particolarita_exp as $particolarita_exp2){
    	if ($particolarita2 == $particolarita_exp2) { $checked = " checked=\"checked\" ";}
    	else $checked = "";
    $option_particolarita .= "\n<input type=\"checkbox\" value=\"$particolarita2\"  $checked name=\"particolarita[]\" />$nome_particolarita2
    \n";
    }
    Spero che qualcuno abbia la pazienza di aiutarmi, non dovrebbe essere difficile ma io proprio non ci sto riuscendo aiutatemi a capire



    }



  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    <?php
    $stringa = "1-3-4-7-8-10";
    ?>
    codice:
    <form>
    <input type="checkbox" name="particolarita[]" value="1" <?php echo strpos($stringa,"1") === false ? '' : 'checked'  ?> >
    
    <input type="checkbox" name="particolarita[]" value="2" <?php echo strpos($stringa,"2") === false ? '' : 'checked'  ?> >
    
    <input type="checkbox" name="particolarita[]" value="3" <?php echo strpos($stringa,"3") === false ? '' : 'checked'  ?> >
    
    <input type="checkbox" name="particolarita[]" value="4" <?php echo strpos($stringa,"4") === false ? '' : 'checked'  ?> >
    
    <input type="checkbox" name="particolarita[]" value="5" <?php echo strpos($stringa,"5") === false ? '' : 'checked'  ?> >
    
    ....
    <input type="checkbox" name="particolarita[]" value="10"<?php echo strpos($stringa,"10") === false ? '' : 'checked'  ?> >

  3. #3
    Non penso di aver capito bene quello che mi proponi,
    però il valore numerico delle particolarità (nell'esempio 1-3-4-7-8-10) è variabile da auto ad auto quindi non posso preimpostarlo, deve essere dinamico...

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Hai detto tu di salvarlo nel database in un formato del genere ($stringa = "1-3-4-7-8-10"
    con la soluzione a cui ho pensato io non fai nessun explode. Recuperi la tua stringa dal db e poi con strpos verifichi se il valore degli input text è presente nella stringa. Se sì, lo checki, altrimenti no.

  5. #5
    Sì, nel database la stringa è salvata in quel modo ma io vorrei che compaiano comunque tutte e 20 le particolarità (tante sono quelle presenti nel db) e che siano "checkate" quelle riguardanti l'auto che si sta per modificare...

    Cmq forse non ho ben capito la soluzione che mi proponi, in pratica dovrei mettere la funzione strpos per tutte e venti le righe?

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Era giusto per farti capire la logica, ci metti un attimo a renderlo dinamico con un ciclo. Ora vado a nanna, se non risolvi da solo domani ti do una mano.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    In questo esempio $query2 recupera il campo della tabella che contiene le caratteristiche, cioè una stringa del tipo 1-2-4-5 ecc. Fammi sapere.

    codice:
    $query = mysql_query("SELECT * FROM particolarita ORDER BY id") or die(mysql_error());
    $query2 = mysql_query("SELECT caratteristiche FROM automobili where id_auto = 1") or die(mysql_error());
    $row = mysql_fetch_assoc($query2);
    while ($row2 = mysql_fetch_assoc($query)) {
    echo $row2['nome'];
    ?>
    <input type="checkbox" name="particolarita[]" value="<?php echo $row2['id'] ?>" <?php echo strpos($row['caratteristiche'],"$row2[id]") === false ? '' : 'checked' ?> />
    
    <?php
    }
    ?>

  8. #8
    Ciao Nicola,
    ho provato a fare come mi dicevi tu ma non ci sono riuscito, tuttavia oggi mi è venuta un'illuminazione improvvisa e ho trovato la soluzione con il metodo che cercavo di usare in precedenza

    Ho fatto così:

    codice:
    $particolarita_exp = explode('-',$dati['particolarita']);
    
    
    $query_particolarita = "SELECT * FROM particolarita ORDER BY id";
    $result_particolarita = mysql_query("$query_particolarita") or die("$diesql".mysql_error());
    
    while ($dati_particolarita = mysql_fetch_array($result_particolarita)){
    $particolarita2 = $dati_particolarita['id']; 
    $nome_particolarita2 = $dati_particolarita['nome'];
    foreach($particolarita_exp as $particolarita_exp2){
    	
    	if ($particolarita2 == $particolarita_exp2) { $checked .= " checked=\"checked\" ";}
    	else $checked .= "";
    
    
    }
    $option_particolarita .= 	"\n<input type=\"checkbox\" value=\"$particolarita2\"  $checked name=\"particolarita[]\" />$nome_particolarita2
    \n";
    unset($checked);
    	
    
    }
    In questo modo sembra funzionare perfettamente...

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    L'importante è che abbia risolto.

  10. #10
    Vero, ma sono stato fortunato

    Molte grazie, in ogni caso!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.