
在web开发中,我们经常需要根据用户的选择动态地显示数据。对于从数据库中加载的html表格数据,一种常见需求是根据某个字段(例如“状态”)进行筛选。本教程将展示如何通过以下方式实现这一功能:
这种方法的优势在于其简单性和服务器端控制,确保了数据的准确性和安全性。
我们将通过一个具体的例子来演示如何实现这一功能:假设有一个代理人列表,包含ID、姓名、级别、位置和状态(在线、离线、断开)。
首先,在HTML页面上创建三个按钮,分别对应“在线”、“离线”和“断开”三种状态。这些按钮实际上是带有href属性的zuojiankuohaophpcna>标签,它们会将相应的状态值作为GET参数传递给当前页面。
<div class="filter-buttons">
<a href="?status=Online" class="btn">在线</a>
<a href="?status=Offline" class="btn">离线</a>
<a href="?status=Disconnected" class="btn">断开</a>
<a href="?" class="btn">全部</a> <!-- 添加一个“全部”按钮,用于清除筛选 -->
</div>
<table id="main_table">
<thead>
<tr>
<th>Id</th>
<th>Agent Name</th>
<th>Agent Rank</th>
<th>Agent Location</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<!-- PHP将在此处填充表格数据 -->
</tbody>
</table>说明:
立即学习“PHP免费学习笔记(深入)”;
接下来,我们需要编写PHP代码来处理GET参数,并安全地从数据库中获取数据。
<?php
// 引入数据库连接文件
require 'CMS/processing/conn.php'; // 确保此路径正确且文件存在
// 初始化SQL查询语句
$sql = "SELECT id, agentName, agentRank, locationNames, agentStatus FROM agents";
$params = []; // 用于存储预处理语句的参数
$types = ""; // 用于存储预处理语句的参数类型
// 检查URL中是否存在'status'参数
if (isset($_GET['status']) && !empty($_GET['status'])) {
$filterStatus = $_GET['status'];
// 验证状态值是否合法,防止恶意输入
$allowedStatuses = ['Online', 'Offline', 'Disconnected'];
if (in_array($filterStatus, $allowedStatuses)) {
$sql .= " WHERE agentStatus = ?";
$params[] = $filterStatus;
$types .= "s"; // 's' 表示字符串类型
} else {
// 如果状态值不合法,可以忽略过滤或进行错误处理
// 例如:$filterStatus = null;
}
}
// 准备并执行SQL查询
$stmt = mysqli_prepare($con, $sql);
if ($stmt) {
// 如果有参数需要绑定
if (!empty($params)) {
// 使用 call_user_func_array 动态绑定参数
// 第一个参数是 $stmt,后面是 $types 和 $params 数组的元素
mysqli_stmt_bind_param($stmt, $types, ...$params);
}
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($result) {
// 遍历查询结果并填充HTML表格
echo "<tbody>";
while ($info = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>" . htmlspecialchars($info['id']) . "</td>";
echo "<td>" . htmlspecialchars($info['agentName']) . "</td>";
echo "<td>" . htmlspecialchars($info['agentRank']) . "</td>";
echo "<td>" . htmlspecialchars($info['locationNames']) . "</td>";
echo "<td>" . htmlspecialchars($info['agentStatus']) . "</td>";
echo "</tr>";
}
echo "</tbody>";
mysqli_free_result($result);
} else {
echo "<tr><td colspan='5'>查询结果为空或发生错误。</td></tr>";
}
mysqli_stmt_close($stmt);
} else {
echo "<tr><td colspan='5'>SQL查询准备失败: " . mysqli_error($con) . "</td></tr>";
}
// 关闭数据库连接
mysqli_close($con);
?>代码解析与安全注意事项:
将HTML按钮和PHP代码整合到一个文件中(例如agents.php):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>代理人状态筛选</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
.filter-buttons { margin-bottom: 20px; }
.filter-buttons .btn {
display: inline-block;
padding: 8px 15px;
margin-right: 10px;
background-color: #007bff;
color: white;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.filter-buttons .btn:hover {
background-color: #0056b3;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<h1>代理人列表</h1>
<div class="filter-buttons">
<a href="?status=Online" class="btn">在线</a>
<a href="?status=Offline" class="btn">离线</a>
<a href="?status=Disconnected" class="btn">断开</a>
<a href="?" class="btn">全部</a>
</div>
<table id="main_table">
<thead>
<tr>
<th>Id</th>
<th>Agent Name</th>
<th>Agent Rank</th>
<th>Agent Location</th>
<th>Status</th>
</tr>
</thead>
<?php
// 引入数据库连接文件
require 'CMS/processing/conn.php'; // 确保此路径正确且文件存在
// 初始化SQL查询语句
$sql = "SELECT id, agentName, agentRank, locationNames, agentStatus FROM agents";
$params = []; // 用于存储预处理语句的参数
$types = ""; // 用于存储预处理语句的参数类型
// 检查URL中是否存在'status'参数
if (isset($_GET['status']) && !empty($_GET['status'])) {
$filterStatus = $_GET['status'];
// 验证状态值是否合法,防止恶意输入
$allowedStatuses = ['Online', 'Offline', 'Disconnected'];
if (in_array($filterStatus, $allowedStatuses)) {
$sql .= " WHERE agentStatus = ?";
$params[] = $filterStatus;
$types .= "s"; // 's' 表示字符串类型
} else {
// 如果状态值不合法,可以忽略过滤或进行错误处理
// 例如:$filterStatus = null;
}
}
// 准备并执行SQL查询
$stmt = mysqli_prepare($con, $sql);
if ($stmt) {
// 如果有参数需要绑定
if (!empty($params)) {
mysqli_stmt_bind_param($stmt, $types, ...$params);
}
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($result) {
// 遍历查询结果并填充HTML表格
echo "<tbody>";
while ($info = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>" . htmlspecialchars($info['id']) . "</td>";
echo "<td>" . htmlspecialchars($info['agentName']) . "</td>";
echo "<td>" . htmlspecialchars($info['agentRank']) . "</td>";
echo "<td>" . htmlspecialchars($info['locationNames']) . "</td>";
echo "<td>" . htmlspecialchars($info['agentStatus']) . "</td>";
echo "</tr>";
}
echo "</tbody>";
mysqli_free_result($result);
} else {
echo "<tbody><tr><td colspan='5'>查询结果为空或发生错误。</td></tr></tbody>";
}
mysqli_stmt_close($stmt);
} else {
echo "<tbody><tr><td colspan='5'>SQL查询准备失败: " . mysqli_error($con) . "</td></tr></tbody>";
}
// 关闭数据库连接
mysqli_close($con);
?>
</table>
</body>
</html>通过结合PHP的服务器端处理能力和URL参数传递机制,我们可以高效且安全地实现HTML表格的动态数据过滤。关键在于利用预处理语句来防范安全风险,并对用户输入进行严格验证。这种方法不仅提升了用户体验,也确保了Web应用程序的数据完整性和安全性。
以上就是基于PHP和URL参数实现动态过滤HTML表格数据的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号