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

PHP-Mysql按用户手机号文件夹跳转失效问题求助

问题排查与解决方案

我来帮你一步步定位并修复这个跳转异常的问题:

1. 核心错误:MySQL API 混用导致数据获取失败

你代码里的致命问题是混用了mysql_和mysqli_扩展函数:

  • 前面用mysqli_query($db, $query)执行查询(属于mysqli扩展)
  • 后面却用mysql_fetch_assoc($results)获取结果(属于旧的mysql扩展)

这两个扩展完全独立,无法交叉使用,导致$row变量根本取不到用户数据,$folder自然为空,最终跳转路径就变成了/index.php。

修正方法:统一使用mysqli扩展函数

把mysql_fetch_assoc替换成mysqli_fetch_assoc,同时优化路径拼接并添加脚本退出逻辑:

if (count($errors) == 0) { 
    $password = md5($password); 
    $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; 
    $results = mysqli_query($db, $query); 
    if (mysqli_num_rows($results) == 1) { 
        // 替换为mysqli扩展的获取方法
        $row = mysqli_fetch_assoc($results); 
        $folder = $row['phone']; 
        $_SESSION['username'] = $username; 
        $_SESSION['success'] = "You are now logged in"; 
        // 用花括号包裹变量,让路径拼接更清晰
        header("location: {$folder}/index.php"); 
        // 跳转后必须退出脚本,避免后续代码干扰
        exit();
    }
}

2. 额外检查点

除了核心错误,还有几个地方需要确认:

  • 数据库字段正确性:确保users表中确实存在phone字段,且用户注册时手机号已经正确存入该字段
  • 服务器文件夹存在性:确认服务器上确实存在以用户手机号命名的文件夹,且Web服务器拥有该文件夹的访问权限
  • 跳转前无输出:header()函数执行前不能有任何输出(包括空格、HTML标签、echo内容等),否则跳转会失效
  • SQL注入风险:当前代码直接将用户输入拼接到SQL语句中,存在严重的安全漏洞,建议改用mysqli预处理语句:
// 预处理语句示例(更安全)
$password = md5($password);
$stmt = mysqli_prepare($db, "SELECT * FROM users WHERE username=? AND password=?");
mysqli_stmt_bind_param($stmt, "ss", $username, $password);
mysqli_stmt_execute($stmt);
$results = mysqli_stmt_get_result($stmt);
if (mysqli_num_rows($results) == 1) {
    $row = mysqli_fetch_assoc($results);
    // 后续跳转逻辑...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:09