> 백엔드 개발 > PHP 문제 > PHP에서 지방 및 도시 쿼리를 구현하는 방법

PHP에서 지방 및 도시 쿼리를 구현하는 방법

藏色散人
풀어 주다: 2023-03-14 15:40:02
원래의
2254명이 탐색했습니다.

PHP에서 지방 및 도시 쿼리를 구현하는 방법: 1. 데이터 테이블을 디자인합니다. 2. 쿼리 ID에 따라 해당 parent_id를 찾습니다. 3. "function GetCityInfo(searstr, cityselect) {...}와 같은 코드를 사용합니다. " 시/도를 검색할 수 있습니다.

PHP에서 지방 및 도시 쿼리를 구현하는 방법

이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.1, Dell G3 컴퓨터.

PHP는 도, 시, 군(구)의 3단계 연결 쿼리를 구현합니다.

연결 쿼리

실제로 이런 일은 생활 속에서 흔히 일어나는 일이죠? 온라인 쇼핑처럼(거의 모든 사람들이 이전에 모두 사용해 본 적이 있음), 온라인 쇼핑을 할 때, 주소를 입력해야 하는 정보 항목이 있는데, 이는 사용자를 절약합니다. 이때 연결 쿼리는 유용합니다. 예를 들어 지방 드롭다운 상자에서 허베이성을 선택하면 해당 도시 지역이 내부 정보를 변경해야 합니다. 해당 도시 지역을 드롭다운 상자에 넣고 그림을 붙여 넣습니다.
PHP에서 지방 및 도시 쿼리를 구현하는 방법

데이터베이스 디자인

테이블을 디자인한 다음 이 테이블은 루프에서 자신을 쿼리하고 쿼리 ID에 따라 해당 parent_id를 찾은 다음 원하는 결과를 쿼리할 수 있습니다. 필요 여부에 관계없이 내 프로젝트 요구 사항에 따라 중복되는 필드입니다.
PHP에서 지방 및 도시 쿼리를 구현하는 방법
데이터베이스를 만드는 명령문은 다음과 같습니다. MySQL 데이터베이스

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;
로그인 후 복사

일부 데이터를 삽입하세요. 전체 테이블 데이터는 약 3천 행으로 매우 큽니다. 이 데이터가 필요하면 온라인에서 검색하거나 직접 디자인할 수도 있습니다. 하나 올렸는데 포인트가 필요해요

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', '内蒙古自治区', 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', '广西壮族自治区', 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', '西藏自治区', NULL, NULL),(27, 0, '610000', '陕西省', NULL, NULL),(28, 0, '620000', '甘肃省', NULL, NULL),(29, 0, '630000', '青海省', NULL, NULL),(30, 0, '640000', '宁夏回族自治区', NULL, NULL),(31, 0, '650000', '新疆维吾尔自治区', NULL, NULL),(32, 0, '710000', '台湾省', NULL, NULL),(33, 0, '810000', '香港特别行政区', NULL, NULL),(34, 0, '820000', '澳门特别行政区', NULL, NULL),(35, 1, '110100', '北京城区', NULL, NULL),(36, 35, '110101', '东城区', NULL, NULL),(37, 35, '110102', '西城区', NULL, NULL),(38, 35, '110105', '朝阳区', NULL, NULL),(39, 35, '110106', '丰台区', NULL, NULL),(40, 35, '110107', '石景山区', NULL, NULL),(41, 35, '110108', '海淀区', NULL, NULL),(42, 35, '110109', '门头沟区', NULL, NULL),(43, 35, '110111', '房山区', NULL, NULL),(44, 35, '110112', '通州区', NULL, NULL),(45, 35, '110113', '顺义区', NULL, NULL),(46, 35, '110114', '昌平区', NULL, NULL),(47, 35, '110115', '大兴区', NULL, NULL),(48, 35, '110116', '怀柔区', NULL, NULL),(49, 35, '110117', '平谷区', NULL, NULL),(50, 35, '110118', '密云区', NULL, NULL),(51, 35, '110119', '延庆区', NULL, NULL),(52, 2, '120100', '天津城区', NULL, NULL),(53, 52, '120101', '和平区', NULL, NULL),(54, 52, '120102', '河东区', NULL, NULL),(55, 52, '120103', '河西区', NULL, NULL),(56, 52, '120104', '南开区', NULL, NULL),(57, 52, '120105', '河北区', NULL, NULL),(58, 52, '120106', '红桥区', NULL, NULL),(59, 52, '120110', '东丽区', NULL, NULL),(60, 52, '120111', '西青区', NULL, NULL),(61, 52, '120112', '津南区', NULL, NULL),(62, 52, '120113', '北辰区', NULL, NULL),(63, 52, '120114', '武清区', NULL, NULL),(64, 52, '120115', '宝坻区', NULL, NULL),(65, 52, '120116', '滨海新区', NULL, NULL),(66, 52, '120117', '宁河区', NULL, NULL),(67, 52, '120118', '静海区', NULL, NULL),(68, 52, '120119', '蓟州区', 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', '邢台市', 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', '长安区', NULL, NULL),(81, 69, '130104', '桥西区', NULL, NULL),(82, 69, '130105', '新华区', NULL, NULL),(83, 69, '130107', '井陉矿区', NULL, NULL),(84, 69, '130108', '裕华区', NULL, NULL),(85, 69, '130109', '藁城区', NULL, NULL),(86, 69, '130110', '鹿泉区', NULL, NULL),(87, 69, '130111', '栾城区', 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', '无极县', NULL, NULL);
로그인 후 복사

데이터베이스는 대략적으로 상위의 id를 통해 해당 값을 찾은 후 parent_id에 해당하는 값을 검색하면 됩니다. 두 번 더 이상 고민하지 않고 해당 결과를 찾을 수 있습니다. 이제 아이디어를 설명하겠습니다.

디자인 아이디어

페이지 초기화 시 첫 번째 드롭다운 상자(즉, 도)가 로드되므로 두 번째(시)와 세 번째(군, 구)를 비동기적으로 로드할 필요가 없습니다. 비동기적으로 로드된 후 사용자가 드롭다운 상자를 조작하면 js 이벤트를 통해 Ajax 요청이 전송되어 배경 코드를 얻은 다음 전달된 parent_id 값을 기반으로 백그라운드를 검색합니다(필드를 사용하지 마십시오). 페이지 전송을 위한 데이터베이스에) 데이터베이스 쿼리 코드는 다음과 같습니다

SELECT * FROM `china_area` WHERE parent_id=".$_GET['precityid']
로그인 후 복사

그런 다음 결과를 json으로 스플라이스하여 프론트 데스크로 보낸 다음 js를 사용하여 결과를 스플라이스합니다.

코드 구현

첫 번째 드롭다운 상자는 페이지 로드 시 바로 생성될 수 있습니다. 시, 군은 선택 태그만 추가하면 됩니다. 해당 데이터를 추가할 필요는 없습니다. 기본적으로 값은 -1

<p>//引用了bootstrap框架和jq库,节省代码
    </p><p>
        <select>
            <option>请选择...</option>
            <?php             $conn = mysqli_connect("localhost", "root", "", "zbt");//省份下拉框,可以在页面刚加载的时候生成
            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>"><?php  echo $myrow[3] ?>
</option>
            <?php  } ?>
        </select>
    </p>
    <p>
        <select><!--市区下拉框-->
        </select>
    </p>
    <p>
        <select><!--县级下拉框-->
        </select>
    </p>
로그인 후 복사

HTML 코드가 너무 많고 다음 단계는 js 코드입니다. 여기서는 부트스트랩 프레임워크와 jQuery 라이브러리를 인용했습니다. jq는 많은 메서드를 직접 캡슐화하는 데 도움이 되었습니다. 그냥 사용하고 채팅을 중단하고 바로 코드로 이동하세요.

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

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

        $(".county").change(function() { //弹出结果
            alert("您选择的城市是:" + $(".province option:selected").text() + " " + $(".city option:selected").text() + " " + $(".county option:selected").text())
        });

        function GetCityInfo(searstr, cityselect) {//两个参数,第一个是搜索字符串,第二个是相对应的下一个要变动的下拉框
            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>暂无数据";//没有数据
                        cityselect.append(option);
                        return;
                    }
                    cityselect.append("<option value=&#39;-1&#39;>请选择...");//执行到这里就是有数据,将数据添加到相对应的下拉框
                    for (var i = 0; i < data.data.length; i++) {
                        var option = "<option value=" + data.data[i].id + ">" + data.data[i].name + "";
                        cityselect.append(option);
                    }
                },
                error: function(xhr) {
                    alert("error" + xhr.status);
                }
            });
        }

    })</script>
로그인 후 복사

코드가 약간 낮지만 여기에서는 js 코드가 실행되지 않을 수도 있습니다. 팁입니다. js 코드를 페이지 끝에 넣는 것이 가장 좋습니다. 다음으로, 백엔드 쿼리 데이터베이스용 PHP 코드를 디자인하세요. 코드를 업로드하기만 하면 됩니다.

<?php header(&#39;Content-Type:application/json&#39;);if (!isset(getallheaders()[&#39;Referer&#39;])) exit;//不是自己的网址不返回数据$conn=mysqli_connect("localhost","root","","zbt"); mysqli_query($conn,"set names utf8");if (isset($_GET[&#39;precityid&#39;])) {
	$sqlstr="SELECT * FROM `china_area` WHERE parent_id=".$_GET[&#39;precityid&#39;];//根据前台的数据查询相对应的表
	$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[&#39;name&#39;]=$myrow[3];
		array_push($datas,$rows);
		$rows="";
	}//拼接结果
	$data=array();
	$data["code"]=200;//状态码
	$data["msg"]=getallheaders()[&#39;Referer&#39;];//自定义消息,我是为了看一下Referer是否正确,这里可以删除
	$data["data"]=$datas;
	echo json_encode($data,JSON_UNESCAPED_UNICODE);}?>
로그인 후 복사

그렇게 하면 프로젝트를 실행할 수 있습니다
PHP에서 지방 및 도시 쿼리를 구현하는 방법

요약

효과는 괜찮습니다. 물론 사용법만 익히는 것일 뿐 실제 적용은 확실히 이보다 더 복잡합니다. 기분이 좋으면 한 번의 클릭으로 세 번 클릭해도 됩니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 지방 및 도시 쿼리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿