+ Rispondi alla Discussione
Risultati da 1 a 3 di 3

[PROBLEMA]checkbox dinamiche php-mysql

Ultimo Messaggio di paperinik4 il:
  1. #1
    User Newbie
    Data Registrazione
    Oct 2012
    Località
    busto arsizio
    Messaggi
    9

    [PROBLEMA]checkbox dinamiche php-mysql

    Buonasera a tutti, ho un problema che mi sta facendo fondere il cervello, mi rivolgo a voi sperando in un vostro aiuto.

    Devo realizzare una checkbox multipla collegata a database del tipo:

    elemento1[]
    elemento2[]
    elemento3[]


    L'utente deve poter "aggiornare" il checked della checkbox dinamicamente.

    Quindi al caricamento della pagina, leggendo i valori da database potrebbe essere:

    elemento1[]
    elemento2[X]
    elemento3[]

    e dopo la modifica potrà essere:

    elemento1[]
    elemento2[X]
    elemento3[X]

    e devo poter prevedere anche lo stato di decheck:

    elemento1[]
    elemento2[]
    elemento3[X]

    In php ho creato questo codice:

    Codice PHP:

    $myCheck 
    $_POST['myCheck'];
     if(isset(
    $myCheck)){
     foreach (
    $myCheck as $key => $value) {                                                                                                                                                                                                            
    $selmysql_db_query($db_login,"SELECT evidenza FROM servizi WHERE id='$key'" ,$connessione);    //seleziono il campo evidenza che vale 0 o 1 che è poi il valore della checkbox                                                                                                                                    
    $s mysql_result($sel,0,"evidenza"); 
                  if(
    $s==0){
                     
    $v=1;
                     
    mysql_db_query($db_login,"update ".$db_servizi." set evidenza='".$v."' where id='".$key."' ",$connessione);
                  } else{ 
                     
    $v=0;
                      
    mysql_db_query($db_login,"update ".$db_servizi." set evidenza='".$v."' where id='".$key."' ",$connessione);                                                                        } 


    e quest'altro codice che "stampa" la checkbox



    Codice PHP:
    //query database
    while ( $i<$num ){ 

    $id mysql_result($news,$i,"id"); 
    $titolo mysql_result($news,$i,"titolo");                                                                                                                                
    $evidenza mysql_result($news,$i,"evidenza");  

    //inizio elemento                                                                                                                                                                                                 
    echo($titolo);
       if(
    $evidenza == 1){
         echo(
    '<input type="checkbox" checked="checked" id="mycheck" value="'.$id.'" name="myCheck['.$id.']" class="regular-checkbox big-checkbox" />');                                                                    
       } else{ 
       echo(
    '<input type="checkbox" id="mycheck" value="'.$id.'" name="myCheck['.$id.']" class="regular-checkbox big-checkbox" />');
       echo(
    '<label for="');echo($id);echo('"></label>');

    ....... 

    La stampa dei risultati dal database alle checkbox funziona, l'aggiornamento dei campi non viene intercettato dalla POST il deseleziona, qualche suggerimento per risolvere il problema??

  2. #2
    Moderatore L'avatar di lucabartoli
    Data Registrazione
    Feb 2010
    Località
    Torino
    Messaggi
    510
    Ciao Daniele,
    intanto ti consiglierei di utilizzare funzioni non deprecate per il tuo script.
    Un flusso comunemente utilizzato (come riportato da php.net) è questo:
    Codice PHP:
    if (!$link mysql_connect('mysql_host''mysql_user''mysql_password')) {
        echo 
    'Could not connect to mysql';
        exit;
    }

    if (!
    mysql_select_db('mysql_dbname'$link)) {
        echo 
    'Could not select database';
        exit;
    }

    $sql    'SELECT foo FROM bar WHERE id = 42';
    $result mysql_query($sql$link);

    if (!
    $result) {
        echo 
    "DB Error, could not query the database\n";
        echo 
    'MySQL Error: ' mysql_error();
        exit;
    }

    while (
    $row mysql_fetch_assoc($result)) {
        echo 
    $row['foo'];
    }

    mysql_free_result($result); 
    Puoi anche ottenere le righe come oggetti con mysql_fetch_object.

    Ti consiglio anche di validare sempre l'input (o almeno filtrarlo), perché l'SQL injection può causarti parecchi guai.

    Quanto al tuo problema:
    La tua supposizione che un campo vuoto valga zero è errata, e per questo il deseleziona non può funzionare. Un campo senza check vale null e non viene proprio passato.
    La soluzione rapida è crearti un campo hidden con lo stesso name che valga zero, appena prima del campo:
    Codice PHP:
    echo('<input type="hidden" name="myCheck['.$id.']" value="0" /><input type="checkbox" checked="checked" id="mycheck" value="'.$id.'" name="myCheck['.$id.']" class="regular-checkbox big-checkbox" />'); 
    In questo caso se il campo checkbox non è selezionato, il campo hidden viene passato. Se invece la checkbox è selezionata, il valore dell'hidden viene sovrascritto dalla checkbox e troverai il valore corretto nella pagina di destinazione.
    Un'altra supposizione errata è che il campo selezionato passi 1: in realtà una checkbox selezionata passa il valore del value (nel tuo caso $id). E' il comportamento che cercavi?

    Una soluzione più pulita consiste nel crearti un vettore dei possibili id, con i suoi value (impostando un default), poi fare un merge del vettore di default con quello che ti viene passato da myCheck (o un foreach sul vettore di default e se il valore è cambiato lo sovrascrivi). Attenzione però a inserire nella query solamente id previsti e non accettare qualsiasi cosa venga messa dentro.

    Luca

  3. #3
    User
    Data Registrazione
    Jun 2011
    Località
    Roma
    Messaggi
    122

    Problema checkbox update

    Salve ragazzi,

    M'intrometto nella discussione. Allora, non capisco il perchè se metto un if e dentro l'i metto l'uopdate per il checkbox, non mi fa l'update, se invece tolgo l'if e metto solo l'update, l'update lo fa prima di eseguire il checcked. Di quello che sto parlando, ora lo posto qua:

    regolamento

    Codice PHP:

    ?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);

    echo "<title>Pag: $page</title>";
    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">
        <br> <br>
    <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='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
     
        
    if($_POST['checkbox']){

    $qry "UPDATE utenti SET accettatermini='1'  WHERE id='".$id."'";       //aggiornamento dati nel db
            
    echo $qry
     if (
    mysql_query($qry)){ 
        echo 
    "... Aggiornamento effettuato correttamente...."
         
    } else { 
        echo 
    "Errore: Non è stato possibile effettuare l'aggiornamento richiesto"

     }
     }

    //Inizito seconda pagina dopo aver accettato il regolamento

            
    break;
        case 
    2:
     
    $checktermini=mysql_query("SELECT accettatermini FROM utenti WHERE accettatermini='0'");
    $vuota=mysql_num_rows($checktermini);
    if(
    $vuota 0){
        echo 
    "<br> <br> <h1> Il regolamento deve essere accettato !!! </h1>";
    ?>
        
    <input type='button' onclick='getpage("<?=$page-1?>")' value='Indietro' hidden/>  
    <?php
    exit();
    echo 
    $checktermini;
    }
        
    ?>
    <link rel="stylesheet" type="text/css" href="coloredisfondo.css">


        <?php

    // Ricerca e visualizza l'utente che si è¨ connesso con le info

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


    echo "<br> <br>";
            echo 
    '<p align="left">';
            echo 
    " Cognome: "$query['cognome']; 
            echo 
    '<p align="left">';
            echo 
    '<p align="left">';
            echo 
    "Nome: "$query['nome']; 
            echo 
    "<br> ";
            echo 
    '<p align="left">';
            echo 
    "Username: "$query['username']; 
            echo 
    "<br>";
            echo 
    '<p align="left">';
            echo 
    "EMail: ".$query['email'];

    ?>
        
             <form action= 'aggiornaprofilo.php' method="POST">

    <p align="left">          

    Data di Nascita Giorno: 

    <?php 

    require_once("arraylistecitta.php");


    // Inizio Selezione data di nascita

    //Giorno

    echo "Giorno: ";
    echo 
    "<select name=\"giorno\">";
    echo 
    "<option value=\"\"> seleziona </option>";
    for(
    $gg=1$gg<=31$gg++){
     if(
    strlen($gg)< 2){$gg "0".$gg;}  
     echo 
    "<option value=\"$gg\"> $gg </option>";
    }
    echo 
    "</select>";

    //Mese

    echo " Mese: ";

    echo 
    "<select name=\"mese\">";
    echo 
    "<option value=\"\"> seleziona </option>";

    foreach(
    $mese as $valore){
        echo 
    "<option value=\"$valore\">$valore";
        
    //echo "<option value=\"$valore\">$valore";
    echo "</option> ";
    }
     echo 
    "</select>";

     
    //Anno

    echo " Anno: ";
    $da=1950;
    $al=2014;
    echo 
    "<select name=\"anno\">";
    echo 
    "<option value=\"\"> seleziona </option>";
    for(
    $aa=$da$aa<=$al$aa++){
        echo 
    "<option value=\"$aa\"> $aa </option>";
    }
    echo 
    "</select>" ;

    // Inizio selezione Città 

    echo"<br> <br>";

    echo 
    "Città : ";

    echo 
    "<select name=\"citta\">";
    echo 
    "<option value=\"\"> seleziona </option>";

    foreach(
    $citta as $valore){
        echo 
    "<option value=\"$valore\">$valore";
        
    //echo "<option value=\"$valore\">$valore";
    echo "</option> ";
    }
     echo 
    "</select>";

     
    // Inizio selezione Province
     
    echo " Provincia: ";

    echo 
    "<select name=\"provincia\">";
    echo 
    "<option value=\"\"> seleziona </option>";
    foreach(
    $province as $valore){
        echo 
    "<option value=\"$valore\">$valore";
        
    //echo "<option value=\"$valore\">$valore";
    echo "</option> ";
    }
     echo 
    "</select>"
     
     
    //Anno_diploma

    echo " Anno Diploma: ";
    $da=1950;
    $al=2014;
    echo 
    "<select name=\"anno_diploma\">";
    echo 
    "<option value=\"\"> seleziona </option>";
    for(
    $aa=$da$aa<=$al$aa++){
        echo 
    "<option value=\"$aa\"> $aa </option>";
    }
    echo 
    "</select>" ;;


    //Anno_laurea

    echo " Anno Laurea: ";
    $da=1950;
    $al=2014;
    echo 
    "<select name=\"anno_laurea\">";
    echo 
    "<option value=\"\"> seleziona </option>";
    for(
    $aa=$da$aa<=$al$aa++){
        echo 
    "<option value=\"$aa\"> $aa </option>";
    }
    echo 
    "</select>" ;

    //Sesso

    echo " Sesso: ";

    echo 
    "<select name=\"sesso\">";
    echo 
    "<option value=\"\"> seleziona </option>";

    foreach(
    $sesso as $valore){
        echo 
    "<option value=\"$valore\">$valore";
        
    //echo "<option value=\"$valore\">$valore";
    echo "</option> ";
    }
     echo 
    "</select>";


    //Stato Civile

    echo " Stato Civile: ";

    echo 
    "<select name=\"statocivile\">";
    echo 
    "<option value=\"\"> seleziona </option>";
    foreach(
    $statocivile as $valore){
        echo 
    "<option value=\"$valore\">$valore";
        
    //echo "<option value=\"$valore\">$valore";
    echo "</option> ";
    }
     echo 
    "</select>";
     
     
    //Occupazione
     
     
    echo "<br> <br>";

    $q=mysql_query("SELECT occupazione FROM utenti ORDER BY occupazione");
    $vuota=mysql_num_rows($q);
    if(
    $vuota 0){//fa vedere la select solo se ci sono componenti e mostra solo il'input nuovocomponente, in pratica solo la prima volta
        
    echo "Attività <select name=\"occupazione\">";
            echo 
    "<option value=\"\">-seleziona-</option>";
        while(
    $riga=mysql_fetch_array($q)){
            echo 
    "<option value=\"".$riga['occupazione']."\">".$riga['occupazione']."</option>";
        }
    //fine while
    echo "</select>";
    }
    //fine if vuota


    ?>

    Nuova attività  da inserire: <input type='text' name='nuovaoccupazione' />
    <?php

    echo "<br> <br>";

    //Titolo_Studio

    $q=mysql_query("SELECT titolo_studio FROM utenti ORDER BY titolo_studio");
    $vuota=mysql_num_rows($q);
    if(
    $vuota 0){//fa vedere la select solo se ci sono componenti e mostra solo il'input nuovocomponente, in pratica solo la prima volta
        
    echo "Titolo di studio: <select name=\"titolo_studio\">";
            echo 
    "<option value=\"\">-seleziona-</option>";
        while(
    $riga=mysql_fetch_array($q)){
            echo 
    "<option value=\"".$riga['titolo_studio']."\">".$riga['titolo_studio']."</option>";
        }
    //fine while
    echo "</select>";
    }
    //fine if vuota
    ?>
        Nuovo titolo di studio da inserire: <input type='text' name='nuovotitolostudio' />
      
    <?php
    //Titolo_laurea

    $q=mysql_query("SELECT titolo_laurea FROM utenti ORDER BY titolo_laurea");
    $vuota=mysql_num_rows($q);
    if(
    $vuota 0){//fa vedere la select solo se ci sono componenti e mostra solo il'input nuovocomponente, in pratica solo la prima volta
        
    echo "Titolo di laurea: <select name=\"titolo_laurea\">";
            echo 
    "<option value=\"\">-seleziona-</option>";
        while(
    $riga=mysql_fetch_array($q)){
            echo 
    "<option value=\"".$riga['titolo_laurea']."\">".$riga['titolo_laurea']."</option>";
        }
    //fine while
    echo "</select>";
    }
    //fine if vuota
    ?>
        Nuovo titolo di laurea da inserire: <input type='text' name='nuovolaurea' />
      
    <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:
        break;
    }
    ?>
    <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>
    altromodo

    Codice PHP:

    <?php
     
       
    # if($_POST['checkbox']){ //se tolgo questa riga, l'update me lo fa regolamente. Mi sapete dire cosa c'è che non gli piace ????

    $qry "UPDATE utenti SET accettatermini='1'  WHERE id='".$id."'";       //aggiornamento dati nel db
            
    echo $qry
     if (
    mysql_query($qry)){ 
        echo 
    "... Aggiornamento effettuato correttamente...."
         
    } else { 
        echo 
    "Errore: Non è stato possibile effettuare l'aggiornamento richiesto"

     }
     }
    ?>
    Non capisco perchè senza if lo fa e con l'if non lo fa. In findei conti mi hanno detto che non c'è bisogno di mettere un if con dopo =="accetta regolamento" che è inutile. Basta un if così per gestire la checkbox. Datemi una mano vi pregoi non ci sto capendo più niente. Fra le altre cose ci dovrebbe essere anche un controllo che verifichi quaale utente abbia accettato il regolamento oppure no e ci dovrebbe essere un redirect che lo manda alla pagina 1 oppre alla 2. Grazie a tutti e spero in voi.

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.