• User

    Come mantenere selezionato checkbox dopo aver cliccato submit

    Ciao a tutti. Come da titolo della discussione mi sono posto una domanda.
    Ipotizzando di avere in una pagina php alcuni checkbox ed un submit, come faccio a mantenere i ckeckbox selezionati dopo aver cliccato il bottone submit? Secondo voi è possibile?
    Ciao, grazie mille a tutti.


  • User Attivo

    Ciao,

    lo stato dei checkbox deve mantenersi per un periodo lungo oppure solamente dopo il submit e basta?

    Nel primo caso hai due possibilità, la prima utilizzando le sessioni, cioè memorizzando le spunte in una o più variabili di sessione al submit, così da averle disponibili nel prosieguo della navigazione.

    Oppure salvando questo valore in un database.

    Nel caso ti servano solo dopo il submit ti basta utilizzare un controllo con isset sulle checkbox.

    Es.

    
    <input type="checkbox" name="cb1" <?php echo isset($_POST["cb1"]) ? "checked" : "";?>>
    
    

    Parliamo di un form dentro un'area riservata o un form contatti? A cosa ti serve realmente?


  • User

    Ciao flaviors200, grazie mille per avermi risposto.
    La mia pagina .PHP è strutturata in questo modo:
    [PHP]<html>
    <head></head>
    <body>
    <form method="post">
    <input type="checkbox" name="check" value="Scelta1"/> Scelta1
    <input type="checkbox" name="check" value="Scelta2"/> Scelta2
    <input type="checkbox" name="check" value="Scelta3"/> Scelta3
    <input type="checkbox" name="check" value="Scelta4"/> Scelta4
    <input type="submit" name="ok" value="Fai la tua scelta" />
    </form>
    <?php
    if (isset ($_POST['ok']))
    {
    echo $_POST['check'];
    }
    ?>
    </body>
    </html>[/PHP]
    Quello che vorrei fare è questo: quando un utente seleziona uno (o anche più di uno) dei quattro checkbox e clicca il submit "ok" vorrei che i checkbox scelti rimanessero selezionati.
    Ho letto che bisogna utilizzare le sessioni ma nessuno spiega in che modo. Mi potresti dare qualche dritta? Te ne sarei infinitamente grato.
    Ciao, grazie mille


  • User Attivo

    Ciao,

    ho modificato il tuo codice, dai un'occhiata https://pastebin.com/BYPTWnr2

    Ho anche aggiunto un array, così se vuoi inserire più checkbox ti basterà aggiungerle all'array.

    Tieni presente che la variabile di sessione ha un tempo di vita che puoi impostare nel php.ini, ad ogni modo scaduto tale tempo o se l'utente chiude il browser la variabile "muore".

    Se vuoi fare una cosa permanente devi utilizzare la memorizzazione su file o meglio ancora su database. I cookie potrebbero andare anche bene ma non sono una soluzione affidabile.


  • User

    Ciao flaviors200, grazie per la risposta e scusa se non ho risposto subito ma questa settimana sono stato piuttosto impegnato con il lavoro.
    Ho provato al codice che mi hai postato ma non funziona esattamente come vorrei. Alcune volte il checkbox che seleziono mi resta selezionato ma altre volte no...


  • User Attivo

    Ciao samurai,

    sposta queste righe

    [PHP]
    if (isset ($_POST['ok']) && isset($_POST['check'])) {
    $_SESSION['check'] = $_POST['check'];
    }
    [/PHP]

    in alto subito dopo session_start()

    [PHP]
    session_start();

    if (isset ($_POST['ok']) && isset($_POST['check'])) {
    $_SESSION['check'] = $_POST['check'];
    }
    [/PHP]


  • User

    Ciao flaviors200, grazie mille per l'aiuto ma sono riuscito a risolvere senza utilizzare le sessioni o i cookie.
    Ho provato questo altro sistema e mi funziona benissimo (forse non è una soluzione molto elegante...)
    [PHP]
    <html>
    <head></head>
    <body>
    <form method="post">
    <input type="checkbox" name="check[]" value="Scelta1" <?php if(isset($_POST['check']) && is_array($_POST['check']) && in_array("Scelta1", $_POST['check'])) echo 'checked="checked"'; ?> /> Scelta1
    <input type="checkbox" name="check[]" value="Scelta2" <?php if(isset($_POST['check']) && is_array($_POST['check']) && in_array("Scelta2", $_POST['check'])) echo 'checked="checked"'; ?> /> Scelta2
    <input type="checkbox" name="check[]" value="Scelta3" <?php if(isset($_POST['check']) && is_array($_POST['check']) && in_array("Scelta3", $_POST['check'])) echo 'checked="checked"'; ?> /> Scelta3
    <input type="checkbox" name="check[]" value="Scelta4"<?php if(isset($_POST['check']) && is_array($_POST['check']) && in_array("Scelta4", $_POST['check'])) echo 'checked="checked"'; ?> /> Scelta4
    <input type="submit" name="ok" value="Fai la tua scelta" />
    </form>
    <?php
    if (isset ($_POST['ok']))
    {
    // codice da eseguire ...
    }
    ?>
    </body>
    </html>
    [/PHP]


  • User Attivo

    Bene mi fa piacere che hai risolto, ti faccio solo notare che l'ultimo codice che hai postato ha la stessa logica di quello che ti ho linkato, con la sola differenza che tu utilizzi direttamente l'array $_POST['check'].

    Io ho copiato il contenuto di questo array in una variabile di sessione, così da avere i valori memorizzati per tutta la sessione, anche perché è questo che avevo inteso volessi realizzare.

    La condizione

    [PHP]
    is_array($_POST['check'])
    [/PHP]

    la puoi rimuovere in quanto $_POST['check'] è un array, è sufficiente controllare che sia inizializzato tramite isset()


  • User

    Ciao flaviors200, vorrei provare a "complicare" un pochino il tutto.
    Nella situazione iniziale inserivo i checkbox direttamente in HTML e con il tuo aiuto sono riuscito a mantenere selezionato i checkbox dopo aver cliccato su un submit.
    Adesso mi sorge questa domanda: se i checkbox li inserisco tramite l'utilizzo di PHP, cosa cambia?
    Faccio questo esempio:
    [PHP]
    <html>
    <head></head>
    <body>
    <form method="post">
    <?php
    for ($i = 1; $i <= 10; $i ++)
    {
    echo '<input type="checkbox" name="check[]" value="$i" />' . $i;
    }
    ?>
    <input type="submit" name="ok" value="Clicca qui" />
    </form>
    </body>
    </html>
    [/PHP]
    In questo caso come dovrei modificare il codice?
    Ciao.