我有一个PHP脚本,根据有人通过Facebook登录时生成用户名。
我这样称呼它:
$username = create_username($facebook_data['name']);
功能是:
function create_username($username)
{
global $db;
$valid = false;
$counter = 0;
$new_username = str_replace(' ', '', $username);
while (!$valid)
{
$counter++;
$is_username = $db->count_rows('users', "WHERE username='" . $new_username . "'");
if ($is_username)
{
$new_username = $username . $counter;
}
else
{
$valid = true;
}
}
$new_username = strtolower($new_username);
return $new_username;
}
问题是,如果我有一个名为“johnsmith”的用户和名为“john smith”的人注册,它会生成一个名为“john smith1”而不是“johnsmith1”的用户名。我做错了什么?
我甚至做过
var_dump($facebook_data['name'])
并以“John Smith”的形式返回,没有多余的空格或任何东西。
答案 0 :(得分:3)
您正在循环中使用$username
变量,因此如果原始用户名已存在,您将获得带空格的用户名。
下面我创建了一个$clean_username
变量,可以将其附加到username6
而不是username123456
,例如:
function create_username($username)
{
global $db;
$valid = false;
$counter = 0;
$clean_username = $new_username = str_replace(' ', '', $username);
while (!$valid)
{
$counter++;
$is_username = $db->count_rows('users', "WHERE username='" . $new_username . "'");
if ($is_username)
{
$new_username = $clean_username . $counter;
}
else
{
$valid = true;
}
}
$new_username = strtolower($new_username);
return $new_username;
}
答案 1 :(得分:2)
if ($is_username)
{
$new_username = $username . $counter;
}
正确
if ($is_username)
{
$new_username = $new_username . $counter;
}