• User Newbie

    Memorizzare stato checkbox php

    Salve ero curioso di capire come si fa in php quando abilito una checkbox o radiobutton mantenere la selezione anche quando chiudo il browser e che se riapro il sito ho ancora quella impostazione selezionate che ad es. mi abilita delle funzioni del sito o parametri.
    Grazie a tutti ancora.


  • ModSenior

    Ciao,
    puoi utilizzare i cookie ad esempio. O anche il database se si tratta di utenti loggati, dipende di preciso cosa devi fare.


  • User Attivo

    @Thedarkita said:

    Ciao,
    puoi utilizzare i cookie ad esempio. O anche il database se si tratta di utenti loggati, dipende di preciso cosa devi fare.

    Ciao Thedarkita,

    Ho un problema che ora espongo. molti mi hanno consigliato di metter eil regolamento all'inizio di fase di registrazione, ma per me significa rifare tutto da capo perchè è in jqery. Allora il problema è il seguente. Quando un utente si logga, deve accettare il regolamento per poter andare avanti. Una volta accettato tale regolamento si abilita il tasto "avanti" che inizialmente è disabilitato. Ora, l'utente non deve accettare il regolamento ogni volta che si logga, ma basta la prima volta. E ho pensato di memorizzarlo in un database. Dove il valore 0 = non accettato e il valore 1 = accettato., Questo è quello che ho realizzato. inoltre, una volta che ha accettato il regolamento passa alla pagina successiva e se si riuscisse a fare in modo di memorizzare che pallo ha già accettato il rgeolamento, dovrebbe passare alla seconda pagina di aggiornaprofilo.php. In modo tale che non c'è più biaogno di aggiornare ogni volta che si connette il suo profilo. Ti posto ora tutto il codice che ho fatto:

    Questo è il campo che si trova in tabella utenti:

    [PHP]

    accettatermini ENUM('1', '0') DEFAULT '0',

    [/PHP]

    Questo lo spezzone dove c'è la chekbox che dovrebbe fare quella funzione di cui sopra ti ho accennato.:

    [PHP]

    Se accetti le seguenti regole, clicca su "avanti" altrimenti su "cancella", e sarai automaticamente cancellato dal database.

    Grazie di aver letto il regolamento e buon divertimento.
    </p>

    accetti il regolamento <input name="accetto" type="checkbox" value="SI">
    <?php

    ?>

    <br><br>
    <input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" />
    <input type="button" onClick="window.location.href='cancellazione.php';" style='padding:10px' value="Cancellati" />

    <input type='button' onclick='getpage("<?=$page+1?>")' value='Avanti' disabled='disabled'/>

    <?php
    if($_POST['accetto']=="SI"){
    //qui tutto l'ambaradan di registrazione e salvataggio dati con i dati degli altri $_POST
    }else{
    echo "per essere registrato devi accettare il regolamento";
    //e rimandi al form o dove vuoi tu
    }
    ?>
    </div>
    </center>

    <?php

    //Inizito seconda pagina dopo aver accettato il regolamento

        break;
    case 2:
    

    ?>
    <br><br> <center>
    <input type='button' onclick='getpage("<?=$page-1?>")' value='Indietro' ?>
    <input type='button' onclick='getpage("<?=$page+1?>")' value='Avanti' ?>
    <!--<input type="button" onClick='getpage("<?=$page+1?>")' style='padding:10px' value="Aggiorna Profilo" />-->

        <input type="submit"  onClick="window.location.href='aggiornaprofilo.php';"style='padding:10px' value="Aggiorna Profilo" >
        
        <input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" >
    
    
    
    </center>
    <?php
    break;
    case 3:
    ?>
        <input type='button' onclick='getpage("<?=$page-1?>")' value='Indietro' ?> 
    <?php
    break;
    

    }

    ?>
    <script>
    $('input[id=accetto]').click(function(){
    var input = $('input[value="Avanti"]');
    if($(this).is(':checked')) input.removeAttr('disabled');
    else input.attr('disabled','disabled');
    });
    function getpage(page)
    {
    location.href = '?page='+page;
    }
    </script>

    [/PHP]

    E questa era la funzione che gestiva l'abilitazione del tasto "avanti" quando si chekkava il regolamento. Mi puoi dare una mano a risolvere tale impiccio ???? Io non ci sono riuscito, coin tutti gli esempi che ho visto. Grazie:S epro in un vostro aiuto.


  • User

    Ciao,
    scusa ma non ho capito bene.
    tu hai un db con utente/password/0 o 1 a seconda ae ha già accettato il regolamento...
    perciò se si loga ed è a 0, fai apparire regolamento, ( magari if e poi include)


  • User Attivo

    Ciao kalten1,

    La mia idea era quella. Solo che non ci sono riuscito come vorrei ti posto il codice di prova che ho fatto. Innanzi tutto la tabella contiene il segunte campo:

    [PHP]

    accettatermini ENUM('1', '0') DEFAULT '0',

    [/PHP]

    1 = termini accettati
    0 = termini non accettati e chi ha 0 deve apparire il regolamento per poter andare avanti

    Questo che ti posto, è il codice chiamato prova.php completo:

    [PHP]

    <?php
    require_once("connetti.php");

    session_start();

    if(isset($_SESSION['nome'])) {

    $array = mysql_query("SELECT * FROM utenti WHERE id=".$_SESSION['id']." '");

    // $array=mysql_fetch_array($array);

    }

    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>benvenuto</title>

    <body>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    

    <style>
    #col_sx{
    float:left;
    width:33.3%;
    }
    #col_ct{
    float:left;
    text-align:center;
    width:33.3%
    }
    #col_dx{
    float:left;

    text-align:right;
    width:33.3%;
    }
    </style>
    </body>

    <?php
    echo"<div id='col_sx'> ";
    echo "<h1>";
    echo $id;
    echo "</h1>";
    echo "</div>";

    echo"<div id='col_ct'> ";
    echo "<span style='font-size:16px' face='Comic Sans'>";

    $array = strtoupper($_SESSION['nome'] );
    if(isset($_SESSION['nome'])) {

    echo "<center>";
    echo "<div class="messaggio"><h1>";
    echo "<h1> BENVENUTO ".$array."</h1>";
    echo "</h1></div>";
    echo "</body></html>";
    echo "</center>";

    echo '<hr align=?right? size=?3″ color=?black? noshade>'; //disegna una semplice riga

    }

    //Visualizza l'avatar contenuto nel db

    //$query =mysql_query("SELECT immagine FROM immagine WHERE id = $id");

    ?>

    <!--Inizio procedura per accettazione dei termini e visualizzazione della seconda e terza pagina -->

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
    </head>
    <body>
    <center> <br> <br>

    <!-- <body style='background:#000'> -->

    <style>
        
        input[type='button']{padding:10px;}
    </style>
    

    <?php
    require_once("connetti.php");
    $id_user = $_GET['id']; # o $_GET['username'];
    $page = (int)$_GET['page'];
    if(EMPTY($page)) $page = 1;
    $query_user = "SELECT * FROM utenti WHERE id='$id_user'";
    $result_query = mysql_query($query_user);
    $assoc_rows = mysql_fetch_assoc($result_query);
    switch($page)
    {

    case 1:
    

    ?>
    <div style='width:600px; font-family:Comic Sans MS'>

    <!--Inizio bordatura testo arrotondato-->
    

    <style type="text/css">
    .bordato{
    border:2px solid #000000;
    border-radius: 80px 80px 80px 80px;
    -moz-border-radius: 80px 80px 80px 80px;
    -webkit-border-radius: 80px 80px 80px 80px;
    }
    </style>
    <body>
    <div class="bordato">
    <center>BENVENUTI NEL SOCIAL NETWORK PIU' LIBERO DEL MONDO

    </center>

    <p align="left">

    Se stai leggendo questo regolamento è perchè ti sei iscritto a tale sito e di conseguenza, prima di andare avanti, devi accettare tre regole fondamentali. <br/>

    Tali regole, servono per non creare dispute e conversazioni spiacevoli sia con gli utenti, sia con gli amministratori.

    Non bisogna essere maggiorenni per iscriversi. Basta avere un'età dai 12 anni in su. Le tre regole fondamentali sono le seguenti: <br></p>
    <p align="left">

    1. Vietato bestemmiare pena si viene automaticamente cancellati dal sito senza possibilità di registrarsi con un ulteriore username; <br/></p>
      <p align="left">

    2. Vietato parlare di politica. La politica è causa di discussioni e punti di vista differenti l'uno dall'altro. Ci saranno tre avvisi,
      dopo di che pena esclusione dal sito e cancellazione perenne dal database;<br/> </p>

    <p align="left">
    3) Rispettare gli utenti iscritti. <br/> </p>

    <p align="left">

    Se accetti le seguenti regole, clicca su "avanti" altrimenti su "cancella", e sarai automaticamente cancellato dal database.

    Grazie di aver letto il regolamento e buon divertimento.
    </p>
    <input id='regolamento' type='checkbox' value='1'>Accetta il regolamento

    <br> <br>

    <input type='button' onclick='getpage("<?=$page+1?>")' value='Avanti' disabled='disabled'/>
    </center>
    <?php
    if($_POST['checkbox']=="1"){

    // Controllo se esiste l'email nel db
    

    //qesta è la formuletta che ho adoperato per controllare se nel db è presente qualche utente con 0, insieme alla session[id]

    $checktermini=mysql_query("SELECT accettatermini FROM utenti WHERE accettaterminni=0 AND id = '".$_SESSION['id']."'");

    $vuota=mysql_num_rows($checktermini);
    if($vuota > 0){
    echo " <form method='POST' URL='utenti/provaaggiornaprofilo/page=2'>";

    }

    echo "<br> <br> <h1> Attenzione: I termini devono essere accettati !!! </h1>";
    

    echo " <form method='POST' URL='page=1'>"; //ho dovuto togliere il link sennò non mi fa inviare il messaggio
    exit();
    }

    //Inizito seconda pagina dopo aver accettato il regolamento

        break;
    case 2:
    

    $qry="UPDATE utenti SET accettatermini='1' WHERE id = '".$_SESSION['id']."'";
    if (mysql_query($qry)) {
    echo "... Termini accettati";

         echo "Benvenuto nella seconda pagina se funziona !!!";
    

    } else {
    echo "Errore: account non attivato";
    }

    echo"<br> <br>";
    echo $qry;
    }

    ?>

    <script>
    $('input[id=regolamento]').click(function(){
    var input = $('input[value="Avanti"]');
    if($(this).is(':checked')) input.removeAttr('disabled');
    else input.attr('disabled','disabled');
    });
    function getpage(page)
    {
    location.href = '?page='+page;
    }
    </script>

    [/PHP]

    In teoria una parte funziona, ma in pratica, ogni volta che vado a loggarmi mi chiede di accettare il regolamento, anmche se sto in posizione 1 di aver accettato. Ti posto il login.php. perchè mi è venuto il dubbio che forse si debba modificare qualcosa dallì:

    login.php

    [PHP]

    <?php
    ob_start();//visto che usi header popo l'l'uotput html
    session_start();//aggiungi questa e
    require_once("connetti.php");

    if(isset($_POST['log'])){

    $usn=htmlspecialchars(trim($_POST['username']));
    $pas=md5(trim($_POST['password']));

    //$nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));

    $q=mysql_query("SELECT * FROM utenti WHERE username='$usn' AND password='$pas' AND attivo = 1");  
    
    if(mysql_num_rows($q) > 0){
        $riga=mysql_fetch_array($q);//aggiungi questa e
    
        $_SESSION['id'] = $riga['id'];
        
        $_SESSION['nome'] = $riga['nome'];
        $_SESSION['id']=$riga['id'];//aggiungi questa
        header("location: prova.php");
    }else{
        header("location: failed.php");
    }
    exit();
    

    }else{
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>form di log</title>
    </head>
    <body>
    <center>
    <!--a che cavolo serve questo link? o clicko o inserisci -->
    <h2>DIGITARE USERNAME & PASSWORD. PREMERE <a href="iscrizione.php"> QUI</a> </h2>
    //<form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <font face="Comic Sans MS">
    Username: <input type="text" name="username" maxlength="30" size ="32"> <br /> <br />
    Password: <input type="password" name="password" maxlength="12" size ="14"><br /><br />
    </font>
    <input type="submit" name="log" value="Loggati" />
    </form>
    <!-- qui il tag center (obsoleto) era indentato col form -->
    </center>
    </body>
    </html>
    <?php
    }

    ob_end_flush();
    ?>

    [/PHP]

    Mi potresti dare una mano per favore a risolvere ???? Se hai idee migliori ben vengano. grazie


  • User

    Aspetta mi sono perso $id_user = $_GET['id']; da dove passi il get? hai provato a stamparlo prima di trasformalo e passarlo alla query? nel caso stampa anche la query a video cosi puoi vedere passo per passo cosa succede


  • User Attivo

    Ciao Kalten,

    Adesso vado a cena e ci vediamo dopo dal tablet, in questa maniera come ti ho inviato il codice, riesco a loggarmi senza alcun problema. Solo che mi appare sempre il regolamento cosa che in teoria non dovrebbe apparire. Ci si vede dopo dal tabelt. Ciao e grazie ancora.


  • User Attivo

    Ciao Kalten1 e a tutto lo staff,

    Ekkime denovo. Allora ora ti posto il codice del login con le dovute modifiche. Solo che come ti dicevo ieri sera, mi manda sempre al regolamento. Invere vorrei che mi mandasse una volta fatto il controllo di chi ha accettato il regolamento, alla pagina due: Qua segue il codice sudetto:

    [PHP]

    <?php
    ob_start();//visto che usi header popo l'l'uotput html
    session_start();//aggiungi questa e
    require_once("connetti.php");

    if(isset($_POST['log'])){

    $usn=htmlspecialchars(trim($_POST['username']));
    $pas=md5(trim($_POST['password']));

    //$nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));

    $q=mysql_query("SELECT * FROM utenti WHERE username='$usn' AND password='$pas' AND attivo = 1");  
    
    if(mysql_num_rows($q) > 0){
        $riga=mysql_fetch_array($q);//aggiungi questa e
    
        $_SESSION['id'] = $riga['id'];
        
        $_SESSION['nome'] = $riga['nome'];
        $_SESSION['id']=$riga['id'];//aggiungi questa
    
        //controlla se ci sono utenti  con valore 0 
    

    $checktermini=mysql_query("SELECT accettatermini FROM utenti");

    $vuota=mysql_num_rows($checktermini);
    if($vuota > 0){
    echo " <form method='POST' URL=utenti/provaaggiornaprofilo/prova.php?page=2'>";

    }else{

    echo "<br> <br> <h1> Attenzione: I termini devono essere accettati !!! </h1>";
    

    echo " <form method='POST' URL=utenti/provaaggiornaprofilo/prova.php?page=1'>"; // Per motivi di questo forum, debbo toglire il collegamento link sennò non riesco ad inviare il messaggio
    exit();
    }

        header("location: prova.php");
    }else{
        header("location: failed.php");
    }
    exit();
    

    }else{
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>form di log</title>
    </head>
    <body>
    <center>
    <!--a che cavolo serve questo link? o clicko o inserisci -->
    <h2>DIGITARE USERNAME & PASSWORD. PREMERE <a href="iscrizione.php"> QUI</a> </h2>
    <form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <font face="Comic Sans MS">
    Username: <input type="text" name="username" maxlength="30" size ="32"> <br /> <br />
    Password: <input type="password" name="password" maxlength="12" size ="14"><br /><br />
    </font>
    <input type="submit" name="log" value="Loggati" />
    </form>
    <!-- qui il tag center (obsoleto) era indentato col form -->
    </center>
    </body>
    </html>
    <?php
    }

    ob_end_flush();
    ?>

    [/PHP]

    Spero che qualcuno di voi mi dia una mano per risolvere questo piccolo problemino . Grazie per la vostra disponibilità.


  • User

    mancano le paretesi qaundo controllo se la viaribile page è vuota, a parte questo hai provato a stampare la suddetta variabile per vedere cosa c'è dentro?(1 o 2), e nel login la query $checktermini dovrebbe essere sempre maggiore di 0, in quanto non ci sono condizioni , ma gli dici solo di estrarre tutti dati
    ciao


  • User Attivo

    No,

    Sono prove che debbo fare. Quindi secondo te basta bettere > 1 anzicchè mettere >0 . provo prima a fare questa piccola modifica. Grazie della tua disponibilità.


  • User

    no, la query "SELECT accettatermini FROM utenti" estrae tutti i valori nella colonna accettatermini della tabella utenti, che il campo sia dell'username pippo o topolino, non, e poi fai la stessa query poco prima ($q)


  • User Attivo

    Quindi secondo te per uscirne fuori come dovrei fare ???? In pratica lui in fase di login deve verificare se l'utente "X" abbia accettato o meno il regolamento. Se l'ha accettato lo rimando alla pagina 2 del sito, altrimento lo rimando alla pagina1 dove c'è da accettare. Queste pagine che ti sto dicendo, non sono dei file sterni. Ma è una paggina all'interno di un'altra pagina. Non so se mis ono spiegato bene. per afrla bereve e semplicemente è strutturato così:

    [PHP]

    <input id='regolamento' type='checkbox' value='Accetta il regolamento'>Accetta il regolamento

    <br><br>
    <input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" />
    <input type="button" onClick="window.location.href='cancellazione.php';" style='padding:10px' value="Cancellati" />

    <input type='button' onclick='getpage("<?=$page+1?>")' value='Avanti' disabled='disabled'/>

    </div>

    <?php

    //Inizito seconda pagina dopo aver accettato il regolamento

    break;
    case 2: //(sarebbe la seconda pagina)
    segue il ressto del codice.
    [/PHP]

    Secondo me, questo deve andare direttamente alla seconda pagna sempre che abbia accettato il regilamento.


  • User Attivo

    Salve ragazzi,

    Ritorno su questa discussione. ma nessuno mi puo aiutare al riguardo della checkbox ???? Non sono ancora riuscito a sbrogliare la matassa. Vi prego sono mesi che ci sto studianodo senza rirultato. Spero in voi. Vui auguro una Buona Pasqua anche se passata.