使用PHP函数创建没有空格的用户名..但不知何故空间正在添加?

时间:2014-11-06 20:31:20

标签: php

我有一个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”的形式返回,没有多余的空格或任何东西。

2 个答案:

答案 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;
}