Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查用户名是否已存在_Php - Fatal编程技术网

Php 检查用户名是否已存在

Php 检查用户名是否已存在,php,Php,我目前编写了以下代码: $username = $_POST['username']; $password = $_POST['password']; $rpassword = $_POST['rpassword']; $usrip = $_SERVER['REMOTE_ADDR']; $email = $_POST['email']; $errors = array(); $checkUsername = $odb -> prepare("SELECT COUNT(*) FROM `us

我目前编写了以下代码:

$username = $_POST['username'];
$password = $_POST['password'];
$rpassword = $_POST['rpassword'];
$usrip = $_SERVER['REMOTE_ADDR'];
$email = $_POST['email'];
$errors = array();
$checkUsername = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username");
$checkUsername -> execute(array(':username' => $username));
$countUsername = $checkUsername -> fetchColumn(0);
if ($checkUsername != 0)
{
$errors['Username is already taken'];
}
然而,它似乎完全忽略了这一点,即使用户名是相同的(大写等),它仍然允许用户注册2个相同的用户。我的数据库如下所示:

我好像根本没法让它工作。数据库结构如下所示: 优化(dbname)>用户(表)>用户名(行)

非常感谢您的帮助

编辑:

经过一些改变,这就是我所拥有的,但是我似乎仍然有同样的问题

$checkUsername = $odb->prepare("SELECT COUNT(*) FROM `users` WHERE LOWER(`username`) = :username");
$checkUsername -> execute(array(':username' => $username));
$countUsername = $checkUsername -> fetchColumn(0);
if ($checkUsername != 0)
{
$errors['Username is already taken'];
}

用户名行现在也是utf8\u general\u ci

尝试将表排序规则设置为“utf8\u general\u ci”。 您还可以将sql查询更改为

$checkUsername = $odb->prepare("SELECT COUNT(*) FROM `users` WHERE LOWER(`username`) = :username");

好的,我会把我的评论作为回答

IF语句计算的变量不正确。它应该评估$countUsername,而不是$checkUsername

此外,您似乎未正确初始化错误数组。尝试:

if ($countUsername != 0)
{
    $errors[] = 'Username is already taken';
}
我已经在我的数据库上测试过了,它可以正常工作

Collation = latin1_general_cs    (cs = case sensitive)

IF语句的计算结果为($checkUsername!=0)。这不应该是($countUsername!=0)吗?如果用户名有大写字母,这会导致它认为它尚未注册的问题吗?我们当前的数据库在用户名中有混合的CAP/nocaps。函数LOWER将在检查POST值之前,将该字段中的所有数据设置为小写,您也可以将其转换为小写。示例:表包含3个带值的字段-Login、Login、,登录当你将它们转换为lowarcase时,它将是相同的“登录”,我似乎仍然有问题,我目前有。我甚至尝试使用countUsername来代替它,但它似乎仍然注册良好。请尝试以下操作:如果((int)$countUsername>0){$errors['Username已被使用];}