0

我有点坚持我的代码。

我正在练习并希望达到以下目标。

在用户注册之前,我想检查用户用户名是否存在,如果存在则将名称加一。

所以我的逻辑是这样的。用户给出他/她的名字和姓氏,基于此生成用户名。

功能

function unique_name($first_name, $last_name) {

$username = strtolower($first_name.'.'.$last_name)

$check = mysqL_query(" SELECT username WHERE username = '".$username."' ");

    if(count($check == 1)) {
        $i = 2;
        foreach($check as $user) {
            return $user['username'].$i;
            $i++;
        }
    } else {
        return $username;
    }
}

$username = unique_name($_POST['first_name'], $_POST['last_name']);
// saveing the increased username

所以实际上脚本应该检查生成的唯一用户名是否存在如果exsits增加,并且即使它存在一个数字也会增加它

例子

汤姆安德森注册,用户名将是 tom.anderson,保存为汤姆安德森

第二个汤姆安德森注册,用户名将是tom.anderson,它已经存在,将新的保存为tom.anderson2。

第三个用户注册他也是tom anderson,用户名tom.anderson*存在两次,增加到tom.anderson3。

所以我检查用户是否存在并保存它没有问题,我的问题是,如果存在,如何增加每个用户名?

我不是要任何人为我写这个我只是在寻找一个提示

谢谢

编辑

感谢您的回复,但这不起作用

if(count($check) == 1) {
    $i = 2;
    foreach($check as $user) {
        return $user['username'].count($check);
        $i++;
    }
} else {
    return $username;
}

这只检查没有数字的用户名,所以如果用户名 tom.anderson 存在,它会增加到 tom.anderson1 但如果 tom.anderson1 也存在,它不会增加到 tom.anderson2

4

3 回答 3

3

count除非它是 0,否则你能有一些只附加返回的行的东西吗?

if(count($check) > 0) {
   return $user['username'].count($check);
} else {
    return $username;
}

更改 SQL:

" SELECT username WHERE username LIKE '".$username."%' " 
于 2013-02-19T14:14:24.117 回答
0

试着像这样给予

if(count($check) == 1) {
    $i = 2;
    foreach($check as $user) {
        return $user['username'].count($check);
        $i++;
    }
} else {
    return $username;
}
于 2013-02-19T14:12:00.977 回答
0

您可以将新字段添加到用户表中,并将其命名为 base_username。他们用给定的用户名获取计数行,并增加每个用户名的计数发现像这样的东西

`功能唯一名称($first_name,$last_name){
    $unique_name = $username = strtolower($first_name.'.'.$last_name)
    $cnt = get_row(" SELECT COUNT(*) from `users` WHERE base_username = '".$username."' LIMIT 1 ");
    如果($cnt){
        $unique_name = $用户名。$cnt + 1;
    }
    返回 $unique_name;
}`
于 2013-02-19T14:31:08.787 回答