PHP点击表格值传参 执行SQL LIKE条件查询实现方案
需求说明
我在站点中通过SQL JOIN查询生成数据表格,为其中一列配置了跳转至其他页面的链接,需要实现:点击表格内对应数据时,将被点击的值作为SQL查询的LIKE条件参数,从另一张数据表中查询匹配结果。我是开发新手,若问题表述存在模糊之处敬请谅解,现有三段业务实现代码,求可行的实现建议。
现有业务代码
第一张表(搜索功能生成)
require_once "db.php"; if(isset($_GET['term'])) { $term = '%' . $_GET['term'] . '%'; $noresult = array( "MFG_Item_ID" => "", "MFG_Simple" => "No Results", ); $sql = "SELECT * FROM Main_Search WHERE SearchName LIKE ? LIMIT 10"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $term); $stmt->execute(); $result = $stmt->get_result(); while($row = $result->fetch_assoc()) { echo "<td>" . $row["MFG_Simple"] . "</td>"; echo "<td>" . $row["Parent"] . "</td>"; echo "<td>" . $row["MFG_Item_ID"] . "</td>"; echo "<td>" . $row["Description"] . "</td>"; echo "<td>" . $row["UOM"] . "</td>"; echo "<td>" . $row["Conversion"] . "</td>"; echo "<td>" . "$ " . $row["Average_Price"] . "</td>"; echo "<td>" . "$ " . $row["Best_Price"] . "</td>"; } } ?>

第二张表(展示第一张表数据的多个来源,点击合同号时需要将对应值作为下一个查询的LIKE参数)
$sql1 = "SELECT Full_Item_Master.Source, Full_Item_Master.Contract_Number, Full_Item_Master.Price_Effective, Full_Item_Master.Price_Expiration, Full_Item_Master.UOM, Full_Item_Master.Conversion, Full_Item_Master.Average_Price, Full_Item_Master.Min_Price FROM Full_Item_Master JOIN Main_Search ON Full_Item_Master.MFG_ID = Main_Search.MFG_ID AND Full_Item_Master.MFG_Item_ID = Main_Search.MFG_Item_ID AND Full_Item_Master.UOM = Main_Search.UOM WHERE Main_Search.SearchName LIKE ? LIMIT 10"; $stmt = $conn->prepare($sql1); $stmt->bind_param("s", $term); $stmt->execute(); $result = $stmt->get_result(); while($row = $result->fetch_assoc()) { echo "<td>" . $row["Source"] . "</td>"; echo "<td><a target='_blank' rel='noopener noreferrer' href='contracts.php?term=?'>" . $row["Contract_Number"] . "</td>"; echo "<td>" . $row["Price_Effective"] . "</td>"; echo "<td>" . $row["Price_Expiration"] . "</td>"; echo "<td>" . $row["UOM"] . "</td>"; echo "<td>" . $row["Conversion"] . "</td>"; echo "<td>" . "$ " . $row["Average_Price"] . "</td>"; echo "<td>" . "$ " . $row["Min_Price"] . "</td>"; ?> <td><button type="button" class="btn btn-primary">View</button></td> </tr><?php } $conn->close();

第三张表(跳转目标页现有代码)
$term = '%' . $_GET['term'] . '%'; $sql = "SELECT * FROM Full_Item_Master WHERE Contract_Number LIKE (需要传入点击的链接对应值) LIMIT 100"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $term); $stmt->execute(); $result = $stmt->get_result(); while($row = $result->fetch_assoc()) { echo "<td>" . $row["MFG_Simple"] . "</td>"; echo "<td>" . $row["Parent"] . "</td>"; echo "<td>" . $row["MFG_Item_ID"] . "</td>"; echo "<td>" . $row["Description"] . "</td>"; echo "<td>" . $row["UOM"] . "</td>"; echo "<td>" . $row["Conversion"] . "</td>"; echo "<td>" . "$ " . $row["Average_Price"] . "</td>"; echo "<td>" . "$ " . $row["Min_Price"] . "</td>"; }
实现步骤
- 修复第二张表的链接传参逻辑:当前a标签的
href里term=?是硬编码的占位符,没有传入实际的合同号值,同时a标签缺少闭合标签,会导致页面结构错乱。将输出合同号单元格的代码替换为以下内容即可完成参数传递:
echo "<td><a target='_blank' rel='noopener noreferrer' href='contracts.php?term=" . urlencode($row["Contract_Number"]) . "'>" . htmlspecialchars($row["Contract_Number"]) . "</a></td>";
用urlencode()处理参数是为了避免合同号里包含特殊字符(比如空格、&、/)时出现传参丢失或错误,htmlspecialchars()是为了转义输出到HTML的特殊字符,避免页面渲染异常。
- 完善第三张表的查询逻辑:现有代码已经具备接收GET参数拼接LIKE条件的基础能力,只需要补充参数校验、缺失标签和空结果提示即可,参考修改后代码:
require_once "db.php"; // 校验参数是否存在 if (!isset($_GET['term']) || !trim($_GET['term'])) { echo "<tr><td colspan='8'>请传入有效的合同号参数</td></tr>"; exit; } // 拼接LIKE查询通配符 $term = '%' . trim($_GET['term']) . '%'; $sql = "SELECT * FROM Full_Item_Master WHERE Contract_Number LIKE ? LIMIT 100"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $term); $stmt->execute(); $result = $stmt->get_result(); // 处理无结果场景 if ($result->num_rows === 0) { echo "<tr><td colspan='8'>未查询到匹配的合同数据</td></tr>"; } while($row = $result->fetch_assoc()) { // 补全缺失的行标签,避免表格样式错位 echo "<tr>"; echo "<td>" . htmlspecialchars($row["MFG_Simple"]) . "</td>"; echo "<td>" . htmlspecialchars($row["Parent"]) . "</td>"; echo "<td>" . htmlspecialchars($row["MFG_Item_ID"]) . "</td>"; echo "<td>" . htmlspecialchars($row["Description"]) . "</td>"; echo "<td>" . htmlspecialchars($row["UOM"]) . "</td>"; echo "<td>" . htmlspecialchars($row["Conversion"]) . "</td>"; echo "<td>" . "$ " . htmlspecialchars($row["Average_Price"]) . "</td>"; echo "<td>" . "$ " . htmlspecialchars($row["Min_Price"]) . "</td>"; echo "</tr>"; } $conn->close();
- 通用代码修复点:前两段表格输出代码都缺少每行开头的
<tr>标签,循环输出单元格时记得在每行内容前后补全<tr>和</tr>,否则浏览器渲染表格时会出现样式错位、内容排版混乱的问题。
内容的提问来源于stack exchange,提问作者ac4570
相关产品推荐
相关产品推荐

