Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Inserire il valore mancante in un array

    Ciao,
    forse è un problema stupido ma oggi... dunque ho questo problema: in un form tra le altre cose ho un array di checkbox
    codice HTML:
    <input type="checkbox" name="visibile[1]" id="visibile1" value="1" checked="checked"><label for="visibile1">&nbsp;Nascondi/Rendi visibile</label>
    <input type="checkbox" name="visibile[2]" id="visibile2" value="1"  checked="checked"><label  for="visibile1">&nbsp;Nascondi/Rendi visibile</label>
    <input type="checkbox" name="visibile[3]" id="visibile3" value="1"  checked="checked"><label  for="visibile1">&nbsp;Nascondi/Rendi visibile</label>
    <input type="checkbox" name="visibile[4]" id="visibile4" value="1"  checked="checked"><label  for="visibile1">&nbsp;Nascondi/Rendi visibile</label>
    L'array di checkbox viene costruito prendendo i dati da un database, il fatto di essere checked o unchecked dipende solo dal valore in un campo del database, in questo caso sono tutti checked per caso.
    Ma ovviamente posso metterli ad unchecked a mano cliccandoci su col mouse, diciamo che faccio questo per fare l'upgrade dei valori nel database, fin qui nulla di strano!
    Diciamo che invio il dato al PHP per fare l'update e qui iniziano i problemi, ovvero se metto un valore in unchecked, questo non mi apparirà nell'array.
    Checkbox tutti checked
    codice:
    array(4) {   [1]=>   int(1)   [2]=>   int(1)   [3]=>   int(1)   [4]=>   int(1) }
    Checkbox con un valore unchecked ( il primo )
    codice:
    array(3) {   [2]=>   int(1)   [3]=>   int(1)   [4]=>   int(1) }
    Come si vede manca la chiave 1.
    Ora dovendo fare l'update di un database dovrei ricreare il dato mancante per metterlo a 0 (zero), come faccio?
    Devo creare un semplice algoritmo che mi legge le chiavi ( che sono tutte numeriche ) e inserisce i valori mancanti; potrei anche avere più valori unchecked, anzi potrei averli tutti e quindi avrei un array vuoto!

    Come faccio?
    Tenete presente che la query di update avviene tramite PDO e i valori sono "parsati" tramite bindParam() se manca il valore di riferimento da errore, quindi ci deve essere per forza ( zero o uno in questo caso ).

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Aggiungi un input hidden con lo stesso nome prima di ogni checkbox
    es:
    codice:
    <input type="hidden" name="visibile[1] value="0" /> 
    <input type="checkbox" name="visibile[1]" id="visibile1" value="1" checked="checked">
    
    <input type="hidden" name="visibile[2] value="0" /> 
    <input type="checkbox" name="visibile[2]" id="visibile1" value="1" checked="checked">
    
    ...

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da boots Visualizza il messaggio
    Aggiungi un input hidden con lo stesso nome prima di ogni checkbox
    es:
    codice:
    <input type="hidden" name="visibile[1] value="0" /> 
    <input type="checkbox" name="visibile[1]" id="visibile1" value="1" checked="checked">
    
    <input type="hidden" name="visibile[2] value="0" /> 
    <input type="checkbox" name="visibile[2]" id="visibile1" value="1" checked="checked">
    
    ...
    Buono, anche il validatore lo passa, denghiu

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Non è finita nonostante sembrava che andasse tutto bene finalmente, non capisco perché il validatore dei dati non mi legge il primo valore dell'array.
    Ecco il codicillo
    Codice PHP:
    //  $input['chiave'][num]
    foreach ($input as $chiave => $valore) {
                    
    $len count($valore);
                    for (
    $i 0$i $len$i++) {
                        echo 
    "$i - [$chiave{$valore[$i]}<br>";
                        if (
    $valore[$i] == '' || is_null($valore[$i])) {
                            
    $errore true;
                            break;
                        }
                    }
                } 
    $input è l'array contenente tutti i valori provenienti dal form e contiene anche i famigerati valori checkbox, che ora sono corretti come indicatomi da boots ( leggi sopra ).
    Ma quando legge il primo dato: $valore[0] è come se non trovasse nulla e scrive errore = true.
    Ho anche tolto il break per vedere i dati che leggeva e pare proprio che non gli piaccia il valore risultante dalla chiave 0.
    E solo del dato proveniente dal checkbox per gli altri non fa una piega.
    Oggi la forza non è forte con me

  5. #5
    print_r($input) e cosa ritorna?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    print_r($input) e cosa ritorna?
    $input è l'array contenente tutti i valori provenienti dal form e contiene anche i famigerati valori checkbox, che ora sono corretti come indicatomi da boots ( leggi sopra ).
    Comunque...
    ["visibile"]=> array(4) { [1]=> int(1) [2]=> int(1) [3]=> int(1) [4]=> int(1) }

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Oltre a fare come dice Santino, avrei una domanda: dipende proprio dal indice 0 oppure perchè $valore[0] = 0 ?
    Tieni presente che se il tuo checkbox vale 0 la condizione $valore[$i] == '' è vera. Se vuoi distinguere 0 da "campo vuoto" devi mettere $valore[$i] === ''

  8. #8
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da boots Visualizza il messaggio
    Oltre a fare come dice Santino, avrei una domanda: dipende proprio dal indice 0 oppure perchè $valore[0] = 0 ?
    Tieni presente che se il tuo checkbox vale 0 la condizione $valore[$i] == '' è vera. Se vuoi distinguere 0 da "campo vuoto" devi mettere $valore[$i] === ''
    Boots ma se ho copiato esattamente il tuo script oltre che citarti.
    Quando il checkbox non è cliccato il valore va a zero ( 0 ) non false, non null. Quindi l'array non porta mai un valore mancante ma sempre 0 o 1.
    che poi come ho già scritto, solo della prima chiave non legge il valore, gli altri gli vanno sempre bene.

  9. #9
    vedi che non esiste la chiave di valore 0? partono da 1...chiediti perchè non esiste tale chiave...probabilmente perchè nell'html gli input li fai partire da [1] invece che da [0]
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    vedi che non esiste la chiave di valore 0? partono da 1...chiediti perchè non esiste tale chiave...probabilmente perchè nell'html gli input li fai partire da [1] invece che da [0]

    Questo progetto mi sta prendendo al punto che non mi accorgo nemmeno più di queste banalità, sto pensando di andare al cinema così mi distraggo.

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.