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

