Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Ajax Select Dinamiche

  1. #1

    Ajax Select Dinamiche

    Ciao a tutti.
    Ho una form con i campi select provincia, comune e cap che prendono i dati dal db e che si compilano in base alla scelta della select precedente: le classiche select dinamiche.
    Il problema è che ho 2 gruppi di queste select nella stessa form e ho dovuto adottare un espediente un pò bruttino; vi illustro il codice cosi capite.

    class.php
    Codice PHP:
    class Form
    {
        var 
    $label;
        var 
    $id;
        var 
    $name;
        var 
    $type;
        var 
    $radio = array();
        function 
    set_var($a$b$c$d)
        {
            
    $this->label $a;
            
    $this->id $b;
            
    $this->name $c;
            
    $this->type $d;
        }

        function 
    create_field()
        {
            switch(
    $this->type)
            {
                .......
                
                case 
    "dynamic_select":
                    echo 
    "

    <label for='"
    .$this->id."'>".$this->label."</label>";
                    echo 
    "<font id='".$this->id."'>";
                    echo 
    "<select name='".$this->name."'>";
                    echo 
    "<option value='0'>----</option>";
                    echo 
    "</select></font></p>";
                break;
            }
        }
        

    form.php
    Codice PHP:

    <script type="text/javascript" src="../js/ajax_cap.js">
    </script>
    <script type="text/javascript">
    //<![CDATA[


    window.onLoad=[b]dochange[/b]('id_12', -1),[b]dochange1[/b]('id_29',-1);        // carica la prima select

    //]]>
    </script>

    ...

    <form>
    $field = new Form;
    $field->set_var('Provincia','id_12','es_12','dynamic_select');//primo gruppo
    $field->create_field();
    $field->set_var('Comune','id_13','es_13','dynamic_select');//primo gruppo
    $field->create_field();
    $field->set_var('Cap','id_14','es_14','dynamic_select');//primo gruppo
    $field->create_field();
    $field->set_var('Provincia','id_29','es_29','dynamic_select');//secondo gruppo
    $field->create_field();
    $field->set_var('Comune','id_30','es_30','dynamic_select');//secondo gruppo
    $field->create_field();
    $field->set_var('Cap','id_31','es_31','dynamic_select');//secondo gruppo
    $field->create_field();
    </form> 
    ajax_cap.js
    codice:
    function Inint_AJAX()
    {
    	try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} //IE
    	try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} //IE
    	try { return new XMLHttpRequest(); } catch(e) {} //Native Javascript
    	alert("XMLHttpRequest not supported");
    	return null;
    };
    
    function dochange(src, val)
    {
    	var req = Inint_AJAX();
    	req.onreadystatechange = function ()
    	{
     		if (req.readyState==4)
    		{
          		if (req.status==200)
    			{
               		document.getElementById(src).innerHTML=req.responseText; //retuen value
          		}
     		}
    	};
    	req.open("GET", "../application/italia.php?data="+src+"&val="+val); //make connection
    	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header
    	req.send(null); //send value
    }
    function dochange1(src, val)
    {
    	var req = Inint_AJAX();
    	req.onreadystatechange = function ()
    	{
     		if (req.readyState==4)
    		{
          		if (req.status==200)
    			{
               		document.getElementById(src).innerHTML=req.responseText; //retuen value
          		}
     		}
    	};
    	req.open("GET", "../application/italia1.php?data="+src+"&val="+val); //make connection
    	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header
    	req.send(null); //send value
    }
    italia.php
    Codice PHP:
    <?
    include("../config/config.php");


    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header ("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
    header ("Cache-Control: no-cache, must-revalidate");
    header ("Pragma: no-cache");

    header("content-type: application/x-javascript; charset=tis-620");

    $data=$_GET['data'];
    $val=$_GET['val'];


    if (
    $data=='id_12') {  // prima select
      
    echo "<select class='text' name='provincia' onChange=\"[b]dochange[/b]('id_13', this.value)\">\n";
      echo 
    "<option value='0'>Scegli la provincia</option>\n";
      
    $result=mysql_query("select `id`, `nome` from province order by `id`");
      while(list(
    $id$name)=mysql_fetch_array($result)){
           echo 
    "<option value=\"$id\" >$name</option> \n" ;
      }
    } else if (
    $data=='id_13') { // seconda select
      
    echo "<select class='text' name='comune' onChange=\"[b]dochange[/b]('id_14', this.value)\">\n";
      echo 
    "<option value='0'>scegli il comune</option>\n";                   
      
    $result=mysql_query("SELECT `id`, `nome` FROM comuni WHERE `id_province` = '$val' ORDER BY `id` ");
      while(list(
    $id$name)=mysql_fetch_array($result)){
           echo 
    "<option value=\"$id\" >$name</option> \n" ;
      }
    } else if (
    $data=='id_14') { // terza select
      
    echo "<select class='text' name='cap' >\n";
        
    $result=mysql_query("SELECT `id`, `nome` FROM cap WHERE `id_comuni` = '$val' ORDER BY `id` ");
      while(list(
    $id$name)=mysql_fetch_array($result)){
           echo 
    "<option value=\"$id\" >$name</option> \n" ;
      }
    }

    echo 
    "</select>\n";

    ?>
    italia1.php
    Codice PHP:
    <?
    include("../config/config.php");


    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header ("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
    header ("Cache-Control: no-cache, must-revalidate");
    header ("Pragma: no-cache");

    header("content-type: application/x-javascript; charset=tis-620");

    $data=$_GET['data'];
    $val=$_GET['val'];


    if (
    $data=='id_29') {  // prima select
      
    echo "<select class='text' name='provincia1' onChange=\"[b]dochange1[/b]('id_30', this.value)\">\n";
      echo 
    "<option value='0'>Scegli la provincia</option>\n";
      
    $result=mysql_query("select `id`, `nome` from province order by `id`");
      while(list(
    $id$name)=mysql_fetch_array($result)){
           echo 
    "<option value=\"$id\" >$name</option> \n" ;
      }
    } else if (
    $data=='id_30') { // seconda select
      
    echo "<select class='text' name='comune1' onChange=\"[b]dochange1[/b]('id_31', this.value)\">\n";
      echo 
    "<option value='0'>scegli il comune</option>\n";                   
      
    $result=mysql_query("SELECT `id`, `nome` FROM comuni WHERE `id_province` = '$val' ORDER BY `id` ");
      while(list(
    $id$name)=mysql_fetch_array($result)){
           echo 
    "<option value=\"$id\" >$name</option> \n" ;
      }
    } else if (
    $data=='id_31') { // terza select
      
    echo "<select class='text' name='cap1' >\n";
        
    $result=mysql_query("SELECT `id`, `nome` FROM cap WHERE `id_comuni` = '$val' ORDER BY `id` ");
      while(list(
    $id$name)=mysql_fetch_array($result)){
           echo 
    "<option value=\"$id\" >$name</option> \n" ;
      }
    }

    echo 
    "</select>\n";

    ?>
    in pratica la funzione dochange() carica il primo gruppo inviando la richiesta a italia.php,
    mentre la funzione dochange1() carica il secondo gruppo inviando la richiesta a italia1.php.
    In questo modo devo avere tante funzioni e tanti file italia.php quanti sono i gruppi di select nella form.
    La domanda è:
    Posso raggruppare tutto in una funzione 'dochange()' e in un file 'italia.php'?

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    non centra, ma se vuoi ho una funzione in js come quella che vuoi che utilizza array...
    se serve posto..

  3. #3

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.