Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Select dinamica con attributo checked in base a valore nel DB

    Ciao a tutti e scusate se riposto un problema simile ma sto impazzendo da giorni ormai e le sto provando tutte.
    Sto cercando realizzare una select che viene creata in base ad alcuni dati presi dal DB.
    La select si crea prendendo i dati dalla tabella anagrafica_aziendale (id_azienda, ragione_sociale) e vorrei rendere selezionata una certa voce in base al dato che si trova nel campo id_azienda_out della tabella carico_materiali (id_blocco, id_azienda_out) quindi se carico_materiali.id_azienda_out = anagrafica_aziendale.id_azienda creo l' attributo checked nella option.

    Codice PHP:
    /* eseguo la query per trovare id azienda e ragione sociale 
        nella tabella anagrafica_aziendale */
    $select_query "SELECT id_azienda, ragione_sociale FROM anagrafica_aziendale";
    $find_id "SELECT id_azienda_out 
                   FROM carico_materiali 
                   WHERE id_blocco ='"
    .$_SESSION['id_blocco']."'";

    $result mysql_query($select_query);
    $num mysql_num_rows($result);
    if (
    $num 0)
    {   
    //Inizializzo la variabile per l' attributo "selected"   
         
    $selected Null;           

         
    //Apro la SELECT   
         
    echo '<select name="lista_aziende">';           

         
    //Creo un ciclo FOR per creare le opzioni della SELECT   
         
    for($x=0$x<$num$x++)   
         {    
    /* trovo il valore da mettere nell' option e la relativa etichetta */      
              
    $row mysql_fetch_row($result);

               
    /* recupero l' id che si trova nella prima colonna
                   della tabella anagrafica_aziendale */
              
    $id_option $row[0];       
          
               
    /* recupero l' etichetta che si trova 
                   nella seconda colonna */
               
    $etichetta $row[1];
           
               
    //se sto aggiornando i dati      
               
    if ($_SESSION["carico_mode"] == "update")      
                 {     
    /* trovo il valore di id_azienda_out nella tabella 
                            carico_materiali per equipararlo a id_azienda
                            della tabella anagrafica_aziendale */     

                        
    $result_id mysql_query($find_id);     
                        
    $row_id mysql_fetch_array($result_id);                     

                         
    /* Ad ogni ciclo controllo se 
                             carico_materiali.id_azienda_out è = 
                             a anagrafica_aziendale.id_azienda
                             e nel caso creo l' attributo html "selected" 
                         */                      

                         
    if ($row_id["id_azienda_out"] == $row[0])     
                           { 
    $selected "selected"; }

        }            
       
    //creo il tag OPTION   
       
    echo "<option value=".$id_option." ".$selected.">".$etichetta."</option>";                      }   

       
    //chiudo la select          
       
    echo '</select>';        

    Ho fatto 10mila controlli, stampato a video l' impossibile...i valori arrivano tutti ma non capisco perchè l' output viene cosi:

    codice HTML:
    <select name="lista_aziende">
      <option value="1">Azienda 1 S.r.L</option>
      <option value="2" selected="">Azienda 2 S.r.L</option>
      <option value="3" selected="">Azienda 3 S.r.L S.n.C</option>           
      <option value="4" selected="">Azienda 4 S.r.L</option>         
      <option value="5" selected="">Azienda 5 S.r.L</option>
      <option value="6" selected="">Azienda 6 S.r.L</option>
      <option value="7" selected="">Azienda 7 S.n.C.</option>
    </select>
    Grazie


    P.s. : Lo stesso script l' ho usato per creare un' altra select praticamente uguale, cambiano solo le stringhe SQL e la tabella dove prendo l' id di riferimento per creare l' attributo checked e funziona. Bah!
    Ultima modifica di camionistaxcaso; 02-04-2014 a 21:43

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sicuro che sia proprio questo il codice che usi? Hai omesso qualcosa?
    Perché l'unico punto dove specifichi $selected è questo
    Codice PHP:
    if ($row_id["id_azienda_out"] == $row[0])     
        { 
    $selected "selected"; } 
    e la stampa degli option la fai così
    Codice PHP:
    echo "<option value=".$id_option." ".$selected.">".$etichetta."</option>"
    Ma poi nel form ti ritrovi ad esempio

    <option value="3" selected="">Azienda 3 S.r.L S.n.C</option>

    come fa a generare la stringa selected="" (quindi in particolare ="" ) se non sta scritto da nessuna parte nel tuo codice?

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Aggiungo: tra l'altro ho notato solo ora che la stampa dei tag option sta fuori dal ciclo for, come fai a generarne più di uno???

    E ancora: sul risultato di una query puoi ciclare con
    while( $row = mysql_fetch_array($result) )

    così ti evitiil controllo se c'è o no un risultato e non devi contare quanti sono per creare il ciclo for, pensa a tutto il while.

    Infine: le istruzioni mysql_ sono deprecate, presto non funzioneranno più, passa a mysqli_ oppure a PDO.
    Ultima modifica di Alhazred; 03-04-2014 a 11:49

  4. #4
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Sicuro che sia proprio questo il codice che usi? Hai omesso qualcosa?
    Perché l'unico punto dove specifichi $selected è questo
    Codice PHP:
    if ($row_id["id_azienda_out"] == $row[0])     
        { 
    $selected "selected"; } 
    e la stampa degli option la fai così
    Codice PHP:
    echo "<option value=".$id_option." ".$selected.">".$etichetta."</option>"
    Ma poi nel form ti ritrovi ad esempio

    <option value="3" selected="">Azienda 3 S.r.L S.n.C</option>

    come fa a generare la stringa selected="" (quindi in particolare ="" ) se non sta scritto da nessuna parte nel tuo codice?
    Ciao e grazie per il tempo che mi stai dedicando
    Non per forza si deve usare selected="" , nel tag option per rendere la voce selezionata, si puo mettere solo "selected" cosi:
    codice HTML:
    <option name="pippo" selected>Etichetta</option>
    Ne sono certo perchè, come ho gia scritto nel post, quando faccio la stessa cosa con la lista dei vettori funziona tutto perfettamente...

    Per quanto riguarda il ciclo, le option le crea al suo interno, forse hai visto male anche perchè quando posti il codice nel forum l' indentazione non è il massimo...sono sicuro ho appena controllato. Ciao e grazie ancora.

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Questo lo so, ma nel codice HTML che hai postato ci sono dei selected="" che stando al codice PHP non dovrebbero esistere, quindi prima di aiutarti bisogna essere sicuri che ci si stia tutti riferendo allo stesso codice, altrimenti non si capisce niente.

    Inoltre, come ti ho già detto, il codice PHP che hai postato non può generare più di un tag <option> perché l'echo che li dovrebbe stampare sta fuori dal ciclo.

    Quindi posta il codice PHP che stai effettivamente usando adesso.

  6. #6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Questo lo so, ma nel codice HTML che hai postato ci sono dei selected="" che stando al codice PHP non dovrebbero esistere, quindi prima di aiutarti bisogna essere sicuri che ci si stia tutti riferendo allo stesso codice, altrimenti non si capisce niente.

    Inoltre, come ti ho già detto, il codice PHP che hai postato non può generare più di un tag <option> perché l'echo che li dovrebbe stampare sta fuori dal ciclo.

    Quindi posta il codice PHP che stai effettivamente usando adesso.
    A me l' output HTML di chrome mi da questo:

    <select name="lista_aziende">
    <option value="1">..... S.r.L</option>
    <option value="2" selected>...SRL</option>
    <option value="3" selected>..... C. S.n.C</option>
    <option value="4" selected>...SPA</option>
    <option value="5" selected>....spa</option>
    <option value="6" selected>... S.r.L</option>
    <option value="7" selected>... & C. S.n.C.</option>
    </select>
    è il forum che lo modifica

    Codice PHP che sto usando:
    Codice PHP:
    <?php

    //eseguo la query per trovare id azienda e ragione sociale nella tabella "anagrafica_aziendale"
    $select_query "SELECT id_azienda, ragione_sociale FROM anagrafica_aziendale";        
    $find_id "SELECT id_azienda_out FROM carico_materiali WHERE id_blocco = 1"
    $result mysql_query($select_query);    
    $num mysql_num_rows($result);    

    if (
    $num 0)    
    {
       
    //Inizializzo la variabile per l' attributo "selected"        
       
    $selected Null;                

       
    //Creo il tag SELECT        
       
    echo '<select name="lista_aziende">';                    

       
    //Creo un ciclo FOR per creare le opzioni della SELECT            
       
    for($x=0$x<$num$x++)                    
           {                

               
    //trovo il valore da mettere nell' option e la relativa etichetta                
               
    $row mysql_fetch_row($result);                            
               
    $id_option $row[0]; //recupera l' id nella prima colonna                            
               
    $etichetta $row[1]; //recupera l' etichetta nella seconda colonna                

               //se sto aggiornando i dati                
               
    if ($_SESSION["carico_mode"] == "update")                
                {                
                   
    //trovo l' id nell' altra tabella per equipararlo all' altro                
                   
    $result_id mysql_query($find_id);                
                   
    $row_id mysql_fetch_array($result_id);                                

                   
    //se carico_materiali.id_azienda_out è = a                                 
                   //anagrafica_aziendale.id_azienda                   
                   //creo l' attributo html "selected"                
                   
    if ($row_id["id_azienda_out"] == $row[0])                    
                     { 
    $selected "selected"; }                                    

                 }                            

                   
    //creo il tag OPTION                                
                   
    echo "<option value=".$id_option." ".$selected.">".$etichetta."</option>";                        
           }
    //end ciclo for
                    
       
    echo '</select>';                

    }    
    ?>

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ok, adesso va bene.
    La variabile $selected la devi resettare ad ogni iterazione del ciclo, alrtimenti dalla prima volta che si esegue $selected = 'selected' in poi varrà sempre 'selected'

    quindi
    $selected = Null;

    che in realtà faresti meglio a dichiarare come
    $selected = '';

    la devi mettere come prima istruzione dentro il ciclo for.

  8. #8
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ok, adesso va bene.
    La variabile $selected la devi resettare ad ogni iterazione del ciclo, alrtimenti dalla prima volta che si esegue $selected = 'selected' in poi varrà sempre 'selected'

    quindi
    $selected = Null;

    che in realtà faresti meglio a dichiarare come
    $selected = '';

    la devi mettere come prima istruzione dentro il ciclo for.
    Grandissimo ora funziona...però non capisco come mai nell' altro caso funziona lo stesso anche se $selected = ""; la metto fuori dal ciclo FOR
    Il codice è questo, c' è altra roba in mezzo non farci caso

    Codice PHP:
    <?php
    //query per trovare id azienda e ragione sociale nella tabella "anagrafica_aziendale"

    $select_query "SELECT id_azienda, ragione_sociale 
                            FROM anagrafica_aziendale 
                            WHERE type_azienda = 'v'"
    ;

    //query per trovare la chiave esterna ddt.id_vettore_out

    $find_id "SELECT id_vettore_out 
                   FROM ddt WHERE id_ddt ="
    .$_SESSION['id_ddt'];

    $result mysql_query($select_query);$num mysql_num_rows($result);    

    if (
    $num 0)    
    {        
        
    //Inizializzo la variabile per l' attributo "selected"        

        
    $selected Null;                

         
    //Creo il tag SELECT

         
    echo '<select name="lista_vettori" ' .$_SESSION["dis_vet_opt"].'>';                

         
    //Creo un ciclo FOR per creare le opzioni della SELECT

            
    for($x=0$x<$num$x++)                    

             {
                   
    //trovo il valore da mettere nell' option e la relativa etichetta

                   
    $row mysql_fetch_row($result);                       
                   
    $id_option $row[0]; //recupera l' id nella prima colonna                       
                   
    $etichetta $row[1]; //recupera l' etichetta nella seconda colonna
                
                    //se sto aggiornando creo l' attributo selected                
                    
                    
    if ($_SESSION["carico_mode"] == "update")                
                    {                  
                       
    //trovo l' id nell' altra tabella per equipararlo all' altro                  
                       
                       
    $result_id mysql_query($find_id);                  
                       
    $row_id mysql_fetch_array($result_id);                                      

                        
    //se ddt.id_vettore_ddt è = a anagrafica_aziendale.id_azienda                  
                        //creo l' attributo html "selected"                                  

                        
    if ($row_id["id_vettore_out"] == $row[0])                    
                        { 
    $selected "selected"; }                                     

                     }                            

              
    //creo il tag OPTION                                
              
    echo "<option value=".$id_option." ".$selected.">".$etichetta."</option>";  
           }
        
    //chiudo il tag select            
        
    echo '</select>';                

    }    
    ?>

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Probabilmente perché in questo caso
    if ($row_id["id_vettore_out"] == $row[0])

    è vera solo nell'ultima iterazione, in tal caso non puoi accorgerti del problema.

  10. #10
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Probabilmente perché in questo caso
    if ($row_id["id_vettore_out"] == $row[0])

    è vera solo nell'ultima iterazione, in tal caso non puoi accorgerti del problema.
    Ah forse ho capito...testandolo con l' ultimo vettore funzionava, ma non avrebbe funzionato con un altro...infatti a pensarci bene credo che ci sarei arrivato che non resettavo la variabile, mi ha confuso il fatto che sembrava che con i vettori funzionasse. Ciao e grazie ancora

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.