You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP分文件处理:数据库数据存server.php后在index.php表格展示失败求助

问题排查与解决方案

我来帮你一步步拆解问题,你的代码里有几个关键错误直接导致了无输出的情况:

1. 会话(Session)未初始化

不管是server.php还是index.php,都没有调用session_start()——PHP默认不会自动启动会话,没有这行代码,$_SESSION变量完全无法使用,相当于你存的数据根本没地方放,取的时候自然是空的。

2. 变量名拼写错误

在server.php中,你把查询到的数据存入了$all_data数组,但最后赋值给Session的时候写成了$alldata(少了下划线):

$all_data[] = $toadd;
// ...
$_SESSION['Data'] = $alldata; // 这里应该是$all_data

这个小错误会导致Session里存的是一个未定义的变量,自然没有内容输出。

3. 数据库连接变量不匹配

你用$db = new mysqli(...)创建了数据库连接,但执行查询的时候却用了$conn->query($sql)——$conn根本没有定义,应该用$db->query($sql)来执行查询。

4. 输出逻辑错误

修改后的index.php里,你直接把$_SESSION['Data']塞到一个<td>里:

  • 如果$_SESSION['Data']是数组,直接echo会显示Array而不是实际内容;
  • 原来的逻辑是每一行数据对应一个<tr>,现在所有内容都挤在一个<tr>里,HTML结构完全错误。

5. 严重的SQL注入风险

直接把$_POST['Category']拼接到SQL语句里,会让你的数据库暴露在SQL注入攻击下,必须用预处理语句修复这个漏洞。


修正后的完整代码

1. server.php(修复会话、变量名、连接、SQL注入)

<?php
session_start(); // 必须先启动会话才能使用$_SESSION

if (isset($_POST['Category'])) {
    $gotcategory = $_POST['Category'];

    // 初始化数据库连接并检查错误
    $db = new mysqli('localhost', 'root', '', 'db');
    if ($db->connect_error) {
        die("Connection failed: " . $db->connect_error);
    }

    // 使用预处理语句防止SQL注入
    $sql = "SELECT pname, pnumber, description, area, plname, plemail, plnumber, pmname, pmemail, pmnumber, pteam, status FROM data WHERE category=?";
    $stmt = $db->prepare($sql);
    $stmt->bind_param("s", $gotcategory); // "s"表示参数为字符串类型
    $stmt->execute();
    $result = $stmt->get_result();

    $all_data = array();
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            // 只存原始数据,把HTML渲染逻辑交给index.php处理
            $all_data[] = $row;
        }
        $_SESSION['Data'] = $all_data;
    } else {
        $_SESSION['Data'] = "No data";
    }

    // 清理资源
    $stmt->close();
    $db->close();

    // 表单提交后跳回index.php展示数据
    header("Location: index.php");
    exit();
}
?>

2. index.php(修复会话、输出逻辑)

<?php
session_start(); // 启动会话才能读取$_SESSION中的数据
?>
<table class="w3-table-all w3-responsive w3-hoverable">
    <tr class="w3-grey">
        <th><b>Project Name</b></th>
        <th><b>Project Number</b></th>
        <th><b>Description</b></th>
        <th><b>Area</b></th>
        <th><b>Project Leader Name</b></th>
        <th><b>Project Leader Email</b></th>
        <th><b>Project Leader Number</b></th>
        <th><b>Project Manager Name</b></th>
        <th><b>Project Manager Email</b></th>
        <th><b>Project Manager Number</b></th>
        <th><b>Project Team</b></th>
        <th><b>Project Status</b></th>
    </tr>
    <?php
    // 检查Session中是否有数据
    if (isset($_SESSION['Data'])) {
        if (is_array($_SESSION['Data'])) {
            // 循环输出每一行数据
            foreach ($_SESSION['Data'] as $row) {
                echo "<tr>";
                // 使用htmlspecialchars防止XSS攻击
                echo "<td>" . htmlspecialchars($row["pname"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["pnumber"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["description"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["area"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["plname"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["plemail"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["plnumber"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["pmname"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["pmemail"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["pmnumber"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["pteam"]) . "</td>";
                echo "<td>" . htmlspecialchars($row["status"]) . "</td>";
                echo "</tr>";
            }
        } else {
            // 无数据时输出提示行
            echo "<tr><td colspan='12'>" . $_SESSION['Data'] . "</td></tr>";
        }
        // 用完后清除Session,避免刷新页面重复显示旧数据
        unset($_SESSION['Data']);
    } else {
        // 未查询时的提示
        echo "<tr><td colspan='12'>No data queried yet</td></tr>";
    }
    ?>
</table>

额外说明

如果是通过AJAX调用server.php(而非表单提交),那server.php不需要跳转到index.php,而是直接返回JSON数据,再用前端JS渲染表格:

// server.php替换跳转代码为:
header('Content-Type: application/json');
echo json_encode($all_data ?? "No data");
exit();

内容的提问来源于stack exchange,提问作者Slalem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:18:13