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

PHP登录表单跳转功能失效问题求助

解决登录表单跳转失效的问题

看起来你的登录跳转功能失效主要有几个关键问题,我帮你逐一排查并修复:

问题1:跳转后未终止脚本执行

当$rows == 1触发跳转时,你只发送了header('Location: home.php'),但脚本会继续执行后续的echo "hello";和数据库关闭代码。HTTP协议要求响应头必须在所有输出之前发送,后续的输出会破坏头信息,导致浏览器无法正确执行跳转。

问题2:错误处理函数混用

你使用了mysqli扩展执行查询,却调用了mysql_error()(这是旧版mysql扩展的函数),应该替换为mysqli_error($conn)才能正确获取mysqli操作的错误信息。

问题3:严重的SQL注入风险

直接将用户输入的$username和$password拼接到SQL语句中,这会让你的代码面临SQL注入攻击,恶意用户可以通过构造特殊输入直接操控数据库。


修正后的代码

// 先处理SQL注入问题,使用预处理语句
$sql = "SELECT * from login where username = ? and password = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "ss", $username, $password);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$rows = mysqli_num_rows($result);

if ($rows == 1 ) {
    // 跳转后立即终止脚本
    header('Location: home.php');
    exit; // 或者使用 die();
} else {
    echo "登录失败,请检查用户名和密码";
}

// 关闭预处理语句和连接
mysqli_stmt_close($stmt);
mysqli_close($conn);

关键修改说明

  • 改用预处理语句绑定参数,彻底避免SQL注入风险
  • 在header跳转后添加exit;,确保脚本立即终止,不再输出任何内容
  • 替换错误处理函数为mysqli对应的方法(如果需要捕获错误,可以在mysqli_stmt_execute后添加判断)
  • 优化了提示信息,让用户更清楚失败原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:20:34