关于在smarty中实现省市区三级联动
剛開(kāi)始接觸php,,其實(shí)對(duì)于一些比較深入的東西還不是很了解,就像是這次的省市區(qū)聯(lián)動(dòng),都是用三張表為基礎(chǔ)編碼的,原諒我的無(wú)知,謝謝。
接下來(lái)就是編碼部分了:
<?php require('./smarty/Smarty.class.php'); date_default_timezone_set("PRC"); $conn = mysql_connect("localhost","root","123456"); mysql_select_db("dbcity"); mysql_query("set names utf8");$sql = " select pid,pname from province"; $result = mysql_query($sql,$conn); while ($rs = mysql_fetch_assoc($result)){ $list[] = array("pid" => $rs["pid"],"pname" => $rs["pname"]); }$sql2 = "select cid,cname from city where pid={$list[0]['pid']}"; $result2 = mysql_query($sql2,$conn); while($rs2 = mysql_fetch_assoc($result2)){$list2[] = array("cname" => $rs2["cname"],"cid" =>$rs2["cid"]); }$sql3 = "select xname,xid from xian where cid={$list2[0]['cid']}"; $result3 = mysql_query($sql3,$conn); while($rs3 = mysql_fetch_assoc($result3)){$list3[] = array("xname" => $rs3["xname"]); }$smarty = new Smarty(); $smarty->left_delimiter='<{';//左邊界符 $smarty->right_delimiter='}>';//右邊界符 $smarty ->assign("content",$list); $smarty ->assign("name",$list2); $smarty ->assign("xian",$list3); $smarty ->display("show.html");?>以上是為了從數(shù)據(jù)庫(kù)中把所有的先加載出來(lái),主要就是用到smarty,數(shù)組。其他的都沒(méi)有什么可以深究的了,可以看到上面代碼的最后一句話就是為了跳轉(zhuǎn)到smarty的模板頁(yè)面show.html
接下來(lái)我們來(lái)共同看一下模板頁(yè)面的書(shū)寫(xiě)代碼:
1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset="UTF-8">5 <title>省市級(jí)聯(lián)</title>6 <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>7 <script type="text/javascript">8 $(function(){9 $("#province").change(function() { 10 var province = $("#province").val(); 11 alert(province); 12 $.ajax({ 13 url: 'display.php', 14 type: 'GET', 15 data: {'category':'city', city:province}, 16 dataType:'json', 17 success: function(data){ 18 var content = ''; 19 for (var i in data) { 20 content += '<option value='+data[i].cid+'>'+data[i].cname+'</option>'; 21 } 22 $('#city').html(content); 23 } 24 }); // 'abc."$age".def' 25 }); 26 $("#city").change(function(){ 27 var city = $("#city").val(); 28 alert(city); 29 $.ajax({ 30 url:'assign.php', 31 type:'GET', 32 data:{'category':'xian',xian:city}, 33 dataType:'json', 34 success:function(data){ 35 var content = ''; 36 for(var i in data){ 37 content +='<option>'+data[i].xname+'</option>'; 38 } 39 $('#xian').html(content); 40 } 41 }) 42 }) 43 }) 44 </script> 45 </head> 46 <body> 47 選擇省份:<select name="province" id="province" style="width:100px;" οnclick="click" > 48 <{foreach from=$content key=k item=value}> 49 <option value="<{$value.pid}>"><{$value.pname}></option> 50 <{/foreach}> 51 </select> <br/> 52 選擇城市:<select name="city" id="city" style="width:100px;"> 53 54 <{foreach from=$name item=value2}> 55 <option value="<{$value2.cid}>"><{$value2.cname}></option> 56 <{/foreach}> 57 </select><br/> 58 選擇縣城:<select name="xian" id="xian" style="width:100px;"> 59 60 <{foreach from=$xian item=value3}> 61 <option><{$value3.xname}></option> 62 <{/foreach}> 63 </select><br/> 64 </body> 65 </html>這里的命名不是規(guī)范,希望不要誤導(dǎo)大家,,大家在自己編寫(xiě)代碼的時(shí)候還是要注意自己的編碼規(guī)范的。首先,我們可以看到“選擇省份”的select標(biāo)簽,這里我們就是根據(jù)index.php頁(yè)面?zhèn)鬟^(guò)來(lái)的數(shù)組利用foreach進(jìn)行循環(huán)遍歷,遍歷出省份的id,省份名稱(chēng)。在這里,省份的id是必不可少的,因?yàn)樗鼱砍兜浇酉聛?lái)select的change事件,所以一定要注意這個(gè)地方。接下來(lái)就是異步提交的ajax事件了,我們根據(jù)之前給select的id叫做province來(lái)做他的change事件,這里ajax大家就要自己對(duì)ajax進(jìn)行學(xué)習(xí)了,其實(shí),在php里面使用smarty模板引擎是為了將后臺(tái)代碼與前臺(tái)展示代碼分離開(kāi)來(lái),但是這里為了大家能夠看得仔細(xì),所以將JavaScript代碼放在頁(yè)面里了,最好是在項(xiàng)目里面寫(xiě)一個(gè)JavaScript腳本然后進(jìn)行導(dǎo)入,有利于頁(yè)面的整潔,我們先看省份的ajax代碼,我們?cè)谒膗rl屬性里面讓它進(jìn)入到display.php頁(yè)面,
so,接下來(lái)就是display頁(yè)面的代碼了
1 <?php2 date_default_timezone_set("PRC");3 $conn = mysql_connect("localhost","root","123456");4 mysql_select_db("dbcity");5 mysql_query("set names utf8");6 if($_GET['category']){ 7 if($_GET["category"] != "") {8 //根據(jù)省份得到城市9 $sql = "select cid,cname from city where pid=".$_GET['city']; 10 $result = mysql_query($sql,$conn); 11 if (mysql_num_rows($result) > 0) { 12 while ($row = mysql_fetch_assoc($result)) { 13 $str[] = array("cid"=>$row["cid"],"cname"=>($row["cname"])); 14 } 15 //var_dump($str); 16 echo (json_encode($str)); 17 } 18 mysql_free_result($result); 19 } 20 } 21 22 23 ?>在這里,我們使用GET方法獲取之前ajax傳過(guò)來(lái)的參數(shù),獲取點(diǎn)擊省份時(shí)候的id,根據(jù)這個(gè)id來(lái)獲取這個(gè)省份下面的城市。當(dāng)然了,之后的城市下面的區(qū)我們就顯而易見(jiàn)了,但是特別要注意的是要把城市的select標(biāo)簽的value值獲取獲取出來(lái),以便查詢它所管轄的區(qū)。
assign.php代碼如下
1 <?php2 date_default_timezone_set("PRC");3 $conn = mysql_connect("localhost","root","123456");4 mysql_select_db("dbcity");5 mysql_query("set names utf8");6 if($_GET['category']){7 if($_GET["category"] != "") {8 //根據(jù)省份得到城市9 $sql = "select xid,xname from xian where cid=".$_GET['xian']; 10 $result = mysql_query($sql,$conn); 11 if (mysql_num_rows($result) > 0) { 12 while ($row = mysql_fetch_assoc($result)) { 13 $str[] = array("id"=>$row["xid"],"xname"=>($row["xname"])); 14 } 15 //var_dump($str); 16 echo (json_encode($str)); 17 } 18 mysql_free_result($result); 19 } 20 } 21 ?>希望我的提示能夠?qū)δ阌兴鶐椭?#xff0c;謝謝!
轉(zhuǎn)載于:https://www.cnblogs.com/chengzhi59/p/7146771.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的关于在smarty中实现省市区三级联动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java_方法
- 下一篇: 一次http完整的请求tcp报文分析