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

    aiuto su popolamento select dinamiche (regione, prov, citta)

    Ciao a tutti...
    sto cercando di alimentare tre select dinamiche per la classica selezione regione-provincia-citta
    ho trovato uno script di esempio che però si limita a regione-provincie mentre io ho bisogno anche delle citta.
    pensavo che fosse piu semplice ma forse ho problemi anche a causa della struttura del mio db.
    Allora...
    Per prima cosa il database:

    TBL_REGIONI (id_regione, regione, stato_id)
    TBL_PROVINCIE (sigla, provincia, regione_id)
    TBL_CITTA ([U]id_citta[U]/, citta, sigla_prov)

    dove i campi sottolineati sono le chiavi e "sigla" e "sigla_prov" sono dei char(2) contenenti appunto la sigla della provincia.

    Il codice che ho usato è il seguente:

    codice:
    <form name="ins">
    <select name="id_regione" onChange="riempi_prov(this.options.selectedIndex)">
    <?php
    $query = "SELECT * FROM tbl_regioni ORDER BY regione";
    $result=mysql_query($query);
    echo "<option value=''> </option>";
    while($row=mysql_fetch_array($result)){
    echo "<option value='" . $row['id_regione'] . "'>" . $row['regione'] . "</option>";
    }
    ?>
    </select>
    <select name="provincia" onChange="riempi_citta(this.options.selectedIndex)">
    <option> </option>
    </select>
    <select name="citta">
    <option> </option>
    </select>
    </form>
    
    
    <SCRIPT>
    var prov=new Array();
    var sigle=new Array();
    <?
    $query = "SELECT * FROM tbl_regioni ORDER BY regione";
    $result=mysql_query($query);
    $counter=1;
    while($row = mysql_fetch_array($result)) {
        $query2 = "SELECT * FROM tbl_provincie WHERE regione_id=" . $row['id_regione'] . " ORDER BY provincia";
        $result2=mysql_query($query2);
        $counter2=0;
        $str_prov="";
        $str_sigla="";
        while($row2=mysql_fetch_array($result2)){
            if($counter2>0){
                $str_prov.=",";
                $str_sigla.=",";
              }
            $str_prov.='"'.$row2['provincia'].'"';
            $str_sigla.='"'.$row2['sigla'].'"';
            $counter2++;
        }
        echo "prov[" . $counter . "]=new Array(" . $str_prov . ") \n";
        echo "sigle[" . $counter. "]=new Array(" . $str_sigla . ") \n";
        $counter++;
    }
    ?>
    
    function riempi_prov(source) {
      with (document.ins.provincia) {
            while (options.length > 0)
              options[0]=null;
            for (i=0;i<prov[source].length;i++)
              options[i]=new Option(prov[source][i],sigle[source][i])
            options.selectedIndex=0;
          }
    }
    </SCRIPT> 
    
    
    <script language="javascript">
        var citta=new Array();
        var idcitta=new Array();
        <?
        $query = "SELECT * FROM tbl_provincie ORDER BY provincia";
        $result=mysql_query($query);
        $counter=1;
        while($row = mysql_fetch_array($result)) {
            $query2 = "SELECT * FROM tbl_citta WHERE sigla_prov='" . $row['sigla'] . "' ORDER BY citta";
            $result2=mysql_query($query2);
            $counter2=0;
            $str_citta="";
            $str_idcitta="";
            while($row2=mysql_fetch_array($result2)){
                if($counter2>0){
                    $str_citta.=",";
                    $str_idcitta.=",";
                  }
                $str_citta.='"'.$row2['citta'].'"';
                $str_idcitta.='"'.$row2['id_citta'].'"';
                $counter2++;
            }
            echo "citta[" . $counter. "]=new Array(" . $str_citta . ") \n";
            echo "idcitta[" . $counter. "]=new Array(" . $str_idcitta . ") \n";
            $counter++;
        }
        
        
        ?>
        
        function riempi_citta(source) {
          with (document.ins.citta) {
                while (options.length > 0)
                  options[0]=null;
                for (i=0;i<citta[source].length;i++)
                  options[i]=new Option(citta[source][i],idcitta[source][i])
                options.selectedIndex=0;
              }
        }
    </SCRIPT>
    Come dicevo, la selezione regione-provincia funziona benissimo mentre invece quando vado a selezionare una provincia fra quelle disponibili mi viene sbagliato l'elenco delle città. La select delle città viene popolata però con delle città che non centrano niente con la provincia selezionata. Il db ovviamente è corretto. Sembra quasi che non prenda correttamente l'indice selezionato nella select delle provincie, però non so perchè.
    Qualcuno ha un'idea?
    Appartamenti in affitto nella riviera Romagnola - Cervia, Milano Marittina, Pinarella, Tagliata, Lido di Classe, Lido di Savio. www.cervia-affitti.com

  2. #2
    AGGIORNAMENTO.

    ho provato a eliminare la selezione della regione.
    in pratica ho fatto la prima select riempita staticamente con tutte le provincie e poi la seconda select (quella delle citta) che si deve alimentare in base alla prima scelta.
    in questo caso, stesso codice, tutto funziona.
    a questo punto penso che ci sia qualcosa di sbagliato nella selezione delle provincia e nel relativo valore passato alla function riempi_citta, però non so perchè...
    Appartamenti in affitto nella riviera Romagnola - Cervia, Milano Marittina, Pinarella, Tagliata, Lido di Classe, Lido di Savio. www.cervia-affitti.com

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Prova a mettere una demo online pubblica per vedere cosa carichi nelle array js.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    eccolo...


    http://www.ticket-sharing.com/test.php

    piu lo analizzo e piu credo che il problema non sia nel riempimento degli array ma piuttosto nel valore passato dopo la selezione della provincia...
    Appartamenti in affitto nella riviera Romagnola - Cervia, Milano Marittina, Pinarella, Tagliata, Lido di Classe, Lido di Savio. www.cervia-affitti.com

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Il problema è lato server, se guardi il sorgente html prima select
    codice:
    <select name="id_regione" onChange="riempi_prov(this.options.selectedIndex)">
    <option value=''> </option><option value='1'>Abruzzo</option><option value='2'>Basilicata</option><option value='3'>Calabria</option><option value='4'>Campania</option><option value='5'>Emilia Romagna</option><option value='6'>Friuli Venezia Giulia</option><option value='7'>Lazio</option><option value='8'>Liguria</option><option value='9'>Lombardia</option><option value='10'>Marche</option><option value='11'>Molise</option><option value='12'>Piemonte</option><option value='13'>Puglia</option><option value='14'>Sardegna</option><option value='15'>Sicilia</option><option value='16'>Toscana</option><option value='17'>Trentino Alto Adige</option><option value='18'>Umbria</option><option value='19'>Valle d'Aosta</option><option value='20'>Veneto</option></select>
    la option 1 corrisponde a array provincie:
    codice:
    prov[1]=new Array("Chieti","LAquila","Pescara","Teramo")
    ed è corretto, mentre la array città la prima corrisponde:
    codice:
    citta[1]=new Array("Agrigento","Alessandria Della Rocca","Aragona","Bivona","Burgio","Calamonaci","Caltabellotta","Camastra","Cammarata","Campobello Di Licata","Canicatti","Casteltermini","Castrofilippo","Cattolica Eraclea","Cianciana","Comitini","Favara","Grotte","Joppolo Giancaxio","Lampedusa E Linosa","Licata","Lucca Sicula","Menfi","Montallegro","Montevago","Naro","Palma Di Montechiaro","Porto Empedocle","Racalmuto","Raffadali","Ravanusa","Realmonte","Ribera","Sambuca Di Sicilia","San Biagio Platani","San Giovanni Gemini","Santa Elisabetta","Santa Margherita Di Bel","Santangelo Muxaro","Santo Stefano Quisquina","Sciacca","Siculiana","Villafranca Sicula")
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    mmm... si, la select regioni-provincie sapevo che funzionava correttamente.
    quello che non capisco è perchè la select provincia non fornisce in input il corretto valore selezionato alla select città. è li il problema.
    cosa intendi che il problema è lato server?
    Appartamenti in affitto nella riviera Romagnola - Cervia, Milano Marittina, Pinarella, Tagliata, Lido di Classe, Lido di Savio. www.cervia-affitti.com

  7. #7
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Premetto che non conosco php ne mysql ma ritengo che il problema stia nel fatto che carichi tutti i dati all'apertura della pagina invece di fare delle querystring
    pagina.php?prov=bo che carica tutti i comuni, io meglio non riesco a spiegartelo e non sono neanche sicuro che sia quello, comunque posso affermare che il problema è lato server.
    Eventualmente chiedi di trasferire la discussione su php da un mod di sezione.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  8. #8
    allora... secondo me il problema non è lato server.
    continuando a fare del debug vedo che quando vado a selezionare una provincia il valore che viene passato alla select delle città non è la sigla della provincia ma un numero progressivo "counter".
    Bisognerebbe modificare la select delle provincie in modo che passi un valore tipo "MI" e non un valore numerico insignificante.
    Dopodichè la function successiva dovrebbe prendere questa sigla e usarlo per popolare la select delle città.
    Il problema è che non sono proprio un guru di javascript per fare questa modifica...
    Appartamenti in affitto nella riviera Romagnola - Cervia, Milano Marittina, Pinarella, Tagliata, Lido di Classe, Lido di Savio. www.cervia-affitti.com

  9. #9
    RISOLTO!
    Ora funziona perfettamente.
    Se qualcuno avesse bisogno vi trascrivo il codice con la relativa struttura del database necessaria.

    PS: mi resta solo un dubbio sulla prima select e su come funzioni la scelta dell'array da utilizzare per popolare le provincie dopo aver scelto la regione. Il codice cosi com'è funziona correttamente ma secondo me è rivedibile...

    Struttura DB:
    TBL_REGIONI (id_regione, regione, stato_id)
    TBL_PROVINCIE (sigla, provincia, regione_id)
    TBL_CITTA (id_citta, citta, sigla_prov)


    codice:
    <form name="ins">
    <select name="id_regione" onChange="riempi_prov(this.options.selectedIndex)">
    <?php
    $query = "SELECT * FROM tbl_regioni ORDER BY regione";
    $result=mysql_query($query);
    echo "<option value=''> </option>";
    while($row=mysql_fetch_array($result)){
    echo "<option value='" . $row['id_regione'] . "'>" . $row['regione'] . "</option>";
    }
    ?>
    </select>
    
    
    <select name="provincia" onChange="riempi_citta(this.options.value)">
    <option value="...">...</option>
    </select>
    
    <select name="citta">
    <option value="...">...</option>
    </select>
    
    
    </form>
    
    
    
    
    
    
    <SCRIPT>
    var prov=new Array();
    var sigle=new Array();
    <?
    $query = "SELECT * FROM tbl_regioni ORDER BY regione";
    $result=mysql_query($query);
    $counter=1;
    while($row = mysql_fetch_array($result)) {
        $query2 = "SELECT * FROM tbl_provincie WHERE regione_id=" . $row['id_regione'] . " ORDER BY provincia";
        $result2=mysql_query($query2);
        $counter2=0;
        $str_prov="";
        $str_sigla="";
        while($row2=mysql_fetch_array($result2)){
            if($counter2>0){
                $str_prov.=",";
                $str_sigla.=",";
              }
            $str_prov.='"'.$row2['provincia'].'"';
            $str_sigla.='"'.$row2['sigla'].'"';
            $counter2++;
        }
        echo "prov[" . $counter . "]=new Array(" . $str_prov . ") \n";
        echo "sigle[" . $counter. "]=new Array(" . $str_sigla . ") \n";
        $counter++;
    }
    ?>
    
    function riempi_prov(source) {
    
      with (document.ins.provincia) {
      
          //svuoto la select prima di ripopolarla
          num_option=options.length;
          if (num_option != null) {
            for(a=num_option;a>=0;a--){
              options[a]=null;
            }
          }
      
          options[0]=new Option("...","");
          for (i=1;i<=prov[source].length;i++)
            options[i]=new Option(prov[source][i-1],sigle[source][i-1])
          options.selectedIndex=0;
      }
    }
    
    
    </SCRIPT> 
    
    
    
    <script language="javascript">
        var citta=new Array();
        var idcitta=new Array();
        <?
        $query = "SELECT * FROM tbl_provincie ORDER BY provincia";
        $result=mysql_query($query);
        $counter=1;
        while($row = mysql_fetch_array($result)) {
            $query2 = "SELECT * FROM tbl_citta WHERE sigla_prov='" . $row['sigla'] . "' ORDER BY citta";
            $result2=mysql_query($query2);
            $counter2=1;
            $str_citta= '"' . $row['sigla'] . '"';
            $str_idcitta= '"' . $row['sigla'] . '"';
            while($row2=mysql_fetch_array($result2)){
                if($counter2>0){
                    $str_citta.=",";
                    $str_idcitta.=",";
                  }
                $str_citta.='"'.$row2['citta'].'"';
                $str_idcitta.='"'.$row2['id_citta'].'"';
                $counter2++;
            }
            echo "citta[" . $counter. "]=new Array(" . $str_citta . ") \n";
            echo "idcitta[" . $counter. "]=new Array(" . $str_idcitta . ") \n";
            $counter++;
        }
        
        
        ?>
        
        function riempi_citta(source) {
    
          var trovato;
          var j;
          
          
          // ricava l'indice dell'array tenendo conto che in posizione [j][0]
          // c'è il valore passato dalla select precedente (in questo caso la sigla della prov.)
          trovato = false;
          j = 1;
          while (trovato == false) {
            if (citta[j][0] == source)
              trovato = true;
            j++;
          }
          j = j-1;
          
          //popolo la select option
          with (document.ins.citta) {
          
                //svuoto la select prima di ripopolarla
                num_option=options.length;
                if (num_option != null) {
                  for(a=num_option;a>=0;a--){
                    options[a]=null;
                  }
                }
          
                options[0]=new Option("...","");
                for (i=1;i<=citta[j].length;i++)
                  options[i]=new Option(citta[j][i],idcitta[j][i])
                options.selectedIndex=0;
              }
        }
    </SCRIPT>
    Appartamenti in affitto nella riviera Romagnola - Cervia, Milano Marittina, Pinarella, Tagliata, Lido di Classe, Lido di Savio. www.cervia-affitti.com

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.