去搜索吧。这个问题已经讨论了很多遍了。

忍不住帖代码:
以前收藏的一个,不知道作者是谁了。
<?php
/* 与服务器交互的写法 */$conn = mysql_connect("localhost","root",""); // 连接数据库
mysql_select_db("tmp"); // 选择库if(!isset($_GET['key'])) { // 检查是否有传递参数
  $sql = "select * from menu where parent_id=0"; 
  $rs = mysql_query($sql);
  $str = "";
  while($row = mysql_fetch_array($rs)) // 循环构造初始信息
    $str .= "<option value='{$row['id']}'>{$row['name']}\n";
}else { // 有,产生脚本代码
  $sql = "select * from menu where parent_id={$_GET['key']}";
  $rs = mysql_query($sql);
  $obj = substr($_GET['obj'],0,-1) . (substr($_GET['obj'],-1)+1);
  $str = "$obj.options.length = 0;\n";
  while($row = mysql_fetch_array($rs))
    $str .= "$obj.options[$obj.options.length] = new Option('{$row['name']}',{$row['id']});\n";
  echo $str;
//本节用于调试,可通过 test.txt 文件检查输出的是否为合法的js脚本
$fp = fopen("test.txt","w");
fwrite($fp,$str);
fclose($fp);  exit;
}
?>
本方法通过改变script标记的src属性来达到动态修改列表框的内容<br>
<script id="sensele" src=""></script>
<script>
function loadsele(v) {
  var s = v.options[v.selectedIndex].value;
  sensele.src = "?obj="+v.id+"&key="+s;
}
</script>
<select id="sele1" onchange="loadsele(this)">
<?php echo $str; ?>
</select>
<select id="sele2" onchange="loadsele(this)">>
</select>
<select id="sele3">
</select>#
# 数据表的结构 `menu`
#CREATE TABLE menu (
  id tinyint(4) NOT NULL auto_increment,
  parent_id tinyint(4) NOT NULL default '0',
  name varchar(20) default NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;#
# 导出下面的数据库内容 `menu`
#INSERT INTO menu VALUES (1, 0, '人事管理');
INSERT INTO menu VALUES (2, 0, '通讯交流');
INSERT INTO menu VALUES (3, 1, '档案管理');
INSERT INTO menu VALUES (4, 1, '考勤管理');
INSERT INTO menu VALUES (5, 2, '通讯录');
INSERT INTO menu VALUES (6, 2, '网络会议');
INSERT INTO menu VALUES (7, 3, '新增档案');
INSERT INTO menu VALUES (8, 3, '查询档案');
INSERT INTO menu VALUES (9, 3, '删除档案');
INSERT INTO menu VALUES (10, 5, '新增通讯记录');
INSERT INTO menu VALUES (11, 7, '档案新增');