PHP数据库关键词搜索及可选日期范围查询实现咨询
搞定PHP数据库搜索:关键词+可选时间范围(作业版)
嘿,作为PHP新手,能搞定作业里的搜索功能其实挺有成就感的!我给你梳理几个实用的步骤,完全贴合你的需求——先搞定多字段关键词搜索,再加上可选的时间范围过滤,咱暂时不考虑SQL注入这些安全问题,先把功能跑起来再说!
一、先搭前端搜索表单
首先得让用户能输入搜索内容和时间范围,写个简单的HTML表单就行:
<form method="GET" action="search.php"> <div> <label>关键词搜索(姓名/医生/病症):</label> <input type="text" name="keyword" placeholder="输入关键词"> </div> <div> <label>时间范围:</label> <input type="date" name="start_date"> <span>至</span> <input type="date" name="end_date"> </div> <button type="submit">搜索</button> </form>
这里用GET方法是因为搜索请求适合用GET(方便用户收藏链接),当然用POST也没问题,看你作业要求。
二、后端实现关键词搜索
接下来在search.php里处理搜索逻辑:
- 先获取前端传过来的关键词参数
- 拼接SQL语句,用
OR来匹配多个字段(比如name、doctor、symptom,你可以换成你数据库里的实际字段名)
示例代码:
// 连接数据库(换成你的数据库信息) $conn = mysqli_connect('localhost', '用户名', '密码', '数据库名'); // 获取关键词,默认空字符串 $keyword = isset($_GET['keyword']) ? $_GET['keyword'] : ''; // 基础SQL,用1=1是为了方便后续拼接条件,不用纠结第一个条件要不要加AND $sql = "SELECT * FROM 你的表名 WHERE 1=1"; // 如果关键词不为空,添加多字段模糊匹配条件 if (!empty($keyword)) { $sql .= " AND (name LIKE '%$keyword%' OR doctor LIKE '%$keyword%' OR symptom LIKE '%$keyword%')"; }
三、添加可选时间范围过滤
时间范围是可选的,所以要判断用户有没有输入开始/结束日期,再把条件拼到SQL里:
// 获取时间参数 $start_date = isset($_GET['start_date']) ? $_GET['start_date'] : ''; $end_date = isset($_GET['end_date']) ? $_GET['end_date'] : ''; // 添加时间范围条件(假设你的时间字段是`visit_date`,类型是DATE/DATETIME) if (!empty($start_date) && !empty($end_date)) { $sql .= " AND visit_date BETWEEN '$start_date' AND '$end_date'"; } elseif (!empty($start_date)) { // 只填了开始时间,搜索大于等于该日期的记录 $sql .= " AND visit_date >= '$start_date'"; } elseif (!empty($end_date)) { // 只填了结束时间,搜索小于等于该日期的记录 $sql .= " AND visit_date <= '$end_date'"; }
注意:你的数据库时间字段格式要和前端传的一致(比如MySQL的DATE是YYYY-MM-DD,前端type="date"刚好就是这个格式,完美匹配)。
四、执行查询并输出结果
最后执行SQL,把结果展示出来:
// 执行查询 $result = mysqli_query($conn, $sql); // 输出结果 if (mysqli_num_rows($result) > 0) { echo "<h3>搜索结果:</h3>"; echo "<ul>"; while ($row = mysqli_fetch_assoc($result)) { echo "<li>姓名:{$row['name']} | 医生:{$row['doctor']} | 病症:{$row['symptom']} | 就诊日期:{$row['visit_date']}</li>"; } echo "</ul>"; } else { echo "没有找到匹配的记录"; } // 关闭连接 mysqli_close($conn);
几个新手小提醒
- 把代码里的
用户名、密码、数据库名、你的表名、字段名(比如name、doctor这些)全部换成你自己的实际信息! - 如果你的时间字段是DATETIME类型(带时分秒),前端还是用
type="date"也没问题,MySQL会自动把YYYY-MM-DD转换成YYYY-MM-DD 00:00:00来匹配。 - 测试的时候可以先输关键词,再试试只填时间,或者两者都填,看看结果对不对。
内容的提问来源于stack exchange,提问作者Andy Terry
相关产品推荐
相关产品推荐

