PHP三级联动查询通常用于构建动态的下拉菜单,其中每个下拉菜单的选项依赖于前一个下拉菜单的选择。例如,在一个表单中,用户首先选择一个国家,然后根据所选国家显示相应的省份,最后根据所选省份显示城市。
假设我们有一个数据库,包含三个表:countries
、provinces
和 cities
,分别存储国家、省份和城市的信息。
CREATE TABLE countries (
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE provinces (
id INT PRIMARY KEY,
country_id INT,
name VARCHAR(255),
FOREIGN KEY (country_id) REFERENCES countries(id)
);
CREATE TABLE cities (
id INT PRIMARY KEY,
province_id INT,
name VARCHAR(255),
FOREIGN KEY (province_id) REFERENCES provinces(id)
);
<?php
// 连接数据库
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 获取国家列表
$countries = [];
$result = $conn->query("SELECT id, name FROM countries");
while ($row = $result->fetch_assoc()) {
$countries[$row['id']] = $row['name'];
}
// 根据国家ID获取省份列表
if (isset($_POST['country_id'])) {
$country_id = $_POST['country_id'];
$provinces = [];
$result = $conn->query("SELECT id, name FROM provinces WHERE country_id = $country_id");
while ($row = $result->fetch_assoc()) {
$provinces[$row['id']] = $row['name'];
}
echo json_encode($provinces);
}
// 根据省份ID获取城市列表
if (isset($_POST['province_id'])) {
$province_id = $_POST['province_id'];
$cities = [];
$result = $conn->query("SELECT id, name FROM cities WHERE province_id = $province_id");
while ($row = $result->fetch_assoc()) {
$cities[] = $row['name'];
}
echo json_encode($cities);
}
$conn->close();
?>
<!DOCTYPE html>
<html>
<head>
<title>三级联动查询</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<select id="country" onchange="loadProvinces(this.value)">
<option value="">请选择国家</option>
<?php foreach ($countries as $id => $name): ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php endforeach; ?>
</select>
<select id="province" onchange="loadCities(this.value)">
<option value="">请选择省份</option>
</select>
<select id="city">
<option value="">请选择城市</option>
</select>
<script>
function loadProvinces(countryId) {
$.post('your_php_file.php', {country_id: countryId}, function(data) {
var provinces = JSON.parse(data);
var provinceSelect = $('#province');
provinceSelect.empty();
provinceSelect.append('<option value="">请选择省份</option>');
for (var id in provinces) {
provinceSelect.append('<option value="' + id + '">' + provinces[id] + '</option>');
}
});
}
function loadCities(provinceId) {
$.post('your_php_file.php', {province_id: provinceId}, function(data) {
var cities = JSON.parse(data);
var citySelect = $('#city');
citySelect.empty();
citySelect.append('<option value="">请选择城市</option>');
for (var i = 0; i < cities.length; i++) {
citySelect.append('<option value="' + cities[i] + '">' + cities[i] + '</option>');
}
});
}
</script>
</body>
</html>
通过以上步骤,你可以实现一个基本的PHP三级联动查询功能。根据具体需求,你可以进一步优化和扩展这个功能。
领取专属 10元无门槛券
手把手带您无忧上云