首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -检查用户名是否存在或提交的用户名是否为当前用户名

PHP -检查用户名是否存在或提交的用户名是否为当前用户名
EN

Stack Overflow用户
提问于 2018-10-17 22:20:33
回答 1查看 65关注 0票数 0

我正在尝试检查输入的用户名是否已经存在,或者输入的用户名是否为当前用户名。

我已经在谷歌上搜索了各种SO问题,但似乎没有人检查当前用户名是否为已提交的用户名。

以下代码的问题在于:用户名是否被使用并不重要,它仍然可以让您保存。

代码语言:javascript
复制
$stmt = $engine->runQuery("SELECT user_name, user_email FROM users WHERE user_name=:username OR user_email=:email");
$stmt->execute(array(':username'=>$username, ':email'=>$email));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if(strtolower($row['user_name']) == strtolower($username) || $username !== $row['user_name']) {
    $engine->authapi(false, 'Sorry, username is already taken. Please choose a different one.');
} elseif(strtolower($row['user_email']) == strtolower($email) && $email !== $_SESSION['user_email']) {
    $engine->authapi(false, 'Email is already registered. You cannot use the same emails for multiple accounts.');
} else {
    // save
}

我如何才能让它检查用户名是否被占用,同时检查提交的用户名是否为当前用户名(如果是,让用户保存)?

EN

回答 1

Stack Overflow用户

发布于 2018-10-17 23:06:47

实际上,您的代码中有几个问题。

1)您的SQL。您可以在这里获取多个行,例如,您的数据库中有两个条目:username: maio290, e-mail: a@foo.barusername: maio291, e-mail: b@foo.bar。现在,您的用户输入用户名:maio290和电子邮件:b@foo.bar,这将导致选择两个条目。很可能是边缘情况,但也是有效的。

2)你的if:你在比较strtolower($row['user_name']) == strtolower($username)$username !== $row['user_name']) -第二个与你的错误没有任何意义。因为这意味着:“嘿,您的用户不在我们的数据库中,请使用不同的数据库”,而且,使用strcasecmp进行第一次比较可能会更好。

我真的会把这两个选项分开,因为它读起来要好得多,而且两个可选择的行也不会有问题。此外,您还可以让数据库处理比较。

因此,我会这样写代码:

代码语言:javascript
复制
<?PHP
// Select if username is taken
$stmt = $engine->runQuery("SELECT user_name FROM users WHERE user_name=:username");
$stmt->execute(array(':username'=>$username));
$row = $stmt->fetch(PDO::FETCH_ASSOC);


if(count($row) != 0)
{
    $engine->authapi(false, 'Sorry, username is already taken. Please choose a different one.');
    // I would actually return here, so we wouldn't need an else
}
else
{
    // check if e-mail is registred
    $stmt = $engine->runQuery("SELECT user_email FROM users WHERE user_email=:email");
    $stmt->execute(array(':email'=>$email));
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    if(count($row) != 0)
    {
        $engine->authapi(false, 'Email is already registered. You cannot use the same emails for multiple accounts.');
    }
    else
    {
        // store
    }

}
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52857174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档