Visualizzazione dei risultati da 1 a 1 su 1

Visualizzazione discussione

  1. #1

    Problemi con una select dinamica

    Ciao a tutti. Alla millesima volta che mi son trovato a dover creare una select html dinamica con dati prelevati da mysql, ho deciso di creare una piccola funzione in php che mi permetta di utilizzarla anche in altri casi. Finchè si tratta di creare una semplice lista è tutto ok, il difficile arriva quando devo andare ad aggiornare i dati nel db e che quindi, dopo aver letto la scelta precedente dal db, la select deve avere una delle opzioni selezionate (<option value="3" selected>). La select html la creo facendo una semplice SELECT sulla tabella anagrafica_aziendale, tirando fuori i campi "id_azienda" e "ragione_sociale" (<option value="3">Pippo S.r.L</option>). Morale della favola, io richiamo la stessa funzione 2 volte, nello stello modulo. La prima select funziona, mentre la seconda non va la cosa di selezionare di default l' opzione e non capisco perchè. Vediamo i 2 casi separati:

    1° caso:
    Tabelle e campi interessati:
    ddt (id_ddt, id_vettore_ddt)
    anagrafica_azienda(id_azienda, ragione_sociale)
    Questo codice è per richiamare la funzione passandogli le stringhe SQL che cercheranno nel db che servono per comporre la select html dove devo elencare delle ditte di trasporto e, nel caso l' utente sia in modalità "update", rendere "selected" una delle opzioni in base all' id dell' azienda che si trova come chiave esterna anche nella tabella ddt (Nel ciclo FOR vengono create le varie OPTION e se ddt.id_id_vettore_ddt = anagrafica_aziendale.id_azienda creo l' attributo "selected" nel tag OPTION)

    Codice PHP:

    /* metto in una variabile la stringa SQL che passerò alla funzione per trovare anagrafica_aziendale.id_azienda (l' id dell' azienda) ed anagrafica_aziendale.ragione_sociale (l' etichetta) */

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

    /* creo un' altra variabile con una seconda stringa SQL che trova l' id dell' azienda nella tabella "ddt", il quale verrà utilizzato nel ciclo FOR per capire quale delle OPTION dovrà essere selezionata */

    $find_id_1 "SELECT id_vettore_ddt FROM ddt WHERE id_ddt =".$_SESSION['id_ddt'];
    //Richiamo la funzione

    f_crea_select_da_db("lista_vettori"$select_query_1$find_id_1"id_vettore_ddt"); 
    Questa è la funzione:

    Codice PHP:

    /*
    Variabili da passare alla funzione:
    $select_name: è il nome della select (<select name=$select_name> 
    $select_query: codice sql per trovare l' etichetta della opzione(<option>Etichetta</option>) 
    $find_id: è un' altra stringa sql che va a prelevare l' id
     $column_name: è il nome della colonna dove si trova l' id
    */

    function f_crea_select_da_db($select_name$select_query$find_id$column_name){  //eseguo la query per trovare id azienda e ragione sociale nella tabella "anagrafica_aziendale"  $result = mysql_query($select_query);//sql passato alla funzione  
    $num mysql_num_rows($result);
      if (
    $num 0)    {    //Inizializzo la variabile per l' attributo "selected"    
                                
    $selected Null;            
                                
    //Creo il tag SELECT    
                                
    echo '<select name="'.$select_name.'">';            
                                
    //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 che si trova nella prima colonna                                             $etichetta = $row[1]; //recupera l' etichetta         
                                        //se deve aggiornare i dati 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);//sql passato alla funzione                                                      $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[$column_name] == $row[0])
                                              
    $selected "selected"; }                                     }                                  
                                              
    //creo il tag OPTION  
                                              
    echo "<option value=".$id_option." ".$selected.">".$etichetta."</option>";                               }        

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


    Quindi ricapitolando quello che ho postato fino ad ora funziona perfettamente. Il problema arriva quando nello stesso modulo devo richiamare la stessa funzione per creare un' altra select ma con dati diversi in tabelle diverse:

    2° caso
    Tabelle e campi interessati:
    anagrafica_aziendale (id_azienda, ragione_sociale) (come prima)
    carico_materiali (codice, id_azienda_out)
    Codice PHP:
    $select_query_2 "SELECT id_azienda, ragione_sociale FROM anagrafica_aziendale";$find_id_2 "SELECT id_azienda_out 
                      FROM carico_materiali 
                      WHERE codice ='"
    .$_SESSION['codice_blocco']."'";   
    f_crea_select_da_db("lista_aziende"$select_query_2$find_id_2"id_azienda_out"); 
    Cioè in pratica la funzione funziona nel primo caso ma non funziona nel secondo, che non risolve la parte della creazione dell' attributo selected, o meglio, lo crea in tutte le option anche se ho verificato che i valori sono giusti ed ad ogni ciclo fa l' equiparazione...se 3=1 $selected="selected"...se 3=2 $selected="selected"...se 3=3 $selected="selected"...e cosi via...
    Tante grazie a chi mi helpa
    Ultima modifica di camionistaxcaso; 31-03-2014 a 22:06

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.