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

