![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
代码冗余挺多的,我想不到别的好办法了,请大家多提批评意见
<?php
/****************************************用javascript实现的无刷新三级连动*************************************/
//以国家,省份和城市为程序的模型,
//数据库中3张表分别为:country,province,city;
//代码中变量名称尽量接近模型涉及范畴;
//
说明 :一级类:国家; 二级类:省份; 三级类:城市;当然你也可以用它来表示别的内容;
//$first_id :国家的唯一标识,其他类似;
//$first_name :国家的名称;
//$first_table:国家的表的名字;
//-----------------------------表结构-----------------------------------------------------------------------
//first_table :1.country_id; 2.country_name;(表名:country)
//second_table:1.province_id;2.country_id; 3.province_name;(表名:province)
//third_table :1.city_id; 2.province_id; 3.city_name;(表名:city)
//@Author
avy(菜虫)
//
好象代码冗余太高,汗!兄弟太菜了!
//@Date :2004/12/28
//----------------------------------------------------------------------------------------------------------
function synchronized_change($second_id,$first_id,$second_name,$second_table){
echo "<script language=javascript>\n";
echo "function getIdName(sid,sname)\n";
echo "{\n"; //这几行是利用面向对象的编程
echo " this.id=sid;\n"; //大家仔细看,在67行调用它;
echo " this.name=sname;\n";
echo "}\n";
echo "function synchronized(frm)\n"; //需要参数,参数为form
echo "{\n";
echo " frm.province.length = 1;\n"; //province为一个表单元素,省的下拉列表;
echo " if(frm.country.value != \"\")\n"; //country为国家的下拉列表;
echo " {\n";
echo " for(i=0;i
echo " if(frm.country.value == area[0])\n"; //其中每一维又是一个维数组;
echo " {\n";
echo " for(j=1;j.length;j++)\n"; //遍历该国家的省份
echo " {\n"; //area是一数组,存放国家id;
echo " frm.province.length++;\n"; //area[1][0]中国1;area[1][0]美国2;
echo " frm.province[j].value = area[j].id;\n";//province的value和text;
echo " frm.province[j].text = area[j].name;\n";//获得与该国家对应的省份的id和名称;
echo " }\n";
echo " break;\n";
echo " }\n";
echo " }\n";
echo " }\n";
echo "}\n";
$select_province = "SELECT ".$second_id.",".$first_id.",".$second_name. " FROM ".$second_table
." ORDER BY "." ".$first_id.",".$second_name." "; //搜索省份,二级类;
mysql_connect("localhost","root","") or die(mysql_error("无法连接数据库,请与管理员联系"));
mysql_select_db("davy");
$result_set = mysql_query($select_province);
$number_province = mysql_num_rows($result_set);
$count_province = 0; //省计数器
$count_country = -1; //国家计数器
$current_country_id = -1; //当前国家的id
$synchronized_str = "var area = new Array();\n";
for($i = 0;$i < $number_province;$i++){
$record_set = mysql_fetch_array($result_set);
if($current_country_id != $record_set[1]){ //获得国家的id
$current_country_id = $record_set[1]; //只有下一条记录与该记录不是同一个国家时
$count_country ++; //才让$count_province = 0;
$count_province = 0;
$synchronized_str .= "area[$count_country] = new Array();\n area[$count_country][0] =".$record_set[1].";\n "; //area[0]存放国家
}
$count_province ++;
$synchronized_str .= "area[$count_country][$count_province] = new getIdName(".$record_set[0].",\"".$record_set[2]."\");\n"; //获得与该国家对应的城市的id,name
} //调用getIdName方法,this关键字指area[j];
echo $synchronized_str;
echo "</script>\n";
}
function synchronized_country_provice($first_table,$first_id,$first_name,$default_first_id,$second_table,$second_id,
$second_name,$default_second_id,$third_id,$third_name,$third_table){
echo "
";
echo "<script language=javascript>\n";
echo "function getIdName2(sid,sname)\n";
echo "{\n";
echo " this.id=sid;\n";
echo " this.name=sname;\n";
echo "}\n"; //暂时先写在这里,估计还不够用,要修改的;
echo "function synchronized2(frm)\n";
echo "{\n";
echo " frm.city.length = 1;\n";
echo " if(frm.province.value != \"\")\n";
echo " {\n";
echo " for(i=0;i
echo " if(frm.province.value == area2[0])\n"; //其中每一维又是一个二维数组;
echo " {\n";
echo " for(j=1;j
echo " {\n";
echo " frm.city.length++;\n";
echo " frm.city[j].value = area2[j].id;\n";
echo " frm.city[j].text = area2[j].name;\n";//获得与国家对应的省份的id和名称;
echo " }\n";
echo " break;\n";
echo " }\n";
echo " }\n";
echo " }\n";
echo "}\n";
$select_city = "SELECT ".$third_id.",".$second_id.",".$third_name. " FROM ".$third_table
." ORDER BY "." ".$second_id.",".$third_name." ";
mysql_connect("localhost","root","") or die(mysql_error("无法连接数据库,请与管理员联系"));
mysql_select_db("davy");
$result_set = mysql_query($select_city);
$number_city = mysql_num_rows($result_set);
$count_city = 0; //省计数器
$count_province = -1; //国家计数器
$current_province_id = -1; //当前国家的id
$synchronized_str = "var area2 = new Array();\n";
for($i = 0;$i < $number_city;$i++){
$record_set = mysql_fetch_array($result_set);
if($current_province_id != $record_set[1]){
$current_province_id = $record_set[1];
$count_province ++;
$count_city = 0;
$synchronized_str .= "area2[$count_province] = new Array();\n area2[$count_province][0] =".$record_set[1].";\n ";
}
$count_city ++;
$synchronized_str .= "area2[$count_province][$count_city] = new getIdName2(".$record_set[0].",\"".$record_set[2]."\");\n";
}
echo $synchronized_str;
echo "</script>\n";
echo "

