PHP+SQL实现全量展示数据、高亮搜索项并提示无匹配记录
实现方案
你的问题核心是判断「无搜索匹配」的逻辑位置错了:你之前把这个判断和「数据表是否有数据」的判断绑定在了一起,导致两个需求互斥。
核心逻辑调整
不需要修改SQL查询语句,永远查询全量员工数据,单独加一个标记变量记录搜索关键词是否命中即可:
- 初始化
$is_match = false,代表默认没有匹配结果 - 遍历每一条员工数据时,判断当前行ID是否和搜索关键词一致,一致则给当前行加高亮class,同时把
$is_match设为true - 所有数据遍历完成后,再做判断:如果用户输入了搜索关键词、且
$is_match还是false,再输出Record not found提示
修正后完整代码
<?php $search_keyword = ''; $is_match = false; if (isset($_POST['search'])) { $search_keyword = trim($_POST['search']); } ?> <head></head> <body> <form name="searchForm" action="" method="POST"> <input type="text" id="search" name="search" placeholder="Enter Employee ID Search" value="<?php echo htmlspecialchars($search_keyword); ?>"> </form> <?php // 固定查询全量员工,不加WHERE过滤 $sql1 = "SELECT id, name, address FROM employee"; $result = $conn->query($sql1); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { // 判断当前行是否匹配搜索词 $row_match = !empty($search_keyword) && (string)$row["id"] === $search_keyword; if ($row_match) { $is_match = true; } ?> <div class="row"> <div class="employee"> <div class="<?php echo $row_match ? 'red-bg' : 'white-bg'; ?>"> <div class="col-md-2"><?php echo $row["id"] ?></div> <div class="col-md-3"><?php echo $row["name"] ?></div> <div class="col-md-5"><?php echo $row["address"] ?></div> </div> </div> </div> <?php } // 遍历完所有数据后,判断是否需要输出无匹配提示 if (!empty($search_keyword) && !$is_match) { ?> <div class="row"> <div class="employee"> <div class="white-bg"> <?php echo "Record not found." ?> </div> </div> </div> <?php } } else { // 员工表本身无数据时的提示 ?> <div class="row"> <div class="employee"> <div class="white-bg"> <?php echo "No employee records in system." ?> </div> </div> </div> <?php } ?> </body> <script> document.onkeydown = function(evt) { var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : event.keyCode; if (keyCode == 13) { document.searchForm.submit(); } } </script>
额外优化点
- 搜索框增加了关键词回填,提交后用户输入的内容不会消失,用
htmlspecialchars转义规避XSS风险 - 合并了原来拆分的多段样式判断逻辑,代码更简洁
- 区分了两种空状态:员工表本身无数据、搜索无匹配,不会出现逻辑混淆
- ID判断时统一转字符串做全等匹配,避免数字/字符串类型隐式转换导致的匹配错误
内容的提问来源于stack exchange,提问作者Lovi
相关产品推荐
相关产品推荐

