如何将PHP数据库搜索结果输出到HTML表格并显示多条结果?
解决方法:输出多条匹配结果到HTML表格
你的问题核心有两个:一是当前代码仅获取了单条查询结果(fetch_assoc()默认只返回单行数据),二是未将数组数据转换为HTML表格结构。下面是修改后的完整代码,同时解决这两个问题:
<?php session_start(); // 必须启动会话才能正常使用$_SESSION变量 $servername = "test"; $username = "test"; $password = "test"; $dbname = "test"; $journal = (isset($_SESSION["journal"])) ? $_SESSION["journal"] : null; // 连接数据库,无需额外调用mysqli_select_db(connect已指定数据库) $conn = mysqli_connect($servername, $username, $password, $dbname) or die("connection failed: " . mysqli_connect_error()); if(isset($_POST["form_submit"])) { $journal = $_POST["journal"]; $stmt = $conn->prepare("SELECT * FROM straffesager WHERE journalnummer=?"); $stmt->bind_param("s", $journal); $stmt->execute(); $val = $stmt->get_result(); $row_count = $val->num_rows; if($row_count > 0) { // 初始化HTML表格 echo "<table border='1' cellpadding='8' cellspacing='0' style='border-collapse: collapse;'>"; // 用第一行数据生成表头 $first_row = $val->fetch_assoc(); echo "<tr>"; foreach($first_row as $column_name => $_) { echo "<th>" . htmlspecialchars($column_name) . "</th>"; } echo "</tr>"; // 输出第一行数据 echo "<tr>"; foreach($first_row as $value) { echo "<td>" . htmlspecialchars($value) . "</td>"; } echo "</tr>"; // 循环输出剩余所有匹配结果 while($row = $val->fetch_assoc()) { echo "<tr>"; foreach($row as $value) { echo "<td>" . htmlspecialchars($value) . "</td>"; } echo "</tr>"; } echo "</table>"; } else { echo "<br><br>Den indtastede information matcher ikke sager i databasen."; } $stmt->close(); $conn->close(); } ?>
关键改动说明:
- 添加
session_start():如果要读取$_SESSION变量,必须在脚本最开头启动会话,否则无法正常获取会话数据。 - 循环遍历所有结果:替换了原来仅获取单行的逻辑,先用第一行数据生成表头,再通过
while循环遍历剩余所有匹配行,确保所有结果都能展示。 - 安全输出处理:用
htmlspecialchars()转义所有输出内容,避免XSS攻击和HTML字符冲突(比如内容包含</>时不会破坏表格结构)。 - 优化表格样式:添加了
border-collapse: collapse让表格边框更美观,同时设置内边距提升可读性。
如果你的前端表单尚未配置,记得确保表单的method="post",且提交按钮的name="form_submit",这样才能触发PHP的查询逻辑。
内容的提问来源于stack exchange,提问作者Steadi
相关产品推荐
相关产品推荐

