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

如何实现登录表单支持邮箱或昵称登录

实现支持昵称/邮箱双登录的PHP代码修改方案

以下是修改后的完整代码,直接替换原有代码即可实现双登录功能:

session_start();
require_once "base.php";

if (!empty($_POST["pseudo"]) && !empty($_POST["password"])) {
    // 变量名改为更通用的login_identifier,适配昵称/邮箱两种输入
    $login_identifier = trim($_POST["pseudo"]);
    $password = trim($_POST["password"]);
    
    // 修改SQL语句,同时匹配昵称(pseudo)或邮箱(email)
    $sql = "SELECT pseudo, email, id, confirme, password, confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ?";
    // 传入两次登录标识符,对应两个SQL占位符
    $datas = [$login_identifier, $login_identifier];
    
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch (Exception $e) {
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }

    // 单次fetch获取用户数据即可
    $data = $requete->fetch();
    $row = $requete->rowCount();

    // 检查用户是否存在
    if ($row == 0) {
        header("Location: connexion-site.php?login_err=divers2");
        die();
    }

    // 检查用户是否已完成验证
    if ($data["confirme"] != 1) {
        header("Location: connexion-site.php?login_err=divers");
        die();
    }

    // 验证密码正确性
    if (password_verify($password, $data["password"])) {
        // 将用户信息存入Session,避免后续页面出现Session为空问题
        $_SESSION["pseudo"] = $data["pseudo"];
        $_SESSION["user_id"] = $data["id"];
        
        if (empty($_SESSION["link"])) {
            header("Location: index.php?pseudo=" . $data["pseudo"]);
        } else {
            header("location: " . $_SESSION["link"]);
        }
        die();
    } else {
        header("Location: connexion-site.php?login_err=password");
        die();
    }
}
?>

关键修改说明:

  • SQL查询逻辑调整:将原SQL的单条件匹配,改为pseudo = ? OR email = ?,让系统同时查找昵称和邮箱的匹配项。
  • 参数传递适配:因为SQL包含两个占位符,所以$datas数组需要传入两次用户输入的内容,覆盖昵称和邮箱两种匹配场景。
  • 变量名优化:把$pseudo改为$login_identifier,更贴合它现在既可以是昵称也可以是邮箱的定位。
  • 冗余代码清理:删除了无用的$userexit = $requete->fetch();语句,简化重复的fetch操作;同时梳理条件判断顺序,让流程更直观。
  • Session补充:原代码登录成功后未将用户信息存入Session,这里补上了必要的Session赋值,避免后续页面出现权限或数据为空问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:35:25