Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Valori CheckBox

  1. #1

    Valori CheckBox

    Salve a tutti, ho un problema con i valori checkbox che non riesco a recuperare.

    Allora ho una pagina di visualizzazione degli utenti e per ognuno di essi mostro un checkbox xhe indica se iscritto o meno alla mailinglist. Tramite un controllo if vedo se il valore del db è =0 metto senza spunta altrimenti spuntato e fin qui tutto ok. Una volta però che faccio l'edit non riesco a recuperare correttamente valori dei checkbox.

    Vi posto un pò di codice per farvi capire il mio problema.

    Pagina visualizzazione utenti

    codice:
    <?php if ($row[8] == 1) { ?>
         <td width="8%"><input name="MailingList[]" type="checkbox" value="1" checked="checked" /></td>
     <?php }
         else{ ?>
         <td width="8%"><input name="MailingList[]" type="checkbox" value="1"  /></td>
     <?php } ?>
    Pagina di edit
    codice:
    $MailingList = $_POST['MailingList']; //vettore valori checkbox
    
    $id = $_POST['Id_Users']; //vettore id utente
    $n = count($id); //conto quanti utenti sono...
     
    $a = new MailingList();
    
    for ($i=0;$i<$n;$i++) {
         $MailingListValue = isset($MailingList[$i]) ? $MailingList[$i] : '0';	
         $a->Edit_mailinglist($id[$i], $MailingListValue);
    }

    credo che tutte le prove che ho fatto mi abbiano rimbambito un pohino, mi date una mano??

    Mi capita che a volte mi aggiorna un campo che non deve aggiornare.

    Grazie Frank

  2. #2
    Up...!!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    fai un output dell'operazione così ti rendi conto di cosa fa esattamente...
    tipo:

    for ($i=0;$i<$n;$i++) {
    $MailingListValue = isset($MailingList[$i]) ? $MailingList[$i] : '0';
    $a->Edit_mailinglist($id[$i], $MailingListValue);
    print "Id: " . $id[$i] . " - Valore: " . $MailingListvalue . "
    ";
    }

    così vedi id per id che valore viene assegnato....

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Mi sento rimbambito anche io a leggere quel codice.

    Cmq, credo che tu debba fare:
    Nel html: <input name="MailingList[<?php echo $row[0];?>]" type="checkbox" ... //ovviamente se il tuo user id non e' row[0] metti l'indice giusto..
    Nel php: foreach ($_POST['MailingList'] as $uid =>$val){ $a->Edit_mailinglist($uid, $val);}

    Penso che il problema sia dovuto al fatto che gli id nel db non siano perfettamente seriale (che e' normale), quindi non va bene nel html aggiungerli ciecamente in un array, contarlo, e fidarsi del fatto che gli indici dell'array saranno uguali agli id nel database.

  5. #5
    Ciao freeman74, grazie per il suggerimento ma ho gia fatto un bel pò di prove. Come dice bubi1 credo sia un problema di codice scritto male.

    bubi1: ho fatto come dici tu ma quando i checkbox sono spuntati i valori li passa correttamente, invece quando sono dececcati mi da il seguente errore.


    Invalid argument supplied for foreach in home...........

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    beh, io ti ho indicato solo la strada, devi ancora aggiungere i controlli, eventualmente pulire gli input, etc..

    per controlli intendo roba tipo
    if(!empty($_POST['MailingList'])){
    //codice
    }

  7. #7
    Si si forse non mi sono spiegato bene io.

    Ti faccio un esempio pratico della cosa


    CONDIZIONE INIZIALE
    utenti id utente check
    A 7 Si
    B 8 SI
    C 9 No


    CONDIZIONE Voluta
    utenti id utente check
    A 7 Si
    B 8 No
    C 9 Si



    Se utilizzo il codice che tu mi hai postato e stampo i valori ottengo

    7 1 che serabbe id e valore checkbox
    9 1

    Ma non ho traccia dell'utente con id 8

    E' questo il risultato che non riesco a raggiungere....

  8. #8
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Ora ho capito.

    No, purtroppo non puoi con i checkbox. I browser includono il valore di un checkbox nel POST solo se e' checkato, se non lo e', non lo includono proprio.
    Ci sono vai trucchetti in giro, ma niente di decente.

    Io di solito faccio in due modi:
    1. O uso i radiobox
    2. O faccio un controllo: quanti user id mi hanno passato, e quanti checkbox. La differenza sono i checkbox non check-ati.

    Tecnicamente parlando
    nel html, oltre al checkbox, su ogni riga della tabella avro' anche un input hidden con l'user id, una roba tipo <input type="hidden" name="user[]" value="<?php echo $row[0];?>" />

    poi, nel php:

    foreach($_POST[user] as $user_id){
    ....
    $checked = !empty($_POST['MailingList'][$user_id]); //se il checkbox e' stato creato come ti ho suggerito sopra
    ....
    }

    in questo modo, se il checkbox MailingList corrispondente all'user_id e' settato vuol dire che e' stato check-ato, altrimenti no

  9. #9
    Originariamente inviato da bubi1
    Ora ho capito.

    Tecnicamente parlando
    nel html, oltre al checkbox, su ogni riga della tabella avro' anche un input hidden con l'user id, una roba tipo <input type="hidden" name="user[]" value="<?php echo $row[0];?>" />

    poi, nel php:

    foreach($_POST[user] as $user_id){
    ....
    $checked = !empty($_POST['MailingList'][$user_id]); //se il checkbox e' stato creato come ti ho suggerito sopra
    ....
    }

    in questo modo, se il checkbox MailingList corrispondente all'user_id e' settato vuol dire che e' stato check-ato, altrimenti no

    Se vedi la soluzione da me postata la prima volta prevedeva qualcosa del genere. purtroppo con i vettori php non ho molta dimestichezza in quanto provengo da altri linguaggi di programmazione e mi sembra un pò strana la trattazione dei vettori in php.

    Comunque tornando al problema ho appena risolto.

    Quando l'admin invia il form come prima cosa mi vado a settare tutti i checkbox tramite update di quella tipologia di utenti a 0, dopo se valorizzato il vettore MailingList vado ad inserire i valori relativi agli utenti altrimenti passo sotto. Non sarà una soluzione pulitissima ma funziona e per ora vado avanti

    Comunque grazie per le dritte che mi hai dato, devo imparare ad usare i vettori.



    Frank

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.