PHP三级联动通常指的是在网页表单中,通过三个下拉菜单(Select)实现数据的级联选择。例如,省份、城市、区县的三级联动。这种功能通常用于地理信息的选择,但也可以应用于其他层级关系的数据选择。
CREATE TABLE provinces (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE cities (
id INT PRIMARY KEY AUTO_INCREMENT,
province_id INT,
name VARCHAR(50) NOT NULL,
FOREIGN KEY (province_id) REFERENCES provinces(id)
);
CREATE TABLE districts (
id INT PRIMARY KEY AUTO_INCREMENT,
city_id INT,
name VARCHAR(50) NOT NULL,
FOREIGN KEY (city_id) REFERENCES cities(id)
);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>三级联动示例</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<select id="province">
<option value="">请选择省份</option>
</select>
<select id="city" disabled>
<option value="">请选择城市</option>
</select>
<select id="district" disabled>
<option value="">请选择区县</option>
</select>
<script>
$(document).ready(function() {
$.ajax({
url: 'get_provinces.php',
type: 'GET',
success: function(data) {
var provinces = JSON.parse(data);
$.each(provinces, function(index, province) {
$('#province').append($('<option>', {
value: province.id,
text : province.name
}));
});
}
});
$('#province').change(function() {
var provinceId = $(this).val();
if (provinceId) {
$('#city').prop('disabled', false);
$.ajax({
url: 'get_cities.php',
type: 'GET',
data: { province_id: provinceId },
success: function(data) {
var cities = JSON.parse(data);
$('#city').empty().append($('<option>', {
value: '',
text : '请选择城市'
}));
$.each(cities, function(index, city) {
$('#city').append($('<option>', {
value: city.id,
text : city.name
}));
});
}
});
} else {
$('#city').empty().prop('disabled', true);
$('#district').empty().prop('disabled', true);
}
});
$('#city').change(function() {
var cityId = $(this).val();
if (cityId) {
$('#district').prop('disabled', false);
$.ajax({
url: 'get_districts.php',
type: 'GET',
data: { city_id: cityId },
success: function(data) {
var districts = JSON.parse(data);
$('#district').empty().append($('<option>', {
value: '',
text : '请选择区县'
}));
$.each(districts, function(index, district) {
$('#district').append($('<option>', {
value: district.id,
text : district.name
}));
});
}
});
} else {
$('#district').empty().prop('disabled', true);
}
});
});
</script>
</body>
</html>
// get_provinces.php
<?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);
}
$sql = "SELECT id, name FROM provinces";
$result = $conn->query($sql);
$provinces = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$provinces[] = $row;
}
}
echo json_encode($provinces);
$conn->close();
?>
// get_cities.php
<?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);
}
$province_id = $_GET['province_id'];
$sql = "SELECT id, name FROM cities WHERE province_id = $province_id";
$result = $conn->query($sql);
$cities = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$cities[] = $row;
}
}
echo json_encode($cities);
$conn->close();
?>
// get_districts.php
<?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);
}
$city_id = $_GET['city_id'];
$sql = "SELECT id, name FROM districts WHERE city_id = $city_id";
$result = $conn->query($sql);
$districts = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$districts[] = $row;
}
}
echo json_encode($districts);
$conn->close();
?>
通过以上步骤和代码示例,你可以实现一个基本的PHP三级联动功能。根据实际需求,你可以进一步优化和扩展该功能。
领取专属 10元无门槛券
手把手带您无忧上云