Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Mantenere i checkbox selezionati

    Buongiorno a tutti....ho un problema e non riesco a trovare una soluzione per risolverlo.
    Avete qualche idea?
    Il problema è il seguente:
    In una pagina php ho una tabella con paginazione che funziona correttamente mostrando 10 record per pagina. Sopra la tabella c'è una parte dedicata alla ricerca in tabella, cioè l'utente può inserire un codice o una descrizione e nella tabella sottostante vengono visualizzati soltanto i risultati richiesti (anche questo funziona in maniera corretta).
    Nella tabella che mostra i risultati la prima colonna è formata da checkbox in modo da consentire all'utente di poter selezionare più righe.
    Il mio problema sta nel fatto che quando l'untente seleziona un record nella prima pagina, quando si sposta alla seconda pagina (della paginazione) non mantiene la selezione fatta in precedenza. Non so se mi sono spiegata bene.
    Lo stesso accade quando l'utente fa la ricerca. Una volta visualizzati i risultati della ricerca lui seleziona alcune checkbox, se poi fa un'altra ricerca non vengono mantenute le checkbox selezionate in precedenza.
    Spero di essermi spiegata....cmq ora vi posto anche il codice della pagina:
    Codice PHP:
     <?php
    require "include/paginazioneNEW.inc.php";
    session_start();
    $stato=$_SESSION['stato']; //variabile inizialmente settata a FALSE serve per vedere se le variabili di ricerca in tabella sono state settate o no.
    echo("<table>");
    echo(
    "<form action='modifica_dettaglio2.php' method='GET'>"); //modifica_dettaglio2.php è il nome di questa pagina
    echo("<tr><td colspan='2'>Filtro interrograzione</td></tr>");
    echo(
    "<tr><td>Codice Quesito</td>");
    echo(
    "<td>Descrizione</td>");
    echo(
    "</tr>");
    echo(
    "<tr><td><input type='text' maxlength='5' name='cq' width='500'></td>");
    echo(
    "<td><input type='text' maxlength='50' name='dq' width='500'></td>");
    echo(
    "</tr>");
    echo(
    "<tr><td colspan='2'><input class='bottone' type='submit' value='Effettua ricerca'></td></tr>");
    echo(
    "<tr><td colspan='2'><input class='bottone' type='submit' value='Ripristina contenuto' onClick=\"location.href='modifica_dettaglio2.php?cq=&dq='\"></td></tr></form>");
    echo(
    "</table>");
    //variabili per la ricerca nella pagina
    If(isSet($_GET['cq'])||isSet($_GET['dq'])){
        if(isSet(
    $_GET['cq']) && !isSet($_GET['dq'])){
            
    $cq=str_replace(" """,strtoupper($_GET['cq']));
            
    $_SESSION['cq']=$cq;
            
    $dq='';
            
    $_SESSION['dq']=$dq;
            
    $stato='TRUE';
            
    $_SESSION['stato']=$stato;
        }
        if(isSet(
    $_GET['dq']) && !isSet($_GET['cq'])){
            
    $dq=strtoupper($_GET['dq']);
            
    $_SESSION['dq']=$dq;
            
    $cq='';
            
    $_SESSION['cq']=$cq;
            
    $stato='TRUE';
            
    $_SESSION['stato']=$stato;
        }
        if(isSet(
    $_GET['dq']) && isSet($_GET['cq'])){
            
    $dq=strtoupper($_GET['dq']);
            
    $_$cq=str_replace(" """,strtoupper($_GET['cq']));
            
    $_SESSION['cq']=$cq;
            
    $stato='TRUE';
            
    $_SESSION['stato']=$stato;
        }
        
    //parte di codice relativo alla paginazione
        
    $page = (!isset($_GET['page']))? $_GET['page'];
        
    $conto=oci_parse($con,"select count(*)
                    from xxx
                    where cod like '
    $cq%' and des like '$dq%'");
        
    oci_execute($conto);
        while(
    $riga=oci_fetch_array($contoOCI_ASSOC)){
            foreach (
    $riga as $pippo){
            }
        }
        
    $max_results 10;//numero di elementi da visualizzare per pagina.
        
    $total_results $pippo;
        
    $total_pages ceil($total_results $max_results);
        
    $from = (($page $max_results) - $max_results);
        
    $a= ($max_results $page);
                        
        
    $query_r=oci_parse($con,"select r, c1, c2
                    from(select rownum r, cod c1, des c2
                        from xxx
                        where cod like '
    $cq%' and des like '$dq%'   
                                                                              and rownum <= 
    $a)
                    where r > 
    $from");
        
    oci_execute($query_r);
    }else{
        if(
    $stato='TRUE'){
            
    $cq=$_SESSION['cq'];
            
    $dq=$_SESSION['dq'];
            
    //parte di codice relativo alla paginazione
            
    $page = (!isset($_GET['page']))? $_GET['page'];
            
    $conto=oci_parse($con,"select count(*)
                        from xxx
                        where cod like '
    $cq%' and des like '$dq%'");
            
    oci_execute($conto);
            while(
    $riga=oci_fetch_array($contoOCI_ASSOC)){
                foreach (
    $riga as $pippo){
                         }
            }
            
    $max_results 10;//numero di elementi da visualizzare per pagina.
            
    $total_results $pippo;
            
    $total_pages ceil($total_results $max_results);
            
    $from = (($page $max_results) - $max_results);
            
    $a= ($max_results $page);
            
    $query_r=oci_parse($con,"select r, c1, c2
                        from(select rownum r, cod c1, des c2
                            from xxx
                            where cod like '
    $cq%' and 
                                                                                          des like '
    $dq%' and 
                                      rownum <= 
    $a)
                        where r > 
    $from");
            
    oci_execute($query_r);
        }else{
            
    //parte di codice relativo alla paginazione
            
    $page = (!isset($_GET['page']))? $_GET['page'];
            
    $conto=oci_parse($con,"select count(*)
                        from xxx"
    );
            
    oci_execute($conto);
            while(
    $riga=oci_fetch_array($contoOCI_ASSOC)){
                foreach (
    $riga as $pippo){
                }
            }
            
    $max_results 10;//numero di elementi da visualizzare per pagina.
            
    $total_results $pippo;
            
    $total_pages ceil($total_results $max_results);
            
    $from = (($page $max_results) - $max_results);
            
    $a= ($max_results $page);
            
    $query_r=oci_parse($con,"select r, c1, c2
                        from(select rownum r, cod c1, des c2
                            from xxx 
                            where rownum <= 
    $a)
                        where r > 
    $from");
            
    oci_execute($query_r);                
                }
    }
    echo(
    "<tr>");
    echo(
    "<td align='center'>Seleziona</td>");
    echo(
    "<td align='center'>Codice Quesito</td>");
    echo(
    "<td align='center'>Descrizione Quesito</td>");
    echo(
    "</tr></thead>");
    echo(
    "<form action='effettua_modifica.php' method='POST'>"); //i valori checcati vanno alla pagina effettua_modifica.php
    while($riga=oci_fetch_array($query_rOCI_NUM OCI_RETURN_NULLS)){
    echo(
    "<tr>");
    echo(
    "<td align='center'><input name='que' type='checkbox' value='$riga[1]'/></td>");
    echo(
    "<td align='center'>".$riga[1]."</td>");
    echo(
    "<td align='center'>".$riga[2]."</td>");
    echo(
    "</tr>");
    }
    echo(
    "<tr><td colspan='3'>".pagination_4($total_pages$page)."</td></tr>");
    echo(
    "<tr><td colspan='3'><input class='bottone' type='submit' value='Conferma modifica' style=\"cursor:pointer;cursor:hand;\"></td></tr>");
    echo(
    "</form>");    
    echo(
    "</table>");    
    ?>
    Help!!!!

  2. #2
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Se ho ben capito tu vorresti ottenere qualcosa di simile alla funzione di youtube che ti permette di selezionare dei video e guardarli successivamente... solo che nel tuo caso si tratta di ricordarsi delle checkbox selezionate... ho capito bene? Se è cosi potresti usare javascript, il quale tramite ajax (per comodità) richiama una pagina php... e tramite questa pagina php dovresti memorizzare le scelte dell'utente 1) o in un cookie, 2) o in una sessione o 3) in un database... fatto questo devi modificare il tuo codice, in modo che prima di tutto legga il cookie, la sessione o il db, alla ricerca di eventuali checkbox precedentemente selezionati... e se ne trova qualcuno li confronta con quelli che stai attualmente visualizzando e se c'è un riscontro li seleziona.
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  3. #3
    Quello che temevo era la necessità di dover utilizzare js...non ci capisco niente

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Non è necessario utilizzare javascript, però il problema è comunque piuttosto complesso
    Per quello che vuoi fare devi:

    1) Usare una richiesta POST ad ogni invio, anche quando l'utente fa click su un semplice link per la paginazione. Ma questo forse già lo facevi
    2) Ad ogni passaggio di pagina devi controllare, nel form in input, quali checkbox sono state selezionate, e memorizzarlo in sessione
    3) Quando mostri una pagina, devi verificare in sessione se qualcuno dei record mostrati è fra quelli selezionati, e farlo apparire con la checkbox già selezionata
    4) Tutto questo sembra già abbastanza complesso, ma la cosa si complica ancora perché ti si crea il problema opposto: devi accorgerti se l'utente deseleziona una checkbox dopo averla selezionata in precedenza, per poter togliere il dato dalla sessione. Siccome oltretutto le checkbox non selezionate non vengono inviate al server, hai bisogno di un campo hidden per ogni record che appare sulla pagina, in modo che il server possa confrontare la lista dei record presenti sulla pagina con la lista delle (eventuali) checkbox selezionate: oltre a memorizzare quelle selezionate, devi anche eliminare quelle che eventualmente fossero già presenti in sessione e non risultassero più selezionate.

  5. #5
    Ciao luca200....grazie x la risposta.
    Più o meno ho capito quello che vuoi dirmi anche se non ho ben capito come realizzarlo....ma come faccio a "verificare in sessione se qualcuno dei record mostrati è fra quelli selezionati, e farlo apparire con la checkbox già selezionata"?
    I checkbox si chiamano OVVIAMENTE con lo stesso nome, quindi devo fare un controllo sul value???
    Il codice che ho postato qui è stato ripulito e semplificato rispetto all'originale...fare tutto quello che mi hai suggerito è complicatissimo (per quel poco che ho capito)

  6. #6
    dovresti passare con foreach in session il value dei checkbox selezionati

  7. #7
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Usando javascript+ajax le cose si semplificano molto... ti ho fatto velocemente un esempio (mooooolto migliorabile), dal quale puoi comunque trarre qualche spunto:

    paginazione.php

    Codice PHP:
    <?php

        session_start
    ();
        
        if (!isset(
    $_SESSION['checkbox']))
        {
            
    $_SESSION['checkbox'] = array();
        }

    ?>

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

    <script>

    $(document).ready(function() 
    {
        $('.cb').click (function ()
        {
            var checkbox = $(this);
            var status   = '';
            
            if (checkbox.is(':checked'))
            {
                status = 'seleziona';
            }
            else
            {
                status = 'deseleziona';
            }

            $.ajax({
                           // in questa chiamata c'è il minimo indispensabile
                url: 'elabora_checkbox.php?id=' + checkbox.attr('id') + '&status=' + status
            });
        });
    });
    </script>

    <?php
     
        $checkboxes 
    = array('cb_01''cb_02''cb_03''cb_04''cb_05');
        
    $input      '';
        
        foreach (
    $checkboxes as $id)
        {
            if (isset(
    $_SESSION['checkbox'][$id]))
            {
                
    $input .= "<input id=\"$id\" class=\"cb\" type=\"checkbox\" name=\"nome\" value=\"valore_5\" checked>";
            }
            else 
            {
                
    $input .= "<input id=\"$id\" class=\"cb\" type=\"checkbox\" name=\"nome\" value=\"valore_5\">";
            }
        }
        
        echo 
    $input;
    ?>
    elabora_checkbox.php

    Codice PHP:
    <?php

        session_start
    ();
        
        if (!isset(
    $_SESSION['checkbox']))
        {
            
    $_SESSION['checkbox'] = array();
        }
        
        if (isset(
    $_GET['id']) && isset($_GET['status']))
        {        
            
    $id     $_GET['id'];
            
    $status $_GET['status'];
            
            if (
    $status == 'deseleziona')
            {
                unset(
    $_SESSION['checkbox'][$id]);
            }
            elseif (
    $status == 'seleziona')
            {
                
    $_SESSION['checkbox'][$id] = true;
            }
            else 
            {
                
    // non conosco lo status, gestisci
            
    }
            
        }
        else 
        {
            
    // non ci sono id e status in GET, gestisci
        
    }
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  8. #8
    Sono 15 giorni che ci studio...non volevo risponderti senza averlo guardato bene bene!!!
    Non riesco a capire: qual'è il collegamento tra la pagina che ha i checkbox e la pagina "paginazione.php"?? E...elabora_checkbox.php è una pagina di passaggio???
    Scusa ma sto impazzendo...non ci capisco niente...

  9. #9
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Andiamo per gradi. Innanzitutto per capire quanto ho scritto io è necessario non fare alcun collegamento con quanto hai scritto tu Il mio è un semplice esempio che si occupa di fare una sola cosa, ossia: paginazione.php prende dei valori id dall'array (*) $checkboxes = array('cb_01'....'cb_05'); e li confronta con la sessione "checkbox"... se c'è corrispondenza li marca come checked, altrimenti no. Ma come viene valorizzata la sessione? Qui entrano in gioco jquery ed ajax... praticamente quando tu clicchi su un checkbox per selezionarlo/deselezionarlo, javascript intercetta questo evento e fa una chiamata in background ad elabora_checkbox.php e qui viene aggiunto o eliminato l'id del checkbox dalla sessione... e qui ricomincia tutto da capo... quando chiami paginazione.php se gli id dei checkboxes che stai visualizzando sono presenti nella sessione li marca, altrimenti no... e cosi via. Spero sia + chiaro il tutto e sopratutto se hai dubbi non aspettare 15 giorni

    (*) questi valori tu li estrapoli da un database, ma non avendo uno io ho risolto cosi per semplicità.
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  10. #10
    L'ho parzialmente adattato al mio caso nel senso che:
    - FUNZIONA quello che era il mio problema originario, cioè mantere selezionate le checkbox anche al cambiamento della pagina;
    - NON FUNZIONA, o meglio non so come posso fare a richiamare in una pagina tutte le checkbox selezionate per inserire i loro valori in tabella.
    Ti posto il codice, così se hai qualche idea mi dai una mano

    paginazione.php
    Codice PHP:
    //questa è l'unica cosa che ho cambiato rispetto al tuo codice 
    echo("<td align='center'><input id='$id' class='cb' type='checkbox' name='ric[]' value='$id' checked></td>"); 
    inserimento.php
    Codice PHP:
    $ric=$_POST['ric'];
    $numero=count($ric); 
    for(
    $i=0;$i<$numero;$i++){
        
    $query=oci_parse($con,"INSERT INTO utenti_richieste
                    (id_utente, seq_richiesta)
                         VALUES
                    ('
    $id_utente', '$ric[$i]')");
        
    oci_execute($query);
    }
    echo 
    "<script>alert('Richiesta inserita con successo con successo!');window.location.href=\"paginazione.php\";</script>"

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.