我目前有这个代码,我写了:
$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个相同的用户。我的数据库如下所示:
http://puu.sh/1mTcZ/9b2ff3b68f44b4cc486beacc2d2b88fd
我似乎无法让这个工作。数据库结构如下所示: 精炼(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_general_ci
答案 0 :(得分:2)
好的,我会发表评论作为答案。
您的IF语句正在评估不正确的变量。它应该是评估$ countUsername,而不是$ checkUsername。
此外,您似乎错误地初始化了错误数组。尝试:
if ($countUsername != 0)
{
$errors[] = 'Username is already taken';
}
我已经在我的数据库上对此进行了测试,但它确实有效。
Collation = latin1_general_cs (cs = case sensitive)
答案 1 :(得分:0)
尝试将表格排序设置为'utf8_general_ci'。 您也可以将sql查询更改为
$checkUsername = $odb->prepare("SELECT COUNT(*) FROM `users` WHERE LOWER(`username`) = :username");