'db.inc.php文件的内容
<?php
class hq_online extends db_sql{
var $Host="localhost";
var $Database="hq";
var $User="root";
var $password="";
}
<?php
class hq_online extends db_sql{
var $Host="localhost";
var $Database="hq";
var $User="root";
var $password="";
}
你可以用js或iframe来传递ID,那样就可以在每次需要的时候才去查询,这比你现在的效率要高。
另一个办法是用一次查询取出数据放入数组,然后在数组中进行组织数据来达到你的效果,也比你现在的效率要高。代码最好用dw或phpedit或editplus整理一下。
注释还不够详细.你可以参考一下阿信的菜单作品。
day day up
/*******************************************
**********功能: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>
也可以用rpc,ws等方式来实现,当然,需要javascript的支持。
代码好像跟楼主的差不多,也是改自一个二级联动的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
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;
?>