我有这个创建随机字符串的函数:
function genID($length) {
$chars = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@!";
//only allowed chars in the blowfish salt.
$size = strlen($chars); $str = "";
for ($i = 0; $i < $length; $i++)
$str .= $chars[rand(0, $size - 1)]; // strings can be used as char arrays
// Yes, I am aware this salt isn't generated using the OS source.
// use mycrypt_create_iv or /dev/urandom/
return $str;
}
这个输出类似于:
@iBUQvldLq
现在我有这样的用户列表:
userid | username | usermail ...
--------------------------------------
@iBUQvldLq test test@gmaik.com ....
现在,当有人注册时,我创建新字符串并将新字符串插入userid
数据库中的行,然后创建一个新字符串,然后检查创建的新字符串是否不存在,如下所示:
function newID()
{
$newid = genID(10);
$query = "SELECT * FROM users WHERE userid = '".$newid."'";
$result1 = mysql_query($query);
$num = mysql_num_rows($result1);
if($num == 1)
{
$newid = genID(10);
return $newid;
}
else
{
return $newid;
}
}
有人知道如何循环检查功能吗?
我的意思是生成函数创建新的随机字符串,然后该函数检查它是否已经存在,然后创建新的,如果不返回创建的。
所以现在如果他创建新的,并且新的也匹配相同的另一个userid
,那么我如何循环直到新的字符串永远不会与其他userid
字符串匹配?
类似循环的东西:
创建新字符串
验证是否存在
如果存在创建新的
如果新的也存在,则创建新的,依此类推
直到它永远不匹配其他userid
,做一个循环,有什么想法吗?
编辑:
如果需要,新的 for 循环函数:
函数 newID(){
$continue = true;
while ($continue) {
$newid = genID(10);
$query = mysql_query("SELECT * FROM users WHERE userid='".$newid."' LIMIT 1");
if (mysql_num_rows($query) != 1)
$continue = false;
return $newid;
}
}
$newid = newID();