'db.inc.php文件的内容
<?php 
class hq_online extends db_sql{ 
var $Host="localhost"; 
var $Database="hq"; 
var $User="root"; 
var $password=""; 

解决方案 »

  1.   

    嵌套的循环效率太低了.
    你可以用js或iframe来传递ID,那样就可以在每次需要的时候才去查询,这比你现在的效率要高。
    另一个办法是用一次查询取出数据放入数组,然后在数组中进行组织数据来达到你的效果,也比你现在的效率要高。代码最好用dw或phpedit或editplus整理一下。
    注释还不够详细.你可以参考一下阿信的菜单作品。
      

  2.   

    好,有时间去chinaz看看阿信的菜单作品。
      

  3.   

    ustb(偶然) 说的有道理!接点分!!!
      

  4.   

    多谢ustb(偶然)指教,欢迎继续讨论
      

  5.   

    good good study
    day  day  up
      

  6.   

    嗯,不错......多谢楼主:)学习...and 接分:)
      

  7.   

    上面的有点bug,这是终极无错版<?php 
    /*******************************************
    **********功能:php二级联动菜单*************
    **********作者:冲星*************************
    **********Email:[email protected]**************
    **********日期:2004/10/02******************
    **********请转载时保留版权信息**************
    *******************************************/require_once('db.inc.php');//数据库连接
    $db=new hq_online;
    $db1=new hq_online;
    $db->query("select * from news_bclass order by id desc");
    $fMenu="";
    $fValue="";
    while($db->next_record()){
      $fMenu.="\"".$db->Record["bname"]."\",";
      $fValue.="\"".$db->Record["id"]."\",";
      
    }
    $fMenu=substr($fMenu,0,(strlen($fMenu)-1));
    $fMenu="[".$fMenu."]";//*****************************得到var fMenu
    $fValue=substr($fValue,0,(strlen($fValue)-1));
    $fValue="[".$fValue."]";//*****************************得到var fValue//得到*****************************var sMenu
    $db->query("select * from news_bclass order by id desc");
    while($db->next_record()){
    $parentid=$db->Record["id"];
      $db1->query("select * from news_sclass where parentid='$parentid' order by parentid desc");
      while($db1->next_record()){
      $num=$db1->num_rows();
      $i++;
      $sMenu.="\"".$db1->Record["sname"]."\",";
      if($i==$num){
      $sMenu="[".$sMenu."],[";
      $i=0;
      }
      }
    }
    $sMenu.="]";
    $sMenu=str_replace("\",]","\"]",$sMenu);
    $sMenu=str_replace(",[]","]",$sMenu);
    if((substr($sMenu,0,2))=="[\""){
    $sMenu="[".$sMenu;
    }else{
    $sMenu=preg_replace("/\[{3,}/is","[[\\1",$sMenu);//匹配
    }//得到*****************************var sValue
    $db->query("select * from news_bclass order by id desc");
    while($db->next_record()){
    $parentid=$db->Record["id"];
      $db1->query("select * from news_sclass where parentid='$parentid' order by parentid desc");
      while($db1->next_record()){
      $nums=$db1->num_rows();
      $j++;
      $sValue.="\"".$db1->Record["id"]."\",";
      if($j==$nums){
      $sValue="[".$sValue."],[";
      $j=0;
      }
      }
    }
    $sValue.="]";
    $sValue=str_replace("\",]","\"]",$sValue);
    $sValue=str_replace(",[]","]",$sValue);
    if((substr($sValue,0,2))=="[\""){
    $sValue="[".$sValue;
    }else{
    $sValue=preg_replace("/\[{3,}/is","[[\\1",$sValue);//匹配
    }?>
    <div id="tar"></div>
    <SCRIPT LANGUAGE="JavaScript" DEFER>
    var fMenu = <?php echo $fMenu; ?>;
    var fValue = <?php echo $fValue; ?>;
    var sMenu = <?php echo $sMenu; ?>;
    var sValue = <?php echo $sValue; ?>;var oWhere = document.all.tar;
    var ofMenu = document.createElement("<SELECT name='bigclass'>");
    var osMenu = document.createElement("<SELECT name='smallclass'>");
    with(oWhere)appendChild(ofMenu),appendChild(osMenu);createMainOptions();
    createSubOptions(0);ofMenu.onchange = function() {createSubOptions(this.selectedIndex);};function createMainOptions() {
        for(var i=0;i<fMenu.length;i++)ofMenu.options[i] = new Option(fMenu[i],fValue[i]);
    }
    function createSubOptions(j) {
        with(osMenu) {
            length=0;
            for(var i=0;i<sMenu[j].length;i++)osMenu.options[i] = new Option(sMenu[j][i],sValue[j][i]);
        }
    }
    </SCRIPT>
      

  8.   

    这个叫无刷新也太牵强了,用简单的innerHTML同样可以实现。
    也可以用rpc,ws等方式来实现,当然,需要javascript的支持。
      

  9.   

    我最近也做了个,也是PHP读取数据库的:) 
    代码好像跟楼主的差不多,也是改自一个二级联动的javascript,
    主要改动的地方大概就是动态生成原来javascript的预设数据//PHP部分:
    //取得下拉联动数据
    $result=mysql_query("SELECT * FROM units LEFT JOIN users ON (users.unit=units.unid) ORDER BY unsort,usort");
    $mx=mysql_num_rows($result);

    for ($i=0;$i<$mx;$i++) {
    $r=mysql_fetch_array($result);
    $uname=$r['uname'];
    $unid =$r['unid'];
    $usname=$r['username'];
    $usid=$r['userid']; if ($lasun!=$uname) {
    $java1=$java1 . "\"$uname\",";
    $java2=$java2 . "\"$unid\",";
    $lasun=$uname; if ($i>0) {
    $java3=$java3 . "],[";
    $java4=$java4 . "],[";
    }
    } else {
    $java3=$java3 . ",";
    $java4=$java4 . ",";
    }

    $java3= $java3 . "\"$usname\"";
    $java4= $java4 . "\"$usid\"";

    }$java1="[" . substr_replace($java1,"",-1) . "]\n";
    $java2="[" . substr_replace($java2,"",-1) . "]\n";
    $java3="[[" . $java3 . "]]\n";
    $java4="[[" . $java4 . "]]\n";//javascript部分
    <SCRIPT LANGUAGE="JavaScript" DEFER>
    var fMenu = <?=$java1?>
    var fValue = <?=$java2?>
    var sMenu = <?=$java3?>
    var sValue = <?=$java4?>var oWhere = document.all.tar;
    var ofMenu = document.createElement("<SELECT name='unid'>");
    var osMenu = document.createElement("<SELECT name='usid'>");
    with(oWhere)appendChild(ofMenu),appendChild(osMenu);createMainOptions();
    createSubOptions(0);ofMenu.onchange = function() {createSubOptions(this.selectedIndex);};function createMainOptions() {
        for(var i=0;i<fMenu.length;i++)ofMenu.options[i] = new Option(fMenu[i],fValue[i]);
    }
    function createSubOptions(j) {
        with(osMenu) {
            length=0;
            for(var i=0;i<sMenu[j].length;i++)osMenu.options[i] = new Option(sMenu[j][i],sValue[j][i]);
        }
    }function checkuser() {
    if (document.forms[1].elements[1].value=="") { alert("没有选择用户"); return false; }
    }
    </SCRIPT>//在HTML中引用
    <div id="tar" style="display:inline"></div>另外附users和units数据表结构
    表users:
    userid
    username
    unit表units:
    unid
    uname
      

  10.   

    请问(object sender,ElapesdEventArgs e)各代表什么意思?
      

  11.   

    没有错的,我在linux/windows下都调试通过
      

  12.   

    我的一个无刷新的,有个问题,返回的值不知怎么带了空格和换行
    a.php
    ====================================================
    <?
    require_once("inc/website.conf.php");
    $DB = new linkdb();
    $sql = "select * from tree where belong_id = 0";
    $list = $DB -> dbresult($sql);
    for ($i = 0; $i < count($list); $i++)
        $option .= "<option value=".$list[$i]['id'].">".$list[$i]['name']."</option>";
    ?>
    <form name=form>
    <select name=sel1 onchange="redirect(this.options.selectedIndex)">
    <option value=0>一级分类</option>
    <?echo $option?>
    </select>
    <select name=sel2>
    <option>二级分类</option>
    </select>
    </form>
    <script>
    function redirect(id)
    {
    var temp=document.form.sel2
    if (id != 0)
    {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.open("POST","b.php",false);
    xmlhttp.setRequestHeader("Content-Length",10);  
    xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
    xmlhttp.send("id="+id);
    option_str = xmlhttp.responseText;
    option_str = option_str.replace(/\r\n/g,"");
    option_str = option_str.replace(" ","");
    if (option_str == "")
            {
    temp.remove(0);
    temp.options[0]=new Option("无二级分类");
    }
    else
    {
    array = option_str.split("|")
    for (i=0;i<array.length;i++)
    temp.options[i]=new Option(array[i]);
    temp.options[0].selected=true;
    }
    }
        else
    {
    temp.remove(0);
    temp.options[0]=new Option("二级分类");
    }
    }
    </script>
    ===================================================b.php
    ======================================================
    <?
    require_once("inc/website.conf.php");
    $id = $_POST['id'];
    $DB = new linkdb();
    $sql = "select * from tree  where belong_id = '$id'";
    $list = $DB -> dbresult($sql);
    for ($i = 0; $i < count($list); $i++)
        $str .= $list[$i]['name']."|";
    if ($str != "")
        $str = substr($str,0,strlen($str)-1);
    echo $str;
    ?>