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

PHP提交数据后跳转主页不显示新数据,需刷新才显示的问题

问题分析与解决方案

你的问题核心是提交数据后跳转至主页,新数据无法立即显示,必须刷新才可见,主要由两个关键问题导致:

1. Input.php的执行顺序错误与不合理跳转方式

你在input.php开头写了<?php include('index.php'); ?>,这会在插入新数据之前就执行index.php里的数据库查询逻辑——这时候新数据还没入库呢!同时你用alert加<a>标签的方式跳转,浏览器很可能会从缓存加载index.php,而非重新向服务器请求最新数据。

2. Index.php缺少独立数据库连接与缓存控制

index.php直接使用$conn变量但没有自己的数据库初始化代码,这会导致单独访问页面时出错(你刷新能显示可能是本地环境缓存的巧合);另外,浏览器默认会缓存静态页面内容,这也是新数据不及时显示的原因之一。


修复步骤:

第一步:修正input.php代码

删除开头无用的include('index.php');,改用PHP原生的header()跳转(确保在任何输出前调用),同时添加缓存控制,并且替换为安全的预处理语句防止SQL注入:

<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "databasename";
$name = $_POST['name'];
$price = $_POST['price'];
$category = $_POST['category'];
$description = $_POST['description'];

date_default_timezone_set('Asia/Kolkata');
$date2 = date('M-d,Y');

// 初始化数据库连接
$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 使用预处理语句防止SQL注入
$stmt = $conn->prepare("INSERT INTO cakes (name, price, category, description, date2) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sisss", $name, $price, $category, $description, $date2);

if ($stmt->execute()) {
    // 设置禁止缓存的响应头
    header("Cache-Control: no-cache, no-store, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: 0");
    // 跳转至主页
    header("Location: index.php");
    exit(); // 终止脚本,确保后续代码不执行
} else {
    echo "ERROR: " . $stmt->error;
}

$stmt->close();
$conn->close();
?>

第二步:修正index.php代码

添加独立的数据库连接代码,同时设置禁止缓存的响应头,确保每次请求都获取最新数据,另外用htmlspecialchars()防止XSS攻击:

<?php
// 独立初始化数据库连接
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "databasename";

$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 设置禁止缓存的响应头
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
?>

<table class="table table-hover" >
<tr>
<th>Name</th>
<th>Price</th>
<th>Category</th>
<th>Added At</th>
<th></th>
</tr>
<?php
$sql2 = "SELECT * FROM cakes ORDER BY date2 DESC";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
    while($row2 = $result2->fetch_assoc()) {
?>
<tr >
<td><a href='acakessub.php?id=<?php echo $row2['id'];?>'><?php echo htmlspecialchars($row2["name"]); ?></a></td>
<td><a href='acakessub.php?id=<?php echo $row2['id'];?>'><?php echo htmlspecialchars($row2["price"]); ?></a></td>
<td><a href='acakessub.php?id=<?php echo $row2['id'];?>'><?php echo htmlspecialchars($row2["category"]); ?></a></td>
<td><a href='acakessub.php?id=<?php echo $row2['id'];?>'><?php echo htmlspecialchars($row2["date2"]); ?></a></td>
</tr>
<?php
    }
} else {
    echo "<tr><td colspan='4'>0 results</td></tr>";
}
$conn->close();
?>
</table>

这样修改后,提交表单插入数据后会直接跳转到最新的主页内容,浏览器不会缓存旧页面,新数据就能立即显示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:57:57