登录页验证成功后提交按钮无法跳转至dashboard.php问题求助
问题解决方案
你遇到的跳转失效问题主要由以下几个原因导致:
- HTML代码缺少
<form>标签,提交按钮无法正确触发POST请求(如果你的实际代码里确实没加的话) - 登录成功后输出的JS代码后面仍会加载页面剩余HTML,干扰跳转逻辑,同时提示文案错误(显示注册成功,实际是登录操作)
- 未将用户信息存入Session,就算跳转到dashboard.php也可能因未验证登录状态被拦截
- 直接拼接用户输入到SQL语句里,存在严重的SQL注入风险
修复后的完整代码
PHP 部分
<?php session_start(); error_reporting(0); include("include/config.php"); if(isset($_SESSION['captcha_code']) && isset($_POST['submit'])) { if ($_SESSION['captcha_code'] == $_POST['captcha']) { // 用预处理语句防SQL注入 $stmt = mysqli_prepare($con, "SELECT * FROM users WHERE email=? and password=?"); mysqli_stmt_bind_param($stmt, "ss", $_POST['email'], md5($_POST['password'])); mysqli_stmt_execute($stmt); $ret = mysqli_stmt_get_result($stmt); $num = mysqli_fetch_array($ret); if(mysqli_num_rows($ret) > 0) { // 把用户信息存到Session里,方便后续页面验证登录状态 $_SESSION['userid'] = $num['id']; $_SESSION['email'] = $num['email']; // 输出跳转JS后立刻终止脚本,避免后续HTML干扰 echo "<script> alert('登录成功,马上跳转到控制台'); window.location.href = 'dashboard.php'; </script>"; exit(); } else { $_SESSION['errmsg'] = "邮箱或密码错误"; header("location: user-login.php"); exit(); } } else { $_SESSION['errmsg'] = "邮箱、密码或验证码错误"; header("location: user-login.php"); exit(); } } ?>
HTML 部分
<html> <!-- 必须加<form>标签包裹表单控件,否则提交按钮没用 --> <form method="post" action=""> <div class="form-group"> <span class="input-icon"> <input type="text" class="form-control" name="email" placeholder="Email" required> <i class="fa fa-user"></i> </span> </div> <div class="form-group form-actions"> <span class="input-icon"> <input type="password" class="form-control password" name="password" placeholder="Password" required> <i class="fa fa-lock"></i> </span> <a href="forgot-password.php">Forgot Password ?</a> </div> <div class="form-actions"> <div class="form-group form-actions"> <img src="captcha.php" alt="Captcha Code" id="captchaImg"> <!-- 修复拼写错误:javasript → javascript --> <a href="javascript: void(0);" onclick="refreshCaptcha();"><i class="fa fa-refresh"></i></a> <input type="text" class="form-control" name="captcha" id="captcha_code" placeholder="Enter above captcha" required> </div> </div> <div class="form-actions"> <button type="submit" class="btn btn-primary pull-right" name="submit">Login <i class="fa fa-arrow-circle-right"></i></button> </div> </form> </html>
关键修复说明
- 补上
<form>标签:没有这个标签,提交按钮点击后根本不会发送POST请求到PHP处理逻辑 - 修复JS拼写错误:原代码里的
javasript是错的,改成javascript才能正常刷新验证码 - 用预处理语句防注入:直接把用户输入拼进SQL是高危操作,必须用参数绑定
- 登录成功后存Session:dashboard.php可以通过判断
$_SESSION['userid']是否存在来验证用户是否登录 - 输出JS后立刻exit:避免后续的HTML代码输出,确保JS能正常执行跳转
- 修正提示文案:把错误的“注册成功”改成“登录成功”,符合实际操作场景
内容的提问来源于stack exchange,提问作者berrykah
相关产品推荐
相关产品推荐

