要结合前台script实现(如javascript)
首先捕捉第一下拉框的onChange事件,如果你已经知道省名对应的市名,可以直接用javascript修改第二下拉框的选项,如果你的数据存在数据库,则在onChange事件中要递交网页并把省名作为参数,查询获得相应市名后重新生成网页

解决方案 »

  1.   

    主要是 script 的问题,不是 PHP 的问题<select id=oSel1 onchange=Chg()>
    <option> 黑龙江
    <option> 广东
    <option> 日本
    </select>
    <select id=oSel2>
    </select><script>//二维数据表格(二维数组)
    var Table2dim = new Array(
        new Array("哈尔滨", "齐齐哈尔", "牡丹江"),
        new Array("广州", "深圳", "佛山"),
        new Array("广岛", "长崎"),
        null
    );//Chg() 和 ChgOptions(i) 都是通用的,只要修改上面的 oSel1 的选项和 Table2dim 的内容即可
    function Chg()
    {
        ChgOptions(document.all.oSel1.selectedIndex);
    }
    function ChgOptions(iSel1)
    {
        if ( 0 <= iSel1 && iSel1 < Table2dim.length )
        {
            var oSel2 = document.all.oSel2, i;        //删除所有旧选项(不知道有没有不用循环的删除办法)
            for ( i = oSel2.options.length; -- i >= 0; )
                oSel2.options.remove(i);        //创建新关联选项
            var Table1dim = Table2dim[iSel1];
            for ( i = 0; i < Table1dim.length; i ++ )
            {
                var o = document.createElement('<option>');
                o.text = Table1dim[i];
                oSel2.options.add(o);
            }
        }
    }//初始化
    ChgOptions(0);
    </script>PHP 所要做的最多是从数据库中取得数据,生成上面的 oSel1 和 Table2dim
      

  2.   

    到www.51js.com的php版搜索菜单,有好多呢。
      

  3.   

    //&cedil;&Atilde;&ordm;&macr;&Ecirc;&yacute;&Oacute;&Atilde;&Oacute;&Uacute;&sup2;ú&Eacute;ú&Ograve;&raquo;&cedil;&ouml;&Ograve;&raquo;&Icirc;&not;&Ecirc;&yacute;×é&pound;&not;&micro;&laquo;&Ograve;&raquo;°&atilde;&Oacute;&Atilde;&Euml;ü×&ouml;&Ntilde;&shy;&raquo;·&sup2;ú&Eacute;ú&Ograve;&raquo;&cedil;&ouml;&micro;&Uacute;&Ograve;&raquo;&cedil;&ouml;&Iuml;&Acirc;±ê&Icirc;&ordf;&Ecirc;&yacute;&Ouml;&micro;&pound;&not;&micro;&Uacute;&para;&thorn;&cedil;&ouml;&Iuml;&Acirc;±ê&iquest;&Eacute;&Icirc;&ordf;'Data','Value','aText'&micro;&Auml;&para;&thorn;&Icirc;&not;&Ecirc;&yacute;×é&iexcl;&pound; 
    function aClass(aData, aValue, aText) {
     if (aClass.arguments.length < 3)
          alert("&acute;&laquo;&Egrave;&euml;&micro;&Auml;&sup2;&Icirc;&Ecirc;&yacute;&acute;í&Icirc;ó&pound;&iexcl;")
        else {
          this.Data  = aData;    //&sup2;ú&Eacute;ú&micro;&Auml;&frac12;&laquo;&Ecirc;&Ccedil;&micro;&Uacute;&Ograve;&raquo;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&micro;&Auml;value
          this.Value = aValue;   //&sup2;ú&Eacute;ú&micro;&Uacute;&para;&thorn;&cedil;&ouml;&iquest;ò&micro;&Auml;value&Ouml;&micro;
          this.Text  = aText;    //&sup2;ú&Eacute;ú&micro;&Uacute;&para;&thorn;&cedil;&ouml;&iquest;ò&micro;&Auml;text&Auml;&Uacute;&Egrave;&Yacute;
        }
      }
    //&cedil;&Atilde;&ordm;&macr;&Ecirc;&yacute;&Oacute;&Atilde;&Oacute;&Uacute;&micro;&Atilde;&micro;&frac12;&micro;&Uacute;&Ograve;&raquo;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò±&raquo;&Ntilde;&iexcl;&Ouml;&ETH;&para;&Ocirc;&Iuml;ó&micro;&Auml;value&Ouml;&micro;
    //&pound;¨aSrc=&micro;&Uacute;&Ograve;&raquo;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&para;&Ocirc;&Iuml;ó&pound;&raquo;aDes=&micro;&Uacute;&para;&thorn;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&para;&Ocirc;&Iuml;ó&pound;&raquo;aClass&Oacute;&Atilde;&Eacute;&Iuml;&Atilde;&aelig;&ordm;&macr;&Ecirc;&yacute;&sup2;ú&Eacute;ú&micro;&Auml;&Ecirc;&yacute;×é&pound;&raquo;&pound;&copy;
      function chgDnCombobox(aSrc, aDes, aClass, aRemain){   
        if (chgDnCombobox.arguments.length < 3)
          alert("&acute;&laquo;&Egrave;&euml;&micro;&Auml;&sup2;&Icirc;&Ecirc;&yacute;&acute;í&Icirc;ó&pound;&iexcl;")
        else if (aSrc.type != "select-one")  //&Aring;&ETH;&para;&Iuml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&Ecirc;&Ccedil;&sup2;&raquo;&Ecirc;&Ccedil;&micro;&yen;&Ntilde;&iexcl;&iquest;ò
          alert("&acute;&laquo;&Egrave;&euml;&micro;&Auml;&sup2;&Icirc;&Ecirc;&yacute;&acute;í&Icirc;ó&pound;&iexcl;")
        else if (aClass == null)
          alert("aClass&Icirc;&acute;&para;¨&Ograve;&aring;&acute;í&Icirc;ó&pound;&iexcl;")
        else {
          if (aRemain==null)
            aRemain = 1;
          chgDnComboboxItem(aSrc.options[aSrc.selectedIndex].value, aDes, aClass, aRemain);
        }
      }  function chgDnComboboxItem(aValue, aDes, aClass, aRemain){
        if (chgDnComboboxItem.arguments.length<3)
          alert("&sup2;&Icirc;&Ecirc;&yacute;&acute;&laquo;&Egrave;&euml;&acute;í&Icirc;ó&pound;&iexcl;")
        else if (aClass==null)
          alert("&acute;í&Icirc;ó&pound;&iexcl;aClass&Atilde;&raquo;&Oacute;&ETH;&para;¨&Ograve;&aring;&pound;&iexcl;")
        else{
          if (aRemain==null)
            aRemain = 1;
          deleteAllComboboxItem(aDes, aRemain); //&Eacute;&frac34;&sup3;&yacute;&micro;&Uacute;&para;&thorn;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&micro;&Auml;&Euml;ù&Oacute;&ETH;option&para;&Ocirc;&Iuml;ó
          for (var i=0; i<aClass.length; i++)
            if (aClass[i].Data==aValue)  /* check aClass[i].Data */
              if (aClass[i].Data!="")
                addComboboxItem(aDes, aClass[i].Text, aClass[i].Value);//&Eacute;ú&sup3;&Eacute;&micro;&Uacute;&para;&thorn;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&micro;&Auml;option&para;&Ocirc;&Iuml;ó
    }
      }
    //&Eacute;&frac34;&sup3;&yacute;&micro;&Uacute;&para;&thorn;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&micro;&Auml;&Euml;ù&Oacute;&ETH;option&para;&Ocirc;&Iuml;ó
      function deleteAllComboboxItem(aList, aRemain) {
      for (var i=aList.options.length; i > aRemain; i--)
          aList.options[i] = null;
      }    
    //&Eacute;ú&sup3;&Eacute;&micro;&Uacute;&para;&thorn;&cedil;&ouml;&Iuml;&Acirc;&Agrave;&shy;&iquest;ò&micro;&Auml;option&para;&Ocirc;&Iuml;ó
      function addComboboxItem(aList, aText, aValue) {
        var aOption = new Option(aText, aValue);
      aList.options[aList.options.length]=aOption;  }
    ///&cedil;ù&frac34;&Yacute;&sup1;ú&frac14;&Ograve;&cedil;&Auml;±&auml;&Ecirc;&iexcl;&Ouml;&Yacute;
    var f_Set0 = new Array(
    <?php
    for($i=0;$i<$stateRow;$i++)
    {
      echo "new aClass('".$state->result[$i][country]."', '".$state->result[$i][state]."', '".$state->result[$i][state]."'),";
    }
      echo "new aClass('".$state->result[$i][country]."', '".$state->result[$i][state]."', '".$state->result[$i][state]."')"
    ?>
    );
    function change_area(aForm) {
    chgDnCombobox(aForm.country, aForm.state, f_Set0 , 0)
    }onChange="change_area(document.dataform)"