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

标签 php

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

$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/

相关文章:

php - 如何设置下拉列表项的样式

php - 是否可以用 PHP 代码连接两个查询结果?

javascript - 在没有 POST 的情况下将大量数据从一个页面传递到另一个页面?

PHPEXCEL 如何在有特殊字符的情况下获取单元格值

php - MySQL 获取最受欢迎的标签 ID 组合及其计数

php - 将 RSS 提要放入 MySQL 数据库的最佳方法是什么

php - 使用 JavaScript 检索行中选定的值

php - SQLite v2.8 (PHP5) 中列的元数据

php - 如何从 Slim 3 php 框架访问所有路由?

php - 登录页面让我感到困惑,为什么这不起作用?