PHP+mysql 怎样实现省市县(区)的三级联动?
问题补充:省市为select下拉框,县(区)为checkbox多选;
哪们大侠帮帮忙啊
最好给个例子

解决方案 »

  1.   

    你这个前台想用php来做?还是前台用js之类的来做?
    网上搜一下三级联动的例子很多,不过最后一级用checkbox多选的貌似不多,个人觉得不好扩展吧,第三级你怎么能决定有多少内容,要是checkbox多选的话你得预留出多大面积啊。
      

  2.   

    最好是用JS至于第三级有多少内容要留多大面积这个不是很难吧网上的三级联动都是下拉框的,最后一项只能选一项但我要实现的是的后面要能选择多项所以想到后面要用checkbox
      

  3.   

    最好是用JS,网上搜一下三级联动的例子很多,http://www.ttplay8.cn
      

  4.   

    最后一级要选择多项的话可以用multiselect,用checkbox我还是觉得不够美观,你可以自己试试
      

  5.   

    用PHP数组 即可实现 或者用JS,不要用mysql操作这些不常更改的值
      

  6.   

    主要是
    发Ajax请求
    PHP返回数据
    JS动态创建Option
      

  7.   

    1 把联动数据保存成固定js数据格式;然后独立放一js中
    2 使用document.write写入顶级select,挂上onchange事件
    3 页面中预留select_div_1,checkbox_div
    4 onchange时使用innerhtml载入下级,
    这样,ff/ie都能通用.没必要用到php,处理这些数据,客户机完全可以.而且只是数据.又不全部显示.这里最主要的是怎么把数据保存成有关联方便使用,处理好这个就没问题了.
    我写过一个无限级菜单数组,你可以参考一下;它就是怎么把数据组成一个有关联的分级的而已,而且是统一的格式的.
    //右键菜单V
    //var menu_a_a =[]; 自动创建function create_a(a_n)
    {//数组不存在创建
      if ( (typeof(a_n) != 'string')  || (/^[_a-z][a-z0-9_]*$/.test(a_n)==false) ) a_n = 'menu_a_a';
      
      if (typeof(eval('window.' + a_n)) != 'object')
      {
        eval('window.' + a_n + '= [];');
      }
      
      return a_n;
    }function set_index(a_n,a_i)
    {//设置下标,或取最后下标
       a_n = create_a(a_n);
      
       if ( (typeof(a_i) == 'number') && (-1 < a_i) && (a_i < eval(a_n + '.length')) )
       {//把指定位置让出,并移出当前位置对象到最后.
         var a_str = 'window.' + a_n;
         eval(a_str + '.splice(a_i,1,null,' + a_str + '[a_i])');
         return parseInt(a_i);
       }
       
       return eval('window.' + a_n + '.length');
    }function set_menu_a(a_v,a_n,a_i,a_null)
    {//初始数组
      if (a_null) eval('window.' + a_n + '= [];');//清空
      else a_n = create_a(a_n);
      
      if (a_v.length == 2)
      {
        var sub_a = a_v[1];
        a_v = [a_v[0],eval('window.' + sub_a)];
        eval('window.' + sub_a + '=null;');//释放子数组    
      }
      
      eval('window.' + a_n +'[set_index("' + a_n + '",' + a_i + ') ] = a_v');
      //alert(eval('window.' + a_n));
    }function set_menu_right()
    {//初始菜单
     var menu_obj = document.createElement('DIV');//主菜单div
     menu_obj.id='menu_right';
     menu_obj.className='menu_right'; 
     menu_obj.style.left='3px'; 
     document.body.insertBefore(menu_obj); 
     
     menu_obj = document.createElement('SPAN');//主菜单点击事件
     menu_obj.id='menu_focus';
     menu_obj.tabIndex='1';//可以获得焦点
     menu_obj.onblur=hide_menu;
     menu_right.insertBefore(menu_obj);
     //alert(window.menu_a_a);
     show_menu_a(window.menu_a_a,menu_right);
    }function show_menu_a(menu_a,menu_div)
    {//初始子菜单 
      for(var for_i =0; for_i < menu_a.length;for_i++)
      {            
          var menu_div_a = document.createElement('A');
          menu_div_a.href='#';
          //alert(menu_a[for_i]);
          if (menu_a[for_i].length == 2)
          {//有子菜单
             
             var sub_a = menu_a[for_i][0];
             menu_div_a.innerText= sub_a.cn + '->';
             var menu_div_sub = document.createElement('DIV');
             var sub_id = menu_div.id+'_' + for_i;
             menu_div_sub.id=sub_id;
             menu_div_sub.className='menu_right';
             menu_div_a.onmouseenter=new Function( 'var sub_div = ' + sub_id + ';'
                                                + 'sub_div.style.left= sub_div.parentElement.offsetWidth + "px";'
                                                + 'sub_div.style.top = sub_div.parentElement.offsetTop + "px";'
                                                + "sub_div.style.display = 'block';"
                                                + "window.last_menu_id = '" + sub_id + "';"
                                                );//移动菜单上,弹出子菜单
                                                
             menu_div_a.onmouseleave=new Function( 'var sub_div = ' + sub_id + ";"
                                                + "sub_div.style.display = 'none';"
                                                );//移动菜单上,隐藏子菜单 
             menu_div.insertBefore(menu_div_a);
             menu_div_a.insertBefore(menu_div_sub); 
             show_menu_a(menu_a[for_i][1],menu_div_sub);         
          }else
           {
             var sub_a = menu_a[for_i];
             if (sub_a.clk)
             {
               try
               {
                menu_div_a.onclick= new Function(sub_a.clk);
               }catch(e)
                {              
                     textarea_js.value += ('绑定右键菜单事件时出错!出错信息如下:\n\n' + e.description
                                         + '\n\n绑定方式如下:\n\n'
                                         + "menu_div_a.onclick= new Function(sub_a.clk);\n\n"
                                         + "sub_a.clk是字符串,内容如下:\n\n" + sub_a.clk
                                         );
                }
             }   
              menu_div_a.innerText= sub_a.cn;
              menu_div.insertBefore(menu_div_a);
           }
      }
    }function hide_menu()
    {
      window.menu_timer = setTimeout(
      function(){
       while( window.last_menu_id && (window.last_menu_id.length > 10) && (window.last_menu_id != 'menu_right') )
       {//隐藏子菜单
         eval(window.last_menu_id).style.display= 'none';
         window.last_menu_id = window.last_menu_id.replace(/_\d+$/g,'');
       }
       menu_right.style.display='none';
       },200);
    }function textarea_js_menu()
    {
     clearTimeout(window.menu_timer);
     get_e('menu_right').style.display='block'; 
     get_e('menu_focus').focus();
     event.returnValue =false;
     return false;
    }//右键菜单^            + "\n\n普通菜单(无子级)用法 :\n"
                + "set_menu_a({'cn':'菜单名字','clk':'onclick函数(此项可省)'}"
                + ",'所在数组名(根数组menu_a可省)',所在数组中位置下标数字,是否先清空数组);"
                + "\n\n含有子菜单的菜单用法 :\n"
                + "set_menu_a([{'cn':'本父菜单名(此标移动到此菜单自动展开子菜单)','clk':'onclick函数(父菜单此项一般不用)'}"
                + ",'子菜单数组名'],'本菜单所在数组名(根数组menu_a可省)',所在数组中位置下标数字,是否先清空数组);"
                + '\n菜单设置注意顺序:最后子级->中间级->顶级;而且注意不能清空根级menu_a;'
                + '子级初始时要注意清空,防止前面用到而莫名多菜单项;'
                + "\n菜单就只有二种类型,因为其它东西都是自动生成,所以,按要求写即可,支持无限级菜单,如下例:\n\n"
                + "set_menu_a(  {'cn':'自动换行(3级)','clk':'textarea_js.wrap =\"soft\";'},'menu_sub_a2',0,1);"
                + "\nset_menu_a( [{'cn':'编辑器(2级有子级)'},'menu_sub_a2'],'menu_sub_a',0,1);"
                + "\nset_menu_a(  {'cn':'打开程序目录(2级)','clk':'run_exe(\"d:/ddd/sss.htm\");'},'menu_sub_a');"
                + "\nset_menu_a( [{'cn':'程序(1级)'},'menu_sub_a']);"
    //必须菜单设置V
    set_menu_a(  {'cn':'启/禁用自动换行','clk':'textarea_js.wrap = textarea_js.wrap == "soft"?"off":"soft";'},'menu_sub_a2',0,1);
    set_menu_a( [{'cn':'编辑器'},'menu_sub_a2'],'menu_sub_a',0,1);set_menu_a( {'cn':'下载更新','clk':'updata();'},'menu_sub_a',0);
    set_menu_a( {'cn':'帮助','clk':'show_h();'},'menu_sub_a');
    set_menu_a( {'cn':'关于','clk':'alert("Edit By qidizi!");'},'menu_sub_a');
    set_menu_a(  {'cn':'打开程序目录','clk':'run_exe(\'explorer.exe "\' + location.pathname.replace(/\\//g,"\\\\").replace(/\\\\[^\\\\]*$/,"") + \'"\');'},'menu_sub_a');
    set_menu_a( [{'cn':'系统'},'menu_sub_a'],0);
    //必须菜单设置^我这个是针对ie写的.所以,有些东西可能不适用ff.这是其中一种方法.
      

  8.   

    用Ajax,把数据传到另外一个页面进行查询,把结果集返回回来,前台赋值给受控的下拉框
      

  9.   

    用ajax 将服务器返回数据 分隔 再根据数组取值 split()[index]