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

表单提交数据跨页面无法访问,点击首页按钮触发错误求助

问题分析与解决方案

问题根源

  1. 首页依赖POST数据,二次访问无数据:首次进入首页是通过登录页include加载的,此时POST提交的用户名密码仍存在;但再次点击首页按钮是发起GET请求,没有POST参数,$_POST['username']和$_POST['password']未定义,直接调用会触发错误。
  2. 登录逻辑缺失状态存储:登录页仅验证用户后直接加载首页,未将用户登录状态存入Session,导致页面无法识别已登录用户。
  3. 严重SQL注入风险:代码直接将用户输入拼接进SQL语句,恶意用户可通过输入特殊字符篡改SQL,窃取或破坏数据库数据。

修复步骤

1. 修复登录页面代码

将用户信息存入Session,验证成功后跳转至首页,避免直接include:

<?php
session_start();
require 'dbconnect.php';

// 先检查POST数据是否存在
if (!isset($_POST['username'], $_POST['password'])) {
    header("Location: index.php");
    exit;
}

$uname = $_POST['username'];
$pword = $_POST['password'];

// 使用预处理语句防止SQL注入
$query = "SELECT * FROM tbl_users WHERE username = ? AND password = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("ss", $uname, $pword);
$stmt->execute();
$result = $stmt->get_result();
$numrows = $result->num_rows;

if ($numrows == 1) {
    // 将用户信息存入Session
    $_SESSION['user'] = $result->fetch_assoc();
    // 跳转至首页,避免重复提交表单
    header("Location: homepage.php");
    exit;
} else {
    echo "<script>alert('用户不存在,请注册');document.location='index.php'</script>";
}
?>

2. 修复首页代码

从Session获取用户状态,移除不必要的数据库查询,同时增加登录校验:

<?php
session_start();
require 'dbconnect.php';

// 校验用户是否已登录,未登录则跳转至登录页
if (!isset($_SESSION['user'])) {
    header("Location: index.php");
    exit;
}

// 已登录,直接渲染页面
echo "<ul>";
echo "<li><a href='logout.php'><b>Log out</b></a></li>";
echo "<li><a href='SlrSystem.html'><b>Solar System</b></a></li>";
echo "<li><a href='about-us.php'><b>About Us</b></a></li>";
echo "<li><a href='homepage.php'><b>Home</b></a></li>";
echo "</ul>";
echo "<div class='home'>";
echo "<h1 class='right'><b>EXPLORE<br></b></h1>";
echo "<h1 class='left'><b>THE GALAXY FROM<br></b></h1>";
echo "<h1 class='right'><b>YOUR COUCH</b></h1>";
echo "</div>";
?>

3. 增加登出页面(logout.php)

清空Session,完成登出:

<?php
session_start();
session_unset();
session_destroy();
header("Location: index.php");
exit;
?>

额外注意事项

  • 永远不要直接将用户输入拼接进SQL语句,必须使用预处理语句防止SQL注入。
  • 密码不应明文存储在数据库中,应使用password_hash()加密,验证时用password_verify()校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:05:59