我有一个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"的用户,并且有一个名叫"johnsmith1"的人注册了,它会生成一个用户名"johnsmish1"而不是"johnsmich1"。我做错了什么?
我甚至做了
var_dump($facebook_data['name'])
它被返回为"约翰·史密斯",没有额外的空格或任何东西。
您在循环中使用$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;
}
if ($is_username)
{
$new_username = $username . $counter;
}
正确的是
if ($is_username)
{
$new_username = $new_username . $counter;
}