gpt4 book ai didi

php - 如何防止在 PHP 中使用相同的(大写/小写不敏感)用户名?

转载 作者:可可西里 更新时间:2023-10-31 22:07:25 24 4
gpt4 key购买 nike

我可以使用以下代码防止多个用户使用相同的用户名注册:

$sqlusercheck = "SELECT (SELECT COUNT(row_username) FROM table_users WHERE row_username = :username LIMIT 1) as checkusername";
$stmt = $database->prepare($sqlusercheck);
$stmt->bindValue(':username', $username);
$stmt->execute();
$row = $stmt->fetch();

if ($row->checkusername > 0) {
$this->error[] = "This username is already taken.";
$success = false;
}

所以,如果数据库中有Abc,用户就不能取Abc这个用户名,但无论如何他都可以用ABC注册>、abcabC 等,我想阻止。

作为一个可能的解决方案,我不想strtolower() 用户名。相反,我希望 Abc 用户使用他的密码登录,无论他是否写入登录输入 ABCabcabC

我为什么要这个?

我观察到用户可以在他的计算机上使用用户名 abc 进行注册。但是当他想在他的移动设备上登录时,设备会自动将首字母大写并且用户无法登录。反之亦然。

那么,为什么我不需要 strtolower()?

因为有用户也想显示成abC,所以故意这样注册的。因此他们的用户名将在他们注册时显示。

最佳答案

在这种情况下,您可以受益于 mysql 的 LOWER() 和 php 的 strtolower() 函数。 (别担心,只有当您检查可用性时。)

$sqlusercheck = "SELECT (SELECT COUNT(row_username) FROM table_users WHERE LOWER(row_username) = :username LIMIT 1) as checkusername";
$stmt = $database->prepare($sqlusercheck);
$stmt->bindValue(':username', strtolower($username);

如果您这样更改查询,它将使两个值都变为小写并比较它们是否相同。

如果是,则会出现您的错误。

如果不是,它将按照用户输入的方式添加到您的数据库中。

注意:对于您描述的登录,您应该对登录查询进行相同的更改。

关于php - 如何防止在 PHP 中使用相同的(大写/小写不敏感)用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35845063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com