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
相关产品推荐
相关产品推荐

