PHP网站支付成功跳转后details.php与index.php内容同时显示的问题解决咨询
问题诊断与解决方案
你遇到的问题核心原因非常清晰:details.php文件最顶部的include 'index.php';语句,它会把index.php的全部内容直接嵌入到details.php页面中,这就导致两个页面的内容叠加显示了。
具体修复步骤:
1. 修复details.php的核心问题
直接删除details.php开头的include 'index.php';语句。这个引入完全没必要,因为details.php是独立的详情页面,不需要把首页内容嵌套进来。
修正后的details.php开头代码:
<?php include 'config/db_connect.php'; include 'config/db.php'; // 移除 include 'index.php'; 这一行 if (isset($_POST['delete'])) { $id_to_delete = mysqli_real_escape_string($conn, $_POST['id_to_delete']); $sql = "DELETE FROM customers WHERE id = $id_to_delete"; if (mysqli_query($conn, $sql)) { header('Location: index.php'); } else { echo 'query error: ' . mysqli_error($conn); } } // check GET request id param if (isset($_GET['id'])) { // escape sql chars $id = mysqli_real_escape_string($conn, $_GET['id']); // make sql $sql = "SELECT * FROM customers WHERE id = $id"; // get the query result $result = mysqli_query($conn, $sql); // fetch result in array format $customer = mysqli_fetch_assoc($result); mysqli_free_result($result); //mysqli_close($conn); } ?>
2. 顺便修复success.php的两个潜在问题
你的success.php里也有两个小问题,建议一起修正:
- 同样不需要
include 'index.php';,否则success.php页面也会显示首页内容 - 重定向语句里的
$customer['id']变量未定义,会导致URL拼接错误,需要先从数据库获取该用户信息
修正后的success.php代码:
<?php // 移除 include 'index.php'; 这一行 include 'config/db_connect.php'; // 引入数据库连接 include 'config/db.php'; if(!empty($_GET['tid'] && !empty($_GET['product']))) { $GET = filter_var_array($_GET, FILTER_SANITIZE_STRING); $tid = $GET['tid']; $product = $GET['product']; // 这里需要根据交易ID或产品信息获取对应的customer_id,示例假设tid关联customer表的id $sql = "SELECT id FROM customers WHERE transaction_id = '$tid'"; $result = mysqli_query($conn, $sql); $customer = mysqli_fetch_assoc($result); } else { header('Location: payment.php'); exit; // 跳转后要终止脚本执行,避免后续代码输出 } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <title>Thank You</title> </head> <body> <div class="container mt-4"> <h2>Thank you for purchasing <?php echo $product; ?></h2> <hr> <p>Your transaction ID is <?php echo $tid; ?></p> <p>Check your email for more info</p> <?php // 确保$customer存在再跳转,避免报错 if($customer) { header('Refresh: 2; URL=details.php?id='.$customer['id']); } else { header('Refresh: 2; URL=index.php'); // 异常情况 fallback跳转首页 } ?> </div> </body> </html>
额外提示:
- 使用
header()跳转后,一定要加上exit;或die();终止脚本执行,避免后续代码继续输出内容 - 所有数据库查询都要做好SQL注入防护,你已经用了
mysqli_real_escape_string,这点做得很好
内容的提问来源于stack exchange,提问作者Xin_Naz
相关产品推荐
相关产品推荐

