【问题标题】:Check if randomly generated username is unique [duplicate]检查随机生成的用户名是否唯一[重复]
【发布时间】:2013-11-23 13:23:50
【问题描述】:

我需要一个为每个新用户创建随机密码和用户名的系统。

因此,我需要确保用户名是唯一的。

但是我不知道为什么下面的代码不起作用。这不是语法问题。我只是无法从逻辑上弄清楚我哪里出错了。

无论如何,这是我尝试过的:

    $Password= randomPassword();
    $Username = randomPassword();
    $UsernameCheckQuery = mysql_query("SELECT * FROM users WHERE username = '".$Username."'");
    while (mysql_num_rows($UsernameCheckQuery ) >= 1) {
        $Username = randomPassword();
        $UsernameCheckQuery = mysql_query("SELECT * FROM users WHERE username = '".$Username."'");
      }

我知道这个主题出现在 Stack Overflow 和网络上的其他地方。但是,我看到的每个问题都在使用 if 语句来检查用户名是否已被使用。在我的例子中,我看不出if 语句是如何工作的,因为randomPassword 函数可以生成两个已经连续存在的用户名。

【问题讨论】:

  • 对于一个你可能应该使用 do while 循环的人。 php.net/manual/en/control-structures.do.while.php
  • @IgnacioVazquez-Abrams 我不这么认为。请看我关于 if 语句的问题
  • @JamesMcDonnell 好主意
  • 完全是重复的。不要检查用户名是否已经存在,检查插入行的尝试是否失败。
  • 我不认为这是一个骗局。如果 id 存在,OP 不想中止。他想继续努力直到成功。

标签: php mysql


【解决方案1】:

试试

while (true) {
    $Username = randomPassword();
    $UsernameCheckQuery = mysql_query("SELECT * FROM users WHERE username = '".$Username."'");
    if (mysql_num_rows($UsernameCheckQuery ) < 1) {
       break;
    }
}
echo 'The generated username is '.$Username;

【讨论】:

  • 完美地工作只是break;的语法错误和&lt;的逻辑错误
猜你喜欢
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 2016-04-13
  • 2018-03-12
  • 1970-01-01
相关资源
最近更新 更多