首先,你要知道數據庫是怎么保存的、
從事達州電信機房,服務器租用,云主機,雅安服務器托管,空間域名,CDN,網絡代維等服務。
每個縣肯定有一個市的父id,每個市都有一個省的父id,所以你查詢出來以后,根據父id就可以組裝了,就類似這樣
$arr?=?array(
'廣東省'=array(
'深圳'=array(
'南山',
'福田'
),
'廣州'=array(
'白云',
'沙河'
)
),
'福建省'=array(
............
)
);
基本思想就是:在JS動態(tài)創(chuàng)建select控件的option,通過Ajax獲取在PHP從SQL數據庫獲取的省市區(qū)信息,代碼有點長,但很多都是類似的,例如JS中省、市、區(qū)獲取方法類似,PHP中通過參數不同執(zhí)行不同的select語句。
index.html代碼:
!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"
""
html?xmlns=""
head
title省市區(qū)三級聯動/title
META?http-equiv=Content-Type?content="text/html;?charset=gb2312"
script?src="scripts/thumbnails.js"?type="text/javascript"/script
/head
thumbnails.js代碼:
window.onload?=?getProvince;
function?createRequest()?{//Ajax于PHP交互需要對象
try?{
request?=?new?XMLHttpRequest();//創(chuàng)建一個新的請求對象;
}?catch?(tryMS)?{
try?{
request?=?new?ActiveXObject("Msxml2.XMLHTTP");
}?catch?(otherMS)?{
try?{
request?=?new?ActiveXObject("Microsoft.XMLHTTP");
}?catch?(failed)?{
request?=?null;
}
}
}
return?request;
}
function?sech(id)?{//省市改變時觸發(fā),select的onchange事件
var?aa?=?document.getElementById(id);
if(id=="sheng"){
getCity(aa.value);//這里aa.value為省的id
}
if(id=="shi")
{
getCounty(aa.value);//這里aa.value為市的id
}
}
function?getProvince()?{//獲取所有省
request?=?createRequest();
if?(request?==?null)?{
alert("Unable?to?create?request");
return;
}
var?url=?"getDetails.php?ID=0";//ID=0時傳遞至PHP時讓其獲取所有省
request.open("GET",?url,?true);
request.onreadystatechange?=?displayProvince;?//設置回調函數
request.send(null);????//發(fā)送請求
}
function?getCity(id){//獲取省對應的市
request?=?createRequest();
if?(request?==?null)?{
alert("Unable?to?create?request");
return;
}
var?url=?"getDetails.php?ID="?+?escape(id);
request.open("GET",?url,?true);
request.onreadystatechange?=?displayCity;
request.send(null);
}
function?getCounty(id){//獲取市對應的區(qū)
request?=?createRequest();
if?(request?==?null)?{
alert("Unable?to?create?request");
return;
}
var?url=?"getDetails.php?ID="?+?escape(id);
request.open("GET",?url,?true);
request.onreadystatechange?=?displayCounty;
request.send(null);
}
function?displayProvince()?{//將獲取的數據動態(tài)增加至select
if?(request.readyState?==?4)?{
if?(request.status?==?200)?{
var?a=new?Array;
var?b=request.responseText;//將PHP返回的數據賦值給b
a=b.split(",");//通過","將這一數據保存在數組a中
document.getElementById("sheng").length=1;
var?obj=document.getElementById("sheng');??
for(i=0;i
obj.options.add(new?Option(a[i],i+1));?//動態(tài)生成OPTION加到select中,第一個參數為Text,第二個參數為Value值.
}
}
}
function?displayCity()?{//將獲取的數據動態(tài)增加至select
if?(request.readyState?==?4)?{
if?(request.status?==?200)?{
var?a=new?Array;
var?b=request.responseText;
a=b.split(",");
document.getElementById("shi").length=1;//重新選擇
document.getElementById("xian").length=1;//重新選擇
if(document.getElementById("sheng").value!="province"){
var?obj=document.getElementById('shi');??
for(i=0;i
obj.options.add(new?Option(a[i],?document.getElementById("sheng").value*100+i+1));?//ocument.getElementById("sheng").value*100+i+1對應的是市的ID。
}
}
}
}
function?displayCounty()?{//將獲取的數據增加至select
if?(request.readyState?==?4)?{
if?(request.status?==?200)?{
var?a=new?Array;
var?b=request.responseText;
a=b.split(",");
document.getElementById("xian").length=1;
if(document.getElementById("sheng").value!="province"document.getElementById("shi").value!="city"){
var?obj=document.getElementById('xian');??
for(i=0;i
obj.options.add(new?Option(a[i],i+1001));?
}
}
}
}
getDetails.php代碼:
?php
header("Content-Type:?text/html;?charset=gb2312");
$conn?=?new?COM("ADODB.Connection")?or?die("Cannot?start?ADO");
$connstr?=?"Provider=SQLOLEDB;Persist?Security?Info=False;User?ID=root;Password=123456;Initial?Catalog=area;Data?Source=localhost";
if($_REQUEST['ID']==0){//獲得省列表
$conn-Open($connstr);?//建立數據庫連接
$sqlstr?=?"select?name?from?Province";?//設置查詢字符串
$rs?=?$conn-Execute($sqlstr);?//執(zhí)行查詢獲得結果
$num_cols?=?$rs-Fields-Count();?//得到數據集列數
$Province=array();
$i=0;
while?(!$rs-EOF)?{
$Province[$i]=$rs-Fields['name']-Value.",";
$rs-MoveNext();
$i++;
}
foreach($Province?as?$val)
echo?$val;
$conn-Close();
$rs?=?null;
$conn?=?null;
}
if($_REQUEST['ID']0$_REQUEST['ID']35){//獲得省對應的市列表
$conn-Open($connstr);?//建立數據庫連接
$sqlstr?=?"select?name?from?City?where?cid=".$_REQUEST['ID'];?//設置查詢字符串
$rs?=?$conn-Execute($sqlstr);?//執(zhí)行查詢獲得結果
$num_cols?=?$rs-Fields-Count();?//得到數據集列數
$City=array();
$i=0;
while?(!$rs-EOF)?{
$City[$i]=$rs-Fields['name']-Value.",";
$rs-MoveNext();
$i++;
}
foreach($City?as?$val)
echo?$val;
$conn-Close();
$rs?=?null;
$conn?=?null;
}
if($_REQUEST['ID']100){//獲得省市對應的縣列表
$conn-Open($connstr);?//建立數據庫連接
$sqlstr?=?"select?name?from?County?where?cid=".$_REQUEST['ID'];?//設置查詢字符串
$rs?=?$conn-Execute($sqlstr);?//執(zhí)行查詢獲得結果
$num_cols?=?$rs-Fields-Count();?//得到數據集列數
$County=array();
$i=0;
while?(!$rs-EOF)?{
$County[$i]=$rs-Fields['name']-Value.",";
$rs-MoveNext();
$i++;
}
foreach($County?as?$val)
echo?$val;
$conn-Close();
$rs?=?null;
$conn?=?null;
}
?
數據庫設計,表格Province表,City表,County表。
要求:Province表需要id和name,id建議從1至34,例如北京id為1,廣東id為2,以此類推;
? ?City表需要id,name和cid,id為cid*100+1,cid為該市的上級,例如深圳的上級為廣東省,cid為2的話,深圳的id就是201,以此類推。
? ?County表需要id,name和cid,因為是三級的關系,id可以隨意,建議從10001開始自增。cid為所在上級,例如寶安區(qū)的cid為201,龍崗區(qū)的cid也為201;
截圖:
HTML效果:
完成后效果:
需要使用到ajax。到網上查下,一堆。代碼是固定的。
數據庫設置
id,area,areaname
1 210000 遼寧省
2 210100 沈陽市
3 210104 大東區(qū)
select name='area1' id='area1' onchange="get_area2(this.value);"
這里讀取省的數據
$sql="select area,areaname from area where right(area,4)='0000'";
/select
select name='area2' id='area2 'onchange="get_area(this.value);"
這里根據ajax讀取數據,開始的時候是空的
/select
select name='area' id='area'
這里根據ajax讀取數據,開始的時候是空的
/select
方法:
1,首先寫get_area2 的js 代碼,這里就用到ajax讀取,這里獲取的數據是區(qū)域代碼的前兩位代碼(比如:21)
這個在根據這個21的參數,讀取表中相關的市,
$sql="select area,areaname from area where left(area,2)='21' and right(area,2)='00'";
這個語句讀取出來21的市代碼
2,同一讀取出來區(qū)的代碼
一般這樣的都是存在數據庫中,數據庫3個字段 id pid name ,分別是 id 上級id 名稱
用數組,三維數組
比如
id pid name
1 0 廣東省
2 1 廣州市
3 2 花都區(qū)
然后PHP讀取庫,用一個迭代器,理論上可以取出無限級分類
分享標題:省市區(qū)數據庫php 省市區(qū)數據庫
文章來源:http://jinyejixie.com/article0/dodphio.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站制作、品牌網站建設、App開發(fā)、網站收錄、網站建設、企業(yè)建站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯