关于在smarty中实现省市区三级联动

刚开始接触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;" ο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>

这里的命名不是规范,希望不要误导大家,,大家在自己编写代码的时候还是要注意自己的编码规范的。首先,我们可以看到“选择省份”的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 <?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    //根据省份得到城市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 <?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         //根据省份得到城市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 ?>

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

转载于:https://www.cnblogs.com/chengzhi59/p/7146771.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu GitLab CI Docker ASP.NET Core 2.0 自动化发布和部署(1)

相关博文&#xff1a; Ubuntu 简单安装和配置 GitLabUbuntu 简单安装 DockerUbuntu Docker 简单安装 GitLabUbuntu Docker 安装和配置 GitLab CI 持续集成服务器版本 Ubuntu 16.04 LTS。 经过上面四篇博文中的相关安装和配置&#xff0c;我们主要完成了两个容器的创建和运行&am…

X264学习笔记(1)

X264学习笔记&#xff08;1&#xff09; X264编码流程 参数的初始化 1.opt&#xff0c;param根据输入的参数和标准的规定&#xff0c;进行初始化设置。 Opt的说明如下&#xff1a; Opt->hin用于给出读入的yuv文件的指针地址 Opt->hout给出了输出的文件的指针地址 Opt->…

python 数字转化excel行列_Python实现excel的列名称转数字、26进制(A-Z)与10进制互相转换...

Python实现excel的列名称转数字、26进制(A-Z)与10进制互相转换sequence list( map( lambda x: chr( x ), range( ord( A ), ord( Z ) 1 ) ) )##-----字母转数字(python实现 1-26A-Z, then AA-AZ)def ten2TwentySix(num):L []numnum-1; #实现从1对应Aif num > 25:while Tr…

错误提示:'……' is not assignable to Android.app.Activity Manifest XML

1 问题描述&#xff1a; 针对这段代码&#xff1a; <activity android:name".fragament.fragment_bulter" /> <activity android:name".fragament.fragment_girl" /> <activity android:name".fragament.fragment_user" />…

关于Lambda和匿名内部类

先上代码&#xff1a; //gcache(f)public <T,R> Function<T,R> cache(Function<T,R> f){final Map<T,R> cachenew HashMap<>();Function<T,R> gt->{if(cache.containsKey(t)){System.out.println("cached t:"t);return cache…

H26L encoder.cfg参数分析

H264 encoder.cfg参数分析 收藏 (1) 文件操作参数:#Files InputFile "silent.yuv" #输入序列,YUV 4:2:0 StartFrame 0 # 从视频流的第几帧开始编码 FramesToBeEncoded 30 #编码图象帧数,指明了除去 B帧后将要被编码的帧数(应该再实验一下&#x…

django-ckeditor表情包修改

一、版本 Django1.11django-ckeditor5.2.2 二、关键步骤 1.删除旧的ckeditor静态文件 所在目录&#xff1a;项目目录下的static文件夹下的ckditor文件夹 rm ckeditor -rf 原因&#xff1a;在安装ckeditor后需要执行collectstatic命令&#xff0c;这个过程中的查找静态文件会去…

python中最难的是什么_python什么的最难了

学的人很少的,如果你没有学过编程,建议学c语言.因为python中文资料很少的.你可以先了解一下phthonpython的历史python的创始人为guido van rossum。1989年圣诞节期间&#xff0c;在阿姆斯特丹&#xff0c;guido为了打发圣诞节的无趣&#xff0c;决心开发一个新的脚本解释程序&a…

Python3生成脚本实现重置键盘键位

个人博客点这里 #!/usr/bin/env python # -*- coding:utf-8 -*- # Created by 秋叶夏风# 本模块的功能:<重置键盘键位>import sys import ossave_format "bat" # 这个值可以修改&#xff0c;有两个选项(bat和reg)&#xff0c;可选择生成bat批处理文件或者re…

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.2.2 如何读入文本输入

2.2.2 如何读入文本输入 最简单的处理任意文本的方式就是使用在卷Ⅰ中我们广泛使用的Scanner类。我们可以从任何输入流中构建Scanner对象。或者&#xff0c;我们也可以将短小的文本文件像下面这样读入到一个字符串中&#xff1a; 在早期的Java版本中&#xff0c;处理文本输入的…

leetcode add Two Numbers

部分 conditional operators ?:写的statements 在有的编译器下能通过&#xff0c;有的可能通不过 base operand of -> has non-pointer type ListNode转载于:https://www.cnblogs.com/liyongguo/p/7152365.html

amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!

好课推荐&#xff1a;1.CAD2014&#xff1a;点击查看2.室内CAD&#xff1a;点击查看3.CAD2019&#xff1a;点击查看4.CAD2018&#xff1a;点击查看5.【bim】revit&#xff1a;点击查看6.室内手绘&#xff1a;点击查看7.CAD三维&#xff1a;点击查看8.全屋定制&#xff1a;点击查…

JM8.5中的7种宏块模式问题

JM8.5中的7种宏块模式问题 收藏 Outline: 1、 CFG文件中有关可变尺寸宏块模式的相关选项2、 7种宏块模式对应的数值常量3、 7种宏块模式被分成宏块和亚宏块4、 如何对宏块和亚宏块的运动估计&#xff0c;采用一个共同的函数来处理5、 遗留问题1、CFG文件中有关可变尺寸宏块…

python高级编程技巧

个人博客点这里 如何在列表,字典,集合中根据条件筛选数据 方法1:通过迭代来进行判断筛选 解决方案 函数式编程: 如何统计序列中元素的出现频度 解决方案:使用collections.Counter对象 将序列传入Counter的构造器,得到Counter对象是元素频度的字典 Counter.most_common(n)…

2016年安全身份识别主流趋势

安全身份识别解决方案商HID Global通过从不同行业市场的重要客户那里所获得的深刻洞察&#xff0c;以及公司最新解决方案在前瞻性合作伙伴和全球各地的终端用户中进行的试点项目与正式部署情况&#xff0c;确定了2016年最值得业界关注的安全趋势。HID Global 广阔的行业视角&am…

列出一个目录中所有文件及大小

package com.test.tree;import java.io.File;/*** 列出一个目录中所有的文件和他们的大小* author wyl**/ public class FileList {public void list(File f){ //文件根目录&#xff0c;深度为0list(f,0);}/*** * param f* param depth 为了显示文件的层级形式*/public void li…

多媒体音频格式解析WMA WAV OGG AAC APE FLAC

无论是MP3还是MP4&#xff0c;甚至手机和多媒体DC&#xff0c;产品所支持的各种格式往往让人眼花缭乱。特别是对于刚上手的新手玩家来说&#xff0c;各种格式都有哪些特性&#xff0c;在实际 使用当中有多少格式实用或者必须&#xff0c;其实有很多方面需要我们来系统的了解。这…

数据分析之pandas笔记

Pandas 一个用于表示表格类型的内容 课时4&#xff1a;jupyter21 分22 秒课时5&#xff1a;pandas的内容24 分31 秒课时6&#xff1a;series内容38 分19 秒课时7&#xff1a;dataframe25 分50 秒 # 载入pandas库 import pandas as pd import numpy as nps pd.Series([2,4,6…

Apache日志记录组件Log4j出现反序列化漏洞 黑客可以执行任意代码 所有2.x版本均受影响...

开源的东西用的人多了&#xff0c;自然漏洞就多。Apache用于日志记录的组件Log4j使用非常灵活&#xff0c;在相当多的开源项目中都有使用&#xff0c;此次漏洞影响所有Apache Log4j 2.*系列版本&#xff1a; Apache Log4j 2.0-alpha1 – Apache Log4j 2.8.1&#xff0c;使用Jav…

react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析

记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程&#xff0c;关键部分代码如下。首先在java后台中设置response中的参数&#xff1a;public void exportExcel(HttpServletResponse response, String fileName, String sheetName,List titleRow, List> dataRo…