Visualizzazione dei risultati da 1 a 10 su 10

Discussione: salvare stato checkbox

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    salvare stato checkbox

    Ciao a tutti;
    Per la prima volta mi trovo a dover utilizzare delle checkbox e non sono sicuro del corretto meccanismo;
    Il codice semplificato è questo:

    codice:
    <form method="post" action="salva.php">
        <table>
            <tr>
                <td>maglia</td>
                <td><input type="checkbox" name="ac[]" value="maglia"</td>
            </tr>
            <tr>
                <td>jeans</td>
                <td><input type="checkbox" name="ac[]" value="jeans"</td>
            </tr>
            </tr>
                <td>boxer</td>
                <td><input type="checkbox" name="ac[]" value="boxer"</td>
            </tr>
        </table>
        <input type="submit" value="conferma">
    </form>

    salva.php:
    Codice PHP:
    $ac = isset($_POST['ac']);

    if (
    $ac) {
        foreach (
    $ac as $value)   {
            
    $sql "update magazzino
                      set ac = 1
                      where prodotto = '"
    .$value"'";
            
    $db->query($sql);
        }

    Nel campo <td> della tabella c'è anche una funzione che permette l'eventuale echo "checked" leggendo l'apposito campo nel db.
    Il problema nasce nel momento in cui devo fare la cosa inversa, ossia deselezionare un campo "checked" e salvare nel corrispondente campo del db "ac = 0".
    Deselezionare un campo, vuol dire che non sarà presente nell'array in salva.php... di conseguenza come faccio a fare la query?
    Mi vengono in mente 2 soluzioni molto contorte... la prima prevede la creazione di un'array completo di tutti gli elementi da cui sottrarre quelli "checkati"...
    Nel secondo caso invece potrei, ad ogni click sul tasto, azzerare tutti i check e rimetterli ex-novo in base alla nuova configurazione...
    Esistono vie più semplici? qual'è il modo più logico di farlo?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao,
    ma ti funziona il ciclo di inserimento in db?

    $ac = isset($_POST['ac']);
    foreach ($ac as $value) ....

    iteri su un valore booleano.


    Comuque io creerei un array con tutti gli elementi selezionabili,
    farei un ciclo su quell' array e per ogni valore controllerei se è stato selezionato in_array($value,$_POST['ac']) con conseguente update ad 1 o 0.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ciao, grazie per la risposta prima di tutto;

    il ciclo funziona correttamente, il db viene modificato nei campi degli elementi selezionati, e al refresh della pagina, i corrispondenti elementi appaiono "checked"...
    Itero su un array di valori booleani...
    Ho dovuto aggiungere "isset" e il ciclo if perchè altrimenti se si cliccava sul tasto di conferma senza aver modificato nulla mi dava errore ovviamente...
    Magari quel blocco può essere scritto meglio, perchè l'isset e il ciclo if mi sembrano una ripetizione... ma al momento nn saprei come ottimizzare...

    Comunque...
    Non mi è chiaro il tuo suggerimento... cioè come faccio a creare l'array di tutti gli elementi selezionabili, se quelli non checkati non verranno passati in POST alla pagina di inserimento? Devo prepararlo io a prescindere in quella pagina e poi fare un confronto?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    E' strano che funzioni (oppure inizio a perdere colpi alle 17 di pomeriggio ), avrebbe più senso così:

    $ac = isset($_POST['ac']);

    if ($ac) {
    foreach ($_POST['ac'] as $value) {
    ...........
    }
    }


    L'array di tutti gli elementi selezionabili andrebbe creato da te oppure se presente una lista in database dovresti prelevarla da li.
    Lo stesso array potresti sfruttarlo per creare la form.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    No, hai ragione... qualcosa non va...

    Codice PHP:
    $ac $_POST['ac']; 

        foreach (
    $ac as $value)   { 
            
    $sql "update magazzino 
                      set ac = 1 
                      where prodotto = '"
    .$value"'"
            
    $db->query($sql); 
        } 
    Così funziona correttamente, ma ovviamente mi da errore se clicco su conferma senza aver selezionato nessun elemento;

    Nel modo in cui l'ho scritto prima invece, non mi da errore, ma non effettua alcuna modifica...
    :-s
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Originariamente inviato da arkus
    E' strano che funzioni (oppure inizio a perdere colpi alle 17 di pomeriggio ), avrebbe più senso così:

    $ac = isset($_POST['ac']);

    if ($ac) {
    foreach ($_POST['ac'] as $value) {
    ...........
    }
    }
    Perfetto... ora funziona correttamente...
    Stanotte ragiono sulla seconda parte e vediamo cosa tiro fuori!
    Grazie 1000 intanto
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  7. #7
    prova così
    Codice PHP:
    foreach ( $_POST['ac'] as $key => $value) {
         if(
    $value=="1"){
             
    $sql "update magazzino set ac = 1 where prodotto = '".$value."'";
          }else{
             
    $sql "update magazzino set ac = 0 where prodotto = '".$value."'";
          }
         
    $db->query($sql); 


  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao CBR900
    non sarebbe una soluzione valida con le checkbox, andrebbe bene in caso di utiizzo di select o radio button, casi in cui puoi avere due valori distinti

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ciao, grazie per la dritta, ma non va...
    In questo modo, non mi salva i nuovi check, ed anzi, se ne ho qualcuno già inserito, me lo azzera...
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    bon dai... ho risolto aggiungendo questa query prima dell'altra parte del codice:

    Codice PHP:
    $sql "update magazzino set ac = 0";
    $db->query($sql);



    $ac = isset($_POST['ac']);

    if (
    $ac) {
    foreach (
    $_POST['ac'] as $value) {
    ...........
    }

    In questo modo evito di dover creare altri array e fare magheggi vari...l
    anche perchè per come è strutturata l'altra parte del codice, se uno clicca a vuoto sul tasto conferma (cioè senza aver fatto nessuna modifica), comunque venivano rifatte tutte le query per gli elementi "checked", quindi tanto vale farne un'altra all'inizio per riportare tutto a 0.
    Dalle prove che ho fatto sembra tutto corretto... vi vengono in mente casi particolari in cui potrebbe non funzionare?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

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.