• Super User

    caselle select dinamiche

    ciao a tutti,

    vorrei creare un form con delle select dinamiche come ci sono in molti siti , mi spiego meglio:

    sto implementando un motore di ricerca dove bisogna selezionare la regione , la provincia e la citta , io vorrei poterle far scegliere dinamicamente cioe prima seleziona la regione ,es calabria, da li mi passa nell'altra select tutte le 5 provincie, seleziono la provincia e a quel punto nell'ultima select mi passa tutti i comuni della relativa provincia, inanzitutto chiedo : si puo fare con javascript?

    o ci sono script dai quali possa prendere spunto per fare un lavoro del genere?

    grazie.


  • Super User

    Ciao 🙂

    Puoi dare una lettura a questa pagina, ho dato uno sguardo veloce e credo illustri abbastanza bene come fare. In caso di problemi fammi sapere 😉


  • User

    preciso che questo nuovo approccio non è rivoluzionario per tutti ma riguarda solo le mie limitate competenze nei confronti del javascript.
    Ho letto in giro e stò approfondendo le mie conoscenze con ajax ma prima ho voluto provare a fare una select dinamica che si popolasse tramite un db utilizzando una semplice funzione in js e il resto è affidato al php.
    Ora il codice funziona ma non come vorrei.
    Premetto che la prima select mi sceglie l'operazione, scelta questa mi compare una seconda select con la lista dei "servizi", dopodichè scelto il servizio si va alla lista delle "aree", così procedendo anche per gli "ambiti", "sottoambiti" ed infine le "macroattività".
    [php]
    <?php
    include ("config.php");
    include ("user.php");
    ?>
    <?php
    if (isset ($_POST['ordine']))
    $ordine = $_POST['ordine'];
    else
    $ordine = "0";
    ?>
    <?php
    if (isset ($_POST['servizi']))
    $servizi = $_POST['servizi'];
    else
    $servizi = "0";
    //echo "$servizi<br/>";
    ?>
    <?php
    if (isset ($_POST['aree']))
    $aree = $_POST['aree'];
    else
    $aree = "0";
    //echo "$aree<br/>";
    ?>
    <?php
    if (isset ($_POST['aop']))
    $aop = $_POST['aop'];
    else
    $aop = "0";
    //echo "$aop<br/>";
    ?>
    <?php
    if (isset ($_POST['sotta']))
    $sotta = $_POST['sotta'];
    else
    $sotta = "0";
    //echo "$sotta<br/>";
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Select dinamica CSO</title>
    <script type="text/javascript">
    <!--
    function invia()
    {
    document.form1.submit();
    }
    //-->
    </script>
    </head>
    <body>
    <form name="form1" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
    <p>
    <select name="ordine" onchange="invia()">
    <option value="0"<?php echo ($ordine == "0" ? " selected="selected"" : ""); ?>>----- seleziona -----</option>
    <option value="1"<?php echo ($ordine == "1" ? " selected="selected"" : ""); ?>>Servizi</option>
    <!--<option value="2"<?php echo ($ordine == "2" ? " selected="selected"" : ""); ?>>Attrici per cognome</option>-->
    </select>
    </p>
    <?php if ($ordine == "1") { ?>
    <p>
    <?php
    $sql_servizi="SELECT ID_SERV, N_SERV FROM t_serv ORDER BY ORD";

    $result_mssql_servizi=@mssql_query($sql_servizi,$link);

    if(!$result_mssql_servizi) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_servizi="<option value='0' $servizi == '0' ? ' selected='selected'' : ''>----- seleziona -----</option>";
    while($result_servizi=mssql_fetch_array($result_mssql_servizi)){
    $ids_serv = $result_servizi ["ID_SERV"];//sigla
    $n_serv=$result_servizi ["N_SERV"];//nome per esteso
    $opt_servizi.="<option value='$ids_serv'>$n_serv</option>";
    }
    ?>
    SERVIZI <select name="servizi" onchange="invia()">
    <?php echo "$opt_servizi";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($servizi != "0") { ?>
    <p>
    <?php
    $sql_aree="SELECT * FROM tl_serv_aree INNER JOIN t_aree ON tl_serv_aree.ID_AREA=t_aree.ID_AREA WHERE ID_SERV='$servizi' ORDER BY ORD";

    $result_mssql_aree=@mssql_query($sql_aree,$link);

    if(!$result_mssql_aree) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_aree="<option value='0' ($aree == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_aree=mssql_fetch_array($result_mssql_aree)){
    $ids_area = $result_aree ["ID_AREA"];//sigla
    $n_area=$result_aree ["N_AREA"];//nome per esteso
    $opt_aree.="<option value='$ids_area'>$n_area</option>";
    }
    ?>
    AREE <select name="aree" onchange="invia()">
    <?php echo "$opt_aree";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($aree != "0") { ?>
    <p>
    <?php
    $sql_aop="SELECT * FROM tl_aree_a_op INNER JOIN t_a_op ON tl_aree_a_op.ID_A_OP=t_a_op.ID_A_OP WHERE ID_AREA='$aree' ORDER BY ORD";

    $result_mssql_aop=@mssql_query($sql_aop,$link);

    if(!$result_mssql_aop) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_aop="<option value='0' ($aop == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_aop=mssql_fetch_array($result_mssql_aop)){
    $id_aop = $result_aop ["ID_A_OP"];//numero univoco
    $ids_aop = $result_aop ["S_A_OP"];//sigla
    $n_aop=$result_aop ["N_A_OP"];//nome per esteso
    $opt_aop.="<option value='$id_aop'>$n_aop</option>";
    }
    ?>
    AMBITI OPERATIVI <select name="aop" onchange="invia()">
    <?php echo "$opt_aop";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($aop != "0") { ?>
    <p>
    <?php
    $sql_sotta="SELECT * FROM tl_a_op_sott_a INNER JOIN t_sott_a ON tl_a_op_sott_a.ID_SOTT_A=t_sott_a.ID_SOTT_A WHERE ID_A_OP='$aop' ORDER BY ORD";

    $result_mssql_sotta=@mssql_query($sql_sotta,$link);

    if(!$result_mssql_sotta) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_sotta="<option value='0' ($sotta == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_sotta=mssql_fetch_array($result_mssql_sotta)){
    $id_sotta = $result_sotta ["ID_SOTT_A"];//numero univoco
    $ids_sotta = $result_sotta ["S_SOTT_A"];//sigla
    $n_sotta=$result_sotta ["N_SOTT_A"];//nome per esteso
    $opt_sotta.="<option value='$id_sotta'>$n_sotta</option>";
    }
    ?>
    SOTTAMBITI OPERATIVI <select name="sotta" onchange="invia()">
    <?php echo "$opt_sotta";?>
    </select>
    </p>

    <?php } ?>
    <?php if ($sotta != "0") { ?>
    <p>
    <?php
    $sql_matt="SELECT * FROM tl_sott_a_m_att_proc INNER JOIN t_m_att ON tl_sott_a_m_att_proc.ID_M_ATT=t_m_att.ID_M_ATT WHERE ID_SOTT_A='$sotta' ORDER BY ORD";

    $result_mssql_matt=@mssql_query($sql_matt,$link);

    if(!$result_mssql_matt) {
    exit('<p>Errore! Non sono presenti servizi nel database!<br/>' .
    'Error: ' . mssql_error() . '</p>');
    }
    $opt_sotta="<option value='0' ($sotta == '0' ? ' selected='selected'' : '')>----- seleziona -----</option>";
    while($result_matt=mssql_fetch_array($result_mssql_matt)){
    $id_matt = $result_matt ["ID_M_ATT"];//numero univoco
    $ids_matt = $result_matt ["S_M_ATT"];//sigla
    $n_matt=$result_matt ["N_M_ATT"];//nome per esteso
    $opt_matt.="<option value='$id_matt'>$n_matt</option>";
    }
    ?>
    MACROATTIVITA' <select name="matt" onchange="">
    <?php echo "$opt_matt";?>
    </select>
    </p>

    <?php } ?>
    <p>
    <input type="submit" value="INVIA">
    </p>
    </form>
    <?php mssql_close($link); ?>
    </body>
    </html>
    [/php]

    Ora i miei problemi sono:
    -il codice visivamente funziona fino alla scelta delle aree dopodichè dopo aver scelto l'area la select di queste viene sostituita con la nuovqa select degli ambiti e così via sino alle macroattività.
    COSA SBAGLIO?????
    -vorrei mantenere visivamente selezionato i campi scelti precedentemente nelle rispettive select

    Mi date una mano please:?:?:?:?😢😢😢