刚开始接触php,,其实对于一些比较深入的东西还不是很了解,就像是这次的省市区联动,都是用三张表为基础编码的,原谅我的无知,谢谢。

接下来就是编码部分了:

<?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"); ?>

以上是为了从数据库中把所有的先加载出来,主要就是用到smarty,数组。其他的都没有什么可以深究的了,可以看到上面代码的最后一句话就是为了跳转到smarty的模板页面show.html

接下来我们来共同看一下模板页面的书写代码:

 1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>省市级联</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;" onclick="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>

这里的命名不是规范,希望不要误导大家,,大家在自己编写代码的时候还是要注意自己的编码规范的。首先,我们可以看到“选择省份”的select标签,这里我们就是根据index.php页面传过来的数组利用foreach进行循环遍历,遍历出省份的id,省份名称。在这里,省份的id是必不可少的,因为它牵扯到接下来select的change事件,所以一定要注意这个地方。接下来就是异步提交的ajax事件了,我们根据之前给select的id叫做province来做他的change事件,这里ajax大家就要自己对ajax进行学习了,其实,在php里面使用smarty模板引擎是为了将后台代码与前台展示代码分离开来,但是这里为了大家能够看得仔细,所以将JavaScript代码放在页面里了,最好是在项目里面写一个JavaScript脚本然后进行导入,有利于页面的整洁,我们先看省份的ajax代码,我们在它的url属性里面让它进入到display.php页面,

so,接下来就是display页面的代码了

 1 <?php
2 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 //根据省份得到城市
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传过来的参数,获取点击省份时候的id,根据这个id来获取这个省份下面的城市。当然了,之后的城市下面的区我们就显而易见了,但是特别要注意的是要把城市的select标签的value值获取获取出来,以便查询它所管辖的区。

assign.php代码如下

 1 <?php
2 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 //根据省份得到城市
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 ?>

希望我的提示能够对你有所帮助,谢谢!

关于在smarty中实现省市区三级联动的更多相关文章

  1. Android中使用开源框架citypickerview实现省市区三级联动选择

    1.概述 记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯一麻烦的是需要自己整理并解析省 ...

  2. 从QQ网站中提取的纯JS省市区三级联动

    在 http://ip.qq.com/ 的网站中有QQ自己的JS省市区三级联动 QQ是使用引用外部JS来实现三级联动的.JS如下:http://ip.qq.com/js/geo.js <!DOC ...

  3. 使用腾讯IP分享计划网站中的纯JS省市区三级联动

    JS地址:http://ip.qq.com/js/geo.js 实例如下: <!DOCTYPE html> <html> <head> <title>省 ...

  4. 省市区三级联动 pickerView

    效果图 概述 关于 省市区 三级联动的 pickerView,我想大多数的 iOS 开发者应该都遇到过这样的需求.在遇到这样的需求的时候,大多数人都会觉的这个很复杂,一时无从下手.其实真的没那么复杂. ...

  5. ajax省市区三级联动

    jdbc+servlet+ajax开发省市区三级联动 技术点:jdbc操作数据库,ajax提交,字符拦截器,三级联动 特点:局部刷新达到省市区三级联动,举一反三可以做商品分类等 宗旨:从实战中学习 博 ...

  6. QQ JS省市区三级联动

    如下图: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title ...

  7. jquery省市区三级联动

    jquery省市区三级联动(数据来源国家统计局官网)内附源码下载 很久很久没有写博了. 今天更新了项目的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的小伙伴们... JQUERY + ...

  8. PHPOffice/PHPExcel生成省市区三级联动的excel表格

    最近公司需要用到一个省市区三级联动的excel表格,但是数据都在数据库,又太多,人工不好制作,就让我这个phper来帮忙啦. 主要用到的是excel的定义名称,数据验证.其中数据验证的列表只能是一列或 ...

  9. Ajax来实现下拉框省市区三级联动效果(服务端基于express)

    //服务端JS代码: //提供服务端的处理 const express = require('express'); const fs = require('fs'); const app = expr ...

随机推荐

  1. POJ 2229 Sumsets(递推,找规律)

    构造,递推,因为划分是合并的逆过程,考虑怎么合并. 先把N展开成全部为N个1然后合并,因为和顺序无关,所以只和出现次数有关情况有点多并且为了避免重复,分类,C[i]表示序列中最大的数为2^i时的方案数 ...

  2. BZOJ 2502: 清理雪道

    BZOJ 2502: 清理雪道 标签(空格分隔): OI-BZOJ OI-最小流 OI-上下界网络流 Time Limit: 10 Sec Memory Limit: 128 MB Descripti ...

  3. CYUSB

    /*Summary The application cydesc is used to open the device with cypress GUID and get the device des ...

  4. 01_15_Struts2_带参数的结果集

    01_15_Struts2_带参数的结果集 1. 背景说明 服务器端页面跳转的时候,通过struts提供的标签的valuestack可以直接取.服务器端的转发,valuestack的对象属性可以共享. ...

  5. cookie 和 localStorage 、sessionStorage、 session不同

    1. cookie:存储大小4k 有时间限制,会跟在ajax的请求头上 2. localStorage: 存储大小5M 没有时间限制 3. sessionStorage: 临时会话存储 当浏览器关闭的 ...

  6. C/C++程序基础 (三)引用和指针

    引用 引用变量与原始变量共享同一地址 int &a = b 则 &a = &b 引用类型的变量必须在声明时初始化,且不可以更换指向变量 常量的引用必须是常量引用,非常量的引用可 ...

  7. 分享一个漂亮按钮插件FancyButtons

    一转眼,2018年的第10天就这样过去了.回看17年,曾经做了些啥都忘记了,就像每一天写日志时的样子(双手放在键盘上,怒着嘴,抬着头,望着天花板), 然后突然记得好像好久没有写随笔了(@_@).自从配 ...

  8. Java - Java 中的三种 ClassLoader

    1.虚拟机类加载器(称为“bootstrap class loader”),它本身没有父类加载器,它负责加载虚拟机的内置类,由于它是用C.C++写的,所以Java无法拿到其class文件,返回的都是空 ...

  9. python简单实用gunicorn部署

    linux 安装 pyuthon 安装   pip install gunicorn manage.py 文件 from app import create_app app = create_app( ...

  10. 关于sql查询结果集的链接

    开通博客有一段时间了,第一次博文.本身是个理工科的,没啥文采,就想着把平时遇到的问题记录下来,防止自己以后忘了还要去翻找. 今天看到同事写的代码,查询两张表里的数据,结果集类型是一样的.写了两条查询, ...