如何通过下拉列表选择全部获取数据库所有设备数据
实现选择“Select All”展示所有设备数据的解决方案
你的代码已经实现了单个设备的查询功能,只需修改后端PHP逻辑即可支持“Select All”选项,同时为了避免SQL注入风险,建议使用预处理语句优化代码。以下是具体修改步骤:
1. 修改后端处理文件 showDevice.php
核心逻辑是判断传入的参数是否为all,如果是则查询所有设备数据,否则按指定设备名称查询:
<?php $k = $_POST['id'] ?? ''; $k = trim($k); $con = mysqli_connect("localhost", "test", "test", "woehler"); // 检查数据库连接状态 if (!$con) { die("连接失败: " . mysqli_connect_error()); } // 根据参数生成对应SQL语句 if ($k === 'all') { $sql = "SELECT art_nr, product_name, directive, products.note, standards.standard_name FROM woehler.products LEFT JOIN standards ON products.standard_id=standards.id"; $stmt = mysqli_prepare($con, $sql); mysqli_stmt_execute($stmt); } else { // 使用预处理语句避免SQL注入 $sql = "SELECT art_nr, product_name, directive, products.note, standards.standard_name FROM woehler.products LEFT JOIN standards ON products.standard_id=standards.id WHERE product_name=?"; $stmt = mysqli_prepare($con, $sql); mysqli_stmt_bind_param($stmt, "s", $k); mysqli_stmt_execute($stmt); } $result = mysqli_stmt_get_result($stmt); while($rows = mysqli_fetch_array($result)){ ?> <tr> <td><?php echo $rows['art_nr']; ?> </td> <td><?php echo $rows['directive']; ?> </td> <td><?php echo $rows['note']; ?> </td> <td><?php echo $rows['standard_name']; ?> </td> </tr> <?php } // 释放数据库资源 mysqli_stmt_close($stmt); mysqli_close($con); ?>
改动说明:
- 增加数据库连接错误检查,避免连接失败时无反馈
- 新增参数判断逻辑:当传入值为
all时,执行不带WHERE条件的查询,返回所有设备数据 - 替换直接字符串拼接SQL的写法,使用mysqli预处理语句彻底规避SQL注入风险
- 规范数据库资源释放操作,避免资源泄漏
2. 前端代码无需修改
你的HTML已经添加了<option value="all">Select All...</option>选项,JavaScript也能正确将选中值传递给后端,因此前端部分保持原样即可。
测试时选择“Select All...”选项,页面会通过AJAX请求获取所有设备的指令和标准数据并展示在表格中。
内容的提问来源于stack exchange,提问作者HussamOthman
相关产品推荐
相关产品推荐

