php如何實(shí)現(xiàn)省市區(qū)查詢(xún)

本篇內(nèi)容介紹了“php如何實(shí)現(xiàn)省市區(qū)查詢(xún)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營(yíng)銷(xiāo)的理念,以專(zhuān)業(yè)定制企業(yè)官網(wǎng),網(wǎng)站建設(shè)、成都做網(wǎng)站,小程序開(kāi)發(fā),網(wǎng)頁(yè)設(shè)計(jì)制作,移動(dòng)網(wǎng)站建設(shè)成都全網(wǎng)營(yíng)銷(xiāo)幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級(jí)專(zhuān)業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對(duì)客戶(hù)都以感恩的心態(tài)奉獻(xiàn)自己的專(zhuān)業(yè)和所長(zhǎng)。

php實(shí)現(xiàn)省市區(qū)查詢(xún)的方法:1、設(shè)計(jì)一張數(shù)據(jù)表;2、根據(jù)查詢(xún)的id查找相對(duì)應(yīng)的parent_id;3、通過(guò)“function GetCityInfo(searstr, cityselect) {...}”等代碼實(shí)現(xiàn)省市區(qū)查詢(xún)即可。

php如何實(shí)現(xiàn)省市區(qū)查詢(xún)

本文操作環(huán)境:Windows7系統(tǒng),PHP7.1版,Dell G3電腦。

PHP實(shí)現(xiàn)省市縣(區(qū))三級(jí)聯(lián)動(dòng)查詢(xún)

聯(lián)動(dòng)查詢(xún)

什么是聯(lián)動(dòng)查詢(xún),其實(shí)這個(gè)東西在生活中非常常見(jiàn),比如網(wǎng)購(gòu)(這個(gè)幾乎人人都用過(guò)吧),在網(wǎng)購(gòu)的時(shí)候,我們需要填寫(xiě)訂單信息,信息中有一項(xiàng)需要填寫(xiě)地址的地方,有的網(wǎng)站則用的是聯(lián)動(dòng)查詢(xún),節(jié)省了用戶(hù)填寫(xiě)訂單的時(shí)間,這時(shí)候聯(lián)動(dòng)查詢(xún)就排上用場(chǎng)了,比如當(dāng)我們?cè)谑∠吕蛑羞x擇:河北省,相對(duì)應(yīng)的市區(qū)就需要改變里面的信息,將相對(duì)應(yīng)的市區(qū)加載到下拉框里面,貼個(gè)圖片
php如何實(shí)現(xiàn)省市區(qū)查詢(xún)

數(shù)據(jù)庫(kù)設(shè)計(jì)

設(shè)計(jì)一張表,然后這張表循環(huán)查詢(xún)自己,根據(jù)查詢(xún)的id查找相對(duì)應(yīng)的parent_id,就能夠查詢(xún)到想要的結(jié)果,最后兩個(gè)字段是冗余字段,可要可不要,根據(jù)自己項(xiàng)目需求
php如何實(shí)現(xiàn)省市區(qū)查詢(xún)
創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)句如下,數(shù)據(jù)庫(kù)為MySQL數(shù)據(jù)庫(kù)

CREATE TABLE `china_area` (
  `id` int(11) NOT NULL,
  `parent_id` int(11) NOT NULL DEFAULT '0',
  `code` varchar(10) NOT NULL,
  `name` varchar(191) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

簡(jiǎn)單插入一些數(shù)據(jù),完整表數(shù)據(jù)很大,大概三千多行,這里就不展示所有的數(shù)據(jù)代碼了,免得華而不實(shí),想要這些數(shù)據(jù)的話(huà),可以去網(wǎng)上找一下,或者自己設(shè)計(jì),我也上傳了一份,但是需要積分

INSERT INTO `china_area` (`id`, `parent_id`, `code`, `name`, `created_at`, `updated_at`) VALUES(1, 0, '110000', '北京市', NULL, NULL),(2, 0, '120000', '天津市', NULL, NULL),(3, 0, '130000', '河北省', NULL, NULL),(4, 0, '140000', '山西省', NULL, NULL),(5, 0, '150000', '內(nèi)蒙古自治區(qū)', NULL, NULL),(6, 0, '210000', '遼寧省', NULL, NULL),(7, 0, '220000', '吉林省', NULL, NULL),(8, 0, '230000', '黑龍江省', NULL, NULL),(9, 0, '310000', '上海市', NULL, NULL),(10, 0, '320000', '江蘇省', NULL, NULL),(11, 0, '330000', '浙江省', NULL, NULL),(12, 0, '340000', '安徽省', NULL, NULL),(13, 0, '350000', '福建省', NULL, NULL),(14, 0, '360000', '江西省', NULL, NULL),(15, 0, '370000', '山東省', NULL, NULL),(16, 0, '410000', '河南省', NULL, NULL),(17, 0, '420000', '湖北省', NULL, NULL),(18, 0, '430000', '湖南省', NULL, NULL),(19, 0, '440000', '廣東省', NULL, NULL),(20, 0, '450000', '廣西壯族自治區(qū)', NULL, NULL),(21, 0, '460000', '海南省', NULL, NULL),(22, 0, '500000', '重慶市', NULL, NULL),(23, 0, '510000', '四川省', NULL, NULL),(24, 0, '520000', '貴州省', NULL, NULL),(25, 0, '530000', '云南省', NULL, NULL),(26, 0, '540000', '西藏自治區(qū)', NULL, NULL),(27, 0, '610000', '陜西省', NULL, NULL),(28, 0, '620000', '甘肅省', NULL, NULL),(29, 0, '630000', '青海省', NULL, NULL),(30, 0, '640000', '寧夏回族自治區(qū)', NULL, NULL),(31, 0, '650000', '新疆維吾爾自治區(qū)', NULL, NULL),(32, 0, '710000', '臺(tái)灣省', NULL, NULL),(33, 0, '810000', '香港特別行政區(qū)', NULL, NULL),(34, 0, '820000', '澳門(mén)特別行政區(qū)', NULL, NULL),(35, 1, '110100', '北京城區(qū)', NULL, NULL),(36, 35, '110101', '東城區(qū)', NULL, NULL),(37, 35, '110102', '西城區(qū)', NULL, NULL),(38, 35, '110105', '朝陽(yáng)區(qū)', NULL, NULL),(39, 35, '110106', '豐臺(tái)區(qū)', NULL, NULL),(40, 35, '110107', '石景山區(qū)', NULL, NULL),(41, 35, '110108', '海淀區(qū)', NULL, NULL),(42, 35, '110109', '門(mén)頭溝區(qū)', NULL, NULL),(43, 35, '110111', '房山區(qū)', NULL, NULL),(44, 35, '110112', '通州區(qū)', NULL, NULL),(45, 35, '110113', '順義區(qū)', NULL, NULL),(46, 35, '110114', '昌平區(qū)', NULL, NULL),(47, 35, '110115', '大興區(qū)', NULL, NULL),(48, 35, '110116', '懷柔區(qū)', NULL, NULL),(49, 35, '110117', '平谷區(qū)', NULL, NULL),(50, 35, '110118', '密云區(qū)', NULL, NULL),(51, 35, '110119', '延慶區(qū)', NULL, NULL),(52, 2, '120100', '天津城區(qū)', NULL, NULL),(53, 52, '120101', '和平區(qū)', NULL, NULL),(54, 52, '120102', '河?xùn)|區(qū)', NULL, NULL),(55, 52, '120103', '河西區(qū)', NULL, NULL),(56, 52, '120104', '南開(kāi)區(qū)', NULL, NULL),(57, 52, '120105', '河北區(qū)', NULL, NULL),(58, 52, '120106', '紅橋區(qū)', NULL, NULL),(59, 52, '120110', '東麗區(qū)', NULL, NULL),(60, 52, '120111', '西青區(qū)', NULL, NULL),(61, 52, '120112', '津南區(qū)', NULL, NULL),(62, 52, '120113', '北辰區(qū)', NULL, NULL),(63, 52, '120114', '武清區(qū)', NULL, NULL),(64, 52, '120115', '寶坻區(qū)', NULL, NULL),(65, 52, '120116', '濱海新區(qū)', NULL, NULL),(66, 52, '120117', '寧河區(qū)', NULL, NULL),(67, 52, '120118', '靜海區(qū)', NULL, NULL),(68, 52, '120119', '薊州區(qū)', NULL, NULL),(69, 3, '130100', '石家莊市', NULL, NULL),(70, 3, '130200', '唐山市', NULL, NULL),(71, 3, '130300', '秦皇島市', NULL, NULL),(72, 3, '130400', '邯鄲市', NULL, NULL),(73, 3, '130500', '邢臺(tái)市', NULL, NULL),(74, 3, '130600', '保定市', NULL, NULL),(75, 3, '130700', '張家口市', NULL, NULL),(76, 3, '130800', '承德市', NULL, NULL),(77, 3, '130900', '滄州市', NULL, NULL),(78, 3, '131000', '廊坊市', NULL, NULL),(79, 3, '131100', '衡水市', NULL, NULL),(80, 69, '130102', '長(zhǎng)安區(qū)', NULL, NULL),(81, 69, '130104', '橋西區(qū)', NULL, NULL),(82, 69, '130105', '新華區(qū)', NULL, NULL),(83, 69, '130107', '井陘礦區(qū)', NULL, NULL),(84, 69, '130108', '裕華區(qū)', NULL, NULL),(85, 69, '130109', '藁城區(qū)', NULL, NULL),(86, 69, '130110', '鹿泉區(qū)', NULL, NULL),(87, 69, '130111', '欒城區(qū)', NULL, NULL),(88, 69, '130121', '井陘縣', NULL, NULL),(89, 69, '130123', '正定縣', NULL, NULL),(90, 69, '130125', '行唐縣', NULL, NULL),(91, 69, '130126', '靈壽縣', NULL, NULL),(92, 69, '130127', '高邑縣', NULL, NULL),(93, 69, '130128', '深澤縣', NULL, NULL),(94, 69, '130129', '贊皇縣', NULL, NULL),(95, 69, '130130', '無(wú)極縣', NULL, NULL);

數(shù)據(jù)庫(kù)大致就是這樣,通過(guò)上一級(jí)的id然后查找和parent_id對(duì)應(yīng)的值找出相對(duì)應(yīng)的數(shù)據(jù),循環(huán)查找,三級(jí)聯(lián)動(dòng)查找兩次就能找到相對(duì)應(yīng)的結(jié)果,閑話(huà)少敘,下面開(kāi)始講明思路。

設(shè)計(jì)思路

第一個(gè)下拉框(也就是省份)是再頁(yè)面初始化的時(shí)候加載出來(lái)的,所以不用異步加載,第二個(gè)(市)和第三個(gè)(縣,區(qū))是異步加載出來(lái)的,然后當(dāng)用戶(hù)下拉框操作之后通過(guò)js事件發(fā)送Ajax請(qǐng)求獲取后臺(tái)代碼,然后后臺(tái)根據(jù)傳過(guò)來(lái)的parent_id(頁(yè)面?zhèn)鬏敱M量不要用數(shù)據(jù)庫(kù)里面的字段)的值進(jìn)行查找,數(shù)據(jù)庫(kù)查詢(xún)代碼如下

SELECT * FROM `china_area` WHERE parent_id=".$_GET['precityid']

然后將結(jié)果拼接成json發(fā)送給前臺(tái),然后用js拼接結(jié)果。

代碼實(shí)現(xiàn)

第一個(gè)下拉框在在頁(yè)面加載的時(shí)候直接生成可以直接生成,市和縣只需要添加select標(biāo)簽即可,不用添加相對(duì)應(yīng)的數(shù)據(jù),這里默認(rèn)沒(méi)有選選擇的下拉框用的value值是-1

<p class="row">//引用了bootstrap框架和jq庫(kù),節(jié)省代碼
    <p class="col-xs-2 bg-success col-xs-offset-3">
        <select class="form-control  province">
            <option value="-1">請(qǐng)選擇...</option>
            <?php
            $conn = mysqli_connect("localhost", "root", "", "zbt");//省份下拉框,可以在頁(yè)面剛加載的時(shí)候生成
            mysqli_query($conn, "set names utf8");
            $sqlstr = "SELECT * FROM `china_area` WHERE parent_id =0";
            $result = mysqli_query($conn, $sqlstr);
            while ($myrow = mysqli_fetch_array($result)) {?>
                <option value="<?php echo $myrow[0] ?>"><?php echo $myrow[3] ?></option>
            <?php } ?>
        </select>
    </p>
    <p class="col-xs-2 bg-success">
        <select class="form-control city"><!--市區(qū)下拉框-->
        </select>
    </p>
    <p class="col-xs-2 bg-success">
        <select class="form-control county"><!--縣級(jí)下拉框-->
        </select>
    </p></p>

HTML代碼就那么多,接下來(lái)就是js代碼,這里我引用了bootstrap框架和jQuery庫(kù)(不知道能不能說(shuō)是框架),jq幫我們封裝好了很多方法,直接用就行,閑話(huà)少說(shuō),直接上代碼

<script>
    $(function() {
        $(".province").change(function() { //省份下拉框事件
            var citysele = $(".city");//獲取要改變的下一個(gè)下拉框
            GetCityInfo("precityid=" + $(this).val(), citysele);
        });

        $(".city").change(function() { //市區(qū)下拉框事件
            var citysele = $(".county");
            GetCityInfo("precityid=" + $(this).val(), citysele);
        });

        $(".county").change(function() { //彈出結(jié)果
            alert("您選擇的城市是:" + $(".province option:selected").text() + " " + $(".city option:selected").text() + " " + $(".county option:selected").text())
        });

        function GetCityInfo(searstr, cityselect) {//兩個(gè)參數(shù),第一個(gè)是搜索字符串,第二個(gè)是相對(duì)應(yīng)的下一個(gè)要變動(dòng)的下拉框
            let sendtourl = encodeURI("conn.php?" + searstr);
            $.ajax({
                type: "GET",
                url: sendtourl,
                dataType: "json",
                success: function(data) {
                    cityselect.empty();
                    if (data.data.length <= 0) {
                        var option = "<option>暫無(wú)數(shù)據(jù)</option>";//沒(méi)有數(shù)據(jù)
                        cityselect.append(option);
                        return;
                    }
                    cityselect.append("<option value='-1'>請(qǐng)選擇...</option>");//執(zhí)行到這里就是有數(shù)據(jù),將數(shù)據(jù)添加到相對(duì)應(yīng)的下拉框
                    for (var i = 0; i < data.data.length; i++) {
                        var option = "<option value=" + data.data[i].id + ">" + data.data[i].name + "</option>";
                        cityselect.append(option);
                    }
                },
                error: function(xhr) {
                    alert("error" + xhr.status);
                }
            });
        }

    })</script>

代碼寫(xiě)的有點(diǎn)low,不過(guò)能用就行,有時(shí)候可能或出現(xiàn)寫(xiě)的js代碼沒(méi)有運(yùn)行的現(xiàn)象,給個(gè)提示,js代碼最好放在頁(yè)面最后面,接下來(lái)設(shè)計(jì)后臺(tái)查詢(xún)數(shù)據(jù)庫(kù)的PHP代碼,直接上代碼

<?php
header('Content-Type:application/json');if (!isset(getallheaders()['Referer'])) exit;//不是自己的網(wǎng)址不返回?cái)?shù)據(jù)$conn=mysqli_connect("localhost","root","","zbt"); mysqli_query($conn,"set names utf8");if (isset($_GET['precityid'])) {
	$sqlstr="SELECT * FROM `china_area` WHERE parent_id=".$_GET['precityid'];//根據(jù)前臺(tái)的數(shù)據(jù)查詢(xún)相對(duì)應(yīng)的表
	$result=mysqli_query($conn,$sqlstr);
	$datas=array();
	while($myrow=mysqli_fetch_array($result)){
		$rows=array();
		$rows["id"]=$myrow[0];
		$rows["parent_id"]=$myrow[1];
		$rows["code"]=$myrow[2];
		$rows['name']=$myrow[3];
		array_push($datas,$rows);
		$rows="";
	}//拼接結(jié)果
	$data=array();
	$data["code"]=200;//狀態(tài)碼
	$data["msg"]=getallheaders()['Referer'];//自定義消息,我是為了看一下Referer是否正確,這里可以刪除
	$data["data"]=$datas;
	echo json_encode($data,JSON_UNESCAPED_UNICODE);}?>

可以了,將項(xiàng)目放到服務(wù)器上運(yùn)行
php如何實(shí)現(xiàn)省市區(qū)查詢(xún)

“php如何實(shí)現(xiàn)省市區(qū)查詢(xún)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞標(biāo)題:php如何實(shí)現(xiàn)省市區(qū)查詢(xún)
網(wǎng)站網(wǎng)址:http://bm7419.com/article24/pssgje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站排名企業(yè)建站、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)