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

PHP实现登录密码错误提示信息输出到首页的技术咨询

实现方案

第一步:修改登录校验逻辑,将错误信息存入Session后跳转首页

跨页面传递临时提示信息用Session是最稳妥的方案,你需要把原有代码中直接echo错误提示的逻辑,替换为存错误到Session、再跳转到首页的逻辑:

<?php
session_start();
require_once ($_SERVER['DOCUMENT_ROOT']. '/engine/data/main_config.php');
require_once ($_SERVER['DOCUMENT_ROOT']. '/engine/core/mysql_connect.php');
if($_POST['response']) {
  $captcha = $_POST['response'];
  $secret = "6LfZjeIbAAAAALhKqTKfXlB14lAbj";
  $json = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=". $secret . "&response=" . $captcha), true);
  if(!$json['success']) {
    $_SESSION['login_error'] = '校验失败,请重新完成人机验证';
    header('Location: /index.php'); // 替换为你实际的首页地址
    exit();
}
}  else {
   $_SESSION['login_error'] = '请完成人机验证后再提交登录';
   header('Location: /index.php');
   exit();
}
// 此处后续需要改成预处理查询,避免SQL注入,参考下方安全提醒
$result = $mysqli->query("SELECT * FROM dle_users WHERE name LIKE '".$_POST['login']."'");
   if ($result->num_rows > 0) {
$password_mysql = $mysqli->query("select password from dle_users where name='".$_POST['login']."'")->fetch_object()->password;
$realname = $mysqli->query("select name from dle_users where name='".$_POST['login']."'")->fetch_object()->name;
if (!password_verify(urldecode($_POST['password']), $password_mysql)) {
    $_SESSION['login_error'] = '你输入的密码错误,请重试或找回密码';
    header('Location: /index.php');
    exit();
} else {
    $_SESSION['login'] = $realname;
    $_SESSION['password'] = $_POST['password'];
    // 登录成功后的跳转逻辑自行保留
}
   } else {
    $_SESSION['login_error'] = '当前账号不存在';
    header('Location: /index.php');
    exit();
}
include('algo.php');

?>

第二步:首页添加错误信息展示逻辑

在首页代码最顶部确认已经开启session_start(),之后在你想要显示错误提示的位置加入以下代码:

<?php if (isset($_SESSION['login_error'])): ?>
<center>
    <div class="form-block-error">
        <b><?php echo $_SESSION['login_error']; ?></b>
    </div>
</center>
<script>grecaptcha.reset();</script>
<?php 
// 展示后立即删除Session中的错误,避免刷新页面重复显示
unset($_SESSION['login_error']);
endif; ?>

重要安全提醒

你现有代码存在严重的SQL注入漏洞,直接把用户提交的$_POST['login']拼接进SQL语句,会被攻击者拖库甚至拿到服务器权限,必须改成预处理语句查询,示例:

// 错误写法,禁止使用
// $result = $mysqli->query("SELECT * FROM dle_users WHERE name LIKE '".$_POST['login']."'");
// 正确预处理写法
$stmt = $mysqli->prepare("SELECT password, name FROM dle_users WHERE name = ?");
$stmt->bind_param("s", $_POST['login']);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
    $user = $result->fetch_object();
    $password_mysql = $user->password;
    $realname = $user->name;
    // 后续密码校验逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 20:45:01