【发布时间】:2013-05-04 06:54:33
【问题描述】:
当一个用户名插入我的数据库时,例如:
- 约翰_史密斯
我需要检查是否已经有 John_Smith 在场。如果是这样,将其加 1 成为 John_Smith_1
所以如果以下用户名已经存在:
- 约翰史密斯
- John_Smith_1
- John_Smith_2
- John_Smith_3
- ....直到 John_Smith_10
我需要将下一个插入的 John_Smith 增加到 John_Smith_11。
到目前为止,我已经搜索并想出了这个:
$preferredname= "John_Smith"
//check for duplicate user names
$duplicate= check_for_duplicate_username($preferredname);
//if duplicate, increment the preferredname
if ($duplicate)
{
$parts = explode("_",$preferredname);
if (isset($parts[1]))
$preferredname = $parts[0]."_".$parts[1]."_".($parts[2]+1);
else $preferredname = $parts[0]."_".$parts[1]."_1";
}
我相信这仅适用于第一个匹配的用户名。我的问题是检查数据库中编号最高的名称的版本。这是我的 sql:
function check_for_duplicate_username($name)
{
// check if username already exists
$sql = "SELECT * FROM users WHERE user_username=$name";
//then return duplicates
【问题讨论】:
-
这里有一个 XY 问题。你的 ddls 应该改变,你误用了你的数据库
-
我讨厌网站这样做。只需告诉用户该名称已被使用,然后让他们选择另一个名称。
-
快速思考 - 也许您应该将增量值与用户一起保存,以便您可以按该列排序。或者,您可以将 ID 附加到用户名(如果已使用)。或者更好的是,返回一个“错误”,说明用户名已被使用,并让他们选择另一个名称。
-
谢谢你,虽然我没有提到用户使用社交网络登录,所以用户名是根据他们的社交登录自动生成的......我想我可以使用他们的电子邮件作为用户名,但是可能不受欢迎。