
本教程详细阐述如何利用ajax和javascript从数据库中获取指定日期范围内的数据。我们将通过html日期输入框捕获用户选择的起始和结束日期,使用xmlhttprequest对象异步发送请求至php后端,php脚本负责解析日期参数并执行sql查询,最终将过滤后的数据返回至前端页面展示。
在现代Web应用中,用户经常需要根据特定条件筛选数据,其中日期范围筛选是一个非常常见的需求。本教程将指导您如何结合HTML、JavaScript(Ajax)和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; }
form { margin-bottom: 20px; padding: 15px; border: 1px solid #ddd; border-radius: 5px; background-color: #f9f9f9; }
label { margin-right: 10px; font-weight: bold; }
input[type="date"] { padding: 8px; border: 1px solid #ccc; border-radius: 4px; margin-right: 15px; }
button { padding: 10px 15px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; }
button:hover { background-color: #0056b3; }
#tabledata { margin-top: 20px; border: 1px solid #eee; padding: 15px; background-color: #fff; border-radius: 5px; }
table { width: 100%; border-collapse: collapse; margin-top: 15px; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>数据筛选</h1>
<form onsubmit="datefilter(event);">
<label for="start">起始日期:</label>
<input type="date" id="start" name="start">
<label for="end">结束日期:</label>
<input type="date" id="end" name="end">
<button type="submit">获取数据</button>
</form>
<div id="tabledata">
<!-- 筛选后的数据将在此处显示 -->
<p>请选择日期范围并点击“获取数据”按钮。</p>
</div>
<script src="datefilter.js"></script> <!-- 引入 JavaScript 文件 -->
</body>
</html>关键点:
datefilter.js 文件将包含处理用户输入、构建Ajax请求并更新页面内容的逻辑。
立即学习“Java免费学习笔记(深入)”;
// datefilter.js
function datefilter(event) {
// 阻止表单的默认提交行为,即阻止页面刷新
if (event) {
event.preventDefault();
}
const startDateInput = document.getElementById('start');
const endDateInput = document.getElementById('end');
const startDate = startDateInput.value;
const endDate = endDateInput.value;
// 基本的输入校验:确保用户选择了日期
if (!startDate || !endDate) {
document.getElementById('tabledata').innerHTML = '<p style="color: red;">请选择起始和结束日期。</p>';
return;
}
// 创建 XMLHttpRequest 对象,用于发送异步请求
const xmlhttp = new XMLHttpRequest();
// 定义请求状态改变时的回调函数
xmlhttp.onreadystatechange = function () {
// readyState 4: 请求已完成,响应已就绪
// status 200: "OK"
if (this.readyState === 4 && this.status === 200) {
// 将服务器返回的响应内容更新到 tabledata 元素中
document.getElementById('tabledata').innerHTML = this.responseText;
} else if (this.readyState === 4 && this.status !== 200) {
// 请求失败时的错误处理
document.getElementById('tabledata').innerHTML = '<p style="color: red;">加载数据失败,请稍后再试。错误码: ' + this.status + '</p>';
console.error('Ajax request failed:', this.status, this.statusText);
}
};
// 构建 GET 请求 URL
// 将起始和结束日期作为查询参数传递给服务器脚本
// encodeURIComponent 用于编码URL参数,防止特殊字符导致问题
const url = `ajax/datefilter.php?s=${encodeURIComponent(startDate)}&e=${encodeURIComponent(endDate)}`;
// 配置请求:GET 方法,URL,异步 (true)
xmlhttp.open('GET', url, true);
// 发送请求
xmlhttp.send();
}关键点:
ajax/datefilter.php 文件将负责接收前端传递的日期参数,执行数据库查询,并将结果返回给前端。
<?php
// ajax/datefilter.php
// 包含数据库连接文件
// 假设 connect.php 包含了数据库连接逻辑,并创建了一个 $connect 变量
include("../../partials/connect.php"); // 根据实际文件路径调整
// 从 GET 请求中获取起始和结束日期参数
// 使用 ?? 运算符提供默认值,避免在参数缺失时产生未定义索引错误
$s_raw = $_GET['s'] ?? '';
$e_raw = $_GET['e'] ?? '';
// 验证日期参数是否为空
if (empty($s_raw) || empty($e_raw)) {
echo "<p style='color: red;'>错误:缺少日期参数。请确保选择了起始和结束日期。</p>";
exit(); // 终止脚本执行
}
// 将字符串日期转换为日期对象,并格式化为数据库兼容的格式
// HTML input type="date" 默认输出格式为 "YYYY-MM-DD"
// date_create() 可以解析这种格式
$sdate_obj = date_create($s_raw);
$edate_obj = date_create($e_raw);
// 检查日期对象是否成功创建,防止无效日期字符串
if ($sdate_obj === false || $edate_obj === false) {
echo "<p style='color: red;'>错误:无效的日期格式。请检查日期输入。</p>";
exit();
}
// 格式化日期为 YYYY-MM-DD,这是大多数数据库 DATE 字段的标准格式
$start_date = date_format($sdate_obj, "Y-m-d");
$end_date = date_format($edate_obj, "Y-m-d");
// SQL 查询:使用 BETWEEN 筛选日期范围
// 注意:直接拼接变量存在 SQL 注入风险,生产环境应使用预处理语句(Prepared Statements)
// 这里的示例代码是为了演示功能,实际应用中强烈建议使用 mysqli::prepare 或 PDO。
$sql = "SELECT `date`, `driver` FROM `0986` WHERE `date` BETWEEN '" . $start_date . "' AND '" . $end_date . "' ORDER BY `date` ASC";
// 执行查询
$results = $connect->query($sql);
if ($results) {
// 检查是否有查询结果
if ($results->num_rows > 0) {
echo "<table>";
echo "<thead><tr><th>日期</th><th>司机</th></tr></thead>";
echo "<tbody>";
// 遍历结果集并输出数据
while ($row = $results->fetch_assoc()) {
echo "<tr>";
// 使用 htmlspecialchars 防止 XSS 攻击
echo "<td>" . htmlspecialchars($row['date']) . "</td>";
echo "<td>" . htmlspecialchars($row['driver']) . "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
} else {
echo "<p>在选定日期范围内没有找到数据。</p>";
}
} else {
// 查询执行失败
echo "<p style='color: red;'>数据库查询失败:" . $connect->error . "</p>";
}
// 关闭数据库连接(如果 connect.php 没有自动关闭的话)
// $connect->close();
?>关键点:
// 预处理语句示例
// $stmt = $connect->prepare("SELECT `date`, `driver` FROM `0986` WHERE `date` BETWEEN ? AND ? ORDER BY `date` ASC");
// $stmt->bind_param("ss", $start_date, $end_date); // "ss" 表示两个字符串参数
// $stmt->execute();
// $result = $stmt->get_result();
// // 然后像之前一样处理 $result通过本教程,您已经学会了如何利用HTML构建日期选择界面,使用JavaScript的Ajax技术异步获取用户输入的日期,并将其发送到PHP后端。PHP脚本负责处理日期参数,执行安全的数据库查询,并将结果返回给前端进行动态展示。遵循文中提到的最佳实践,您可以构建出高效、安全且用户友好的日期范围数据筛选功能。
以上就是基于Ajax和JavaScript实现数据库日期范围数据筛选的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号