php省市联动实现

设计模式:ajax实现,数据库格式:id,name,parent_id

数据库:

CREATE TABLE IF NOT EXISTS `city` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;

INSERT INTO `city` (`id`, `name`, `parent_id`) VALUES
(1, ‘安徽‘, 0),
(2, ‘浙江‘, 0),
(3, ‘亳州‘, 1),
(4, ‘合肥‘, 1),
(5, ‘巢湖‘, 1),
(6, ‘涡阳‘, 3),
(7, ‘蒙城‘, 3),
(8, ‘利辛‘, 3),
(9, ‘谯城‘, 3),
(10, ‘杭州‘, 2),
(11, ‘宁波‘, 2),
(12, ‘温州‘, 2),
(13, ‘义乌‘, 2),
(14, ‘嘉兴‘, 2),
(15, ‘巢湖‘, 4),
(16, ‘阜阳‘, 1),
(17, ‘界首‘, 16),
(18, ‘泥鳅‘, 16),
(19, ‘拱墅区‘, 10),
(20, ‘江干区‘, 10),
(21, ‘临湖镇‘, 6),
(22, ‘立德镇‘, 5),
(23, ‘标里镇‘, 6),
(24, ‘花沟镇‘, 6),
(25, ‘义门镇‘, 6);

HTML代码:

<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="utf-8">
<style type="text/css">
h2{
    text-align:center;
    color:red;
}
.div{
    width:500px;
    height:300px;
    border:1px solid gray;
    margin:auto;
    text-align:center;
    padding-top:30px;
}
.div select{
    width:80px;
    height:25px;
    color:green;
}
</style>
</head>

<script type="text/javascript">

function deal(value,next){
    var Next=document.getElementById(next);

    //删除节点
    var oP=Next.getElementsByTagName("option");
    for(var i=oP.length-1;i>=1;i--){
            oP[i].parentNode.removeChild(oP[i]);
        }

    //创建ajax引擎
    var xmlhttp="";
    if(window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHttp");
    }

    //判断状态是否满足条件
    xmlhttp.onreadystatechange=function(){
        if(xmlhttp.readyState==4&&xmlhttp.status==200){
            var val=xmlhttp.responseText;
//             alert(val);
            var object=eval("("+val+")");
            for(var k in object){
                //创建节点
                var oPt=document.createElement("option");
                //添加属性和值
                oPt.setAttribute(‘value‘,object[k][‘name‘]);
                Next.appendChild(oPt);
                oPt.innerHTML=object[k][‘name‘];
            }
            }
        }
    var url="deal.php";
    var data="name="+value;
    //打开
    xmlhttp.open("post",url,true);

    xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//必须加上
    //发送数据
    xmlhttp.send(data);
}

window.onload=function(){

    deal(null,"sheng");
}
</script>

<body>
    <h2>省市联动AJAX实现</h2>
    <div class="div">
        <form action="Act.php" method="post">
            <!-- 省级标签 -->
            <select name="sheng" id="sheng" onchange="deal(this.value,‘shi‘)">
            <option>省</option>
            </select>

            <!-- 市级标签 -->
            <select name="shi" id="shi" onchange="deal(this.value,‘xian‘)">
            <option>市</option>
            </select>

            <!-- 县级标签 -->
            <select name="xian" id="xian" onchange="deal(this.value,‘zhen‘)">
            <option>县</option>
            </select>

            <!-- 镇级标签 -->
            <select name="zhen" id="zhen">
            <option>镇</option>
            </select>
            <input type="submit" value="提交"/>
        </form>
    </div>

</body>

</html>

php后台处理:

<?php
header("content-type:text/html;charset=utf-8");

$name=$_POST[‘name‘];

//连接数据库
$conn=mysqli_connect("localhost","root","");
if(!$conn){
    die("连接数据库失败");
}

//设置字符集
mysqli_query($conn, "set names utf8");

//选择数据库
mysqli_select_db($conn, "city");

$sql="select id from city where name="."‘$name‘;";

$res=mysqli_query($conn, $sql);
if(mysqli_num_rows($res)>0){
    $row=mysqli_fetch_assoc($res);
    $id=$row[‘id‘];
}else{
    $id=0;
}

$sql="select * from city where parent_id=".$id;

$res=mysqli_query($conn, $sql);
$arr=array();
if(mysqli_num_rows($res)>0){
    while($row=mysqli_fetch_assoc($res)){
        $arr[]=$row;
    }
}

foreach ($arr as $k=>$v){

    @$str.=‘{"name":‘.‘"‘.$v[‘name‘].‘","parent_id":‘.‘"‘.$v[‘parent_id‘].‘","id":‘.‘"‘.$v[‘id‘].‘"},‘;

}

echo "[".$str."]";

// echo ‘[{"name":"安徽","parent_id":"0"},{"name":"浙江","parent_id":"0"},{"name":"吉林","parent_id":"0"},]‘;

?>

实现效果:

时间: 2024-12-15 13:27:17

php省市联动实现的相关文章

自建List&lt;&gt;绑定ComboBox下拉框实现省市联动

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace _04省市联动 { public partial cl

fragment 中利用spinner实现省市联动

(1)布局文件就不在说明了,主要说代码的实现,先把代码贴上! package com.example.cl; import android.annotation.SuppressLint; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import

省市联动 js

工作中见到这个省市联动代码,虽然很简单也能写出来,还是随便把它记录下来. //省市联动 function area(obj_id, area_pId, data_call_back) { if (area_pId == -1) return; $.ajax({ type: 'GET', url: "/SysAdmin/Pages/tb_supplierAdd.aspx", data: { area_pId: area_pId }, dataType: 'json', success:

jquery插件-省市联动

由于项目需要需要实现一个省市联动,由于业务有一些特殊的需求,使用现有的插件略有不便,就自己实现了一个. 首先需要保存地区数据的JS数据文件,我这里命名为areaData.js,内容如下: /** * 保存地区信息 * 数据格式 * areaData = [{'pro': '北京', 'cities': {'-1': '北京'}}, {...}] * 直辖市存在-1,表示就是直辖市 */ (function(window) { window.areaData = [{"pro":&quo

几个数据库的小案例(二):极其简单的省市联动

总用有两个文件(frmMain.cs SqlHelper.cs) //frmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 省市联动

Dynamic CRM 2013学习笔记(八)过滤查找控件 (类似省市联动)

我们经常要实现类似省市联动一样的功能,常见的就是二个查找控件,一个选择了省后,另一个市的查找控件就自动过滤了,只显示当前省下的市,而不是所有的市.当然这是最简单的,实际工作中还有更复杂的功能要通过过滤查找控件来实现.本文主要介绍基本的查找控件过滤.多表关联的复杂过滤以及子表里实现查找控件的过滤.   一.简单的过滤 先看下需求: 按"Special GL Indicator" 来过滤 Posting 查找控件增加了preSearch事件.它发生在查找控件显示对话框供用户查找记录之前,与

AJAX案例四:省市联动

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 4 5 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4

Json 基于jQuery+JSON的省市联动效果

helloweba.com 作者:月光光 时间:2012-09-12 21:57 标签: jQuery  JSON  Ajax  省市联动 省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最为常见.开发者一般使用Ajax实现无刷新下拉联动.本文将讲述,利用jQuery插件,通过读取JSON数据,实现无刷新动态下拉省市二(三)级联动效果. 查看演示 下载源码 HTML 首先在head中载入jquery库和cityselect插件. <script type="tex

js实现的省市联动

最近工作,要用到省市联动的功能.网上搜了一下,发现有很多这样的例子,看了不少实例,把觉得写得不错的代码穿上来,好给大家分享一下. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/199