2010-05-17 89 views
0

我为我的小应用程序生成唯一的ID,但我面临一些变量范围的问题。我的代码 -唯一的随机ID

function create_id() 
{ 
global $myusername; 
$part1 = substr($myusername, 0, -4); 
$part2 = rand (99,99999); 
$part3 = date("s"); 
return $part1.$part2.$part3; 
} 

$id; 
$count=0; 

while($count == 1) 
{ 
$id; 
$id=create_id(); 
$sqlcheck = "Select * FROM ruser WHERE userId='$id';"; 
$count =mysql_query($sqlcheck,$link)or die(mysql_error()); 
} 


echo $id; 

我不知道我有一个变量声明为global

+3

有很多与代码 – knittl 2010-05-17 17:04:36

+0

你虽然:) – Zak 2010-05-17 17:22:12

+0

好奇与实践吸气剂更好的问题,有什么错AUTO_INCREMENT? – mmattax 2010-05-17 17:41:59

回答

4

这看起来并不像一个变量范围的问题,它看起来像一个简单的变量分配问题:

$count=0; 
while($count == 1) 
{ 

该块显然不会执行。

此外,请在进行布尔检查时使用名称良好的布尔值。它读得非常干净。即:

function isUniqueUserID($userIDToCheck) 
{ 
    $sqlcheck = "Select * FROM user WHERE userId='$userIDToCheck';"; 
    $resource = mysql_query($sqlcheck)or die(mysql_error()); 
    $count = mysql_fetch_assoc($resource); 
    if(count($count) > 0) 
    {return false;} 

    return true; 
} 


$userIDVerifiedUnique = false; 
while(! $userIDVerifiedUnique) 
{ 
    $userIDToCheck = create_id(); 
    $userIDVerifiedUnique = isUniqueUserID($userIDToCheck); 
} 

注意的mysql_query将使用最后使用的连接,如果你不指定链接: http://us2.php.net/mysql_query 没有必要让全球。

+2

为什么你想以这种方式创建唯一的ID我不知道...也许因为以后你想设置一个很难猜测的cookie?最好只使用已经内置的sessionID功能......此外,您应该阅读文档中的php会话安全部分: http://us2.php.net/manual/en/session.security.php – Zak 2010-05-17 17:08:33

+0

* *致命错误:**在C:\ xampp \ htdocs \ 303 \ rand.php中超过60秒的最大执行时间 – nectar 2010-05-17 17:38:14

+0

好的,你如何找出为什么这需要超过60秒?你为什么不发布一个新问题来解释你正在做什么以及你遇到的问题。包含您的新的页面完整源代码。这也会给你一个新的问题的机会。 – Zak 2010-05-17 18:27:35

3

在ADITION到扎克的回答我会通过用户名到函数,而不是使用全局

function create_id($username) 
{ 
    $part1 = substr($username, 0, -4); 
    $part2 = rand (99,99999); 
    $part3 = date("s"); 
    return $part1.$part2.$part3; 
} 

//$id; no need for this 
$count=1; // this bit 

while($count == 1) // not sure what's going on 
{ 
//$id; again same thing no need for this 
$id=create_id($myusername); 

编辑:现在我想起来了:怎么办你期望找到"Select * FROM ruser WHERE userId='$id';"? Select查询用于查找特定内容,您的用户名非常随意,我认为实际成功获取记录的可能性是1。
EDIT2哎呦,我看到整个的一点是要获得一个唯一的用户名... O_O

2

除了其他:

$count =mysql_query($sqlcheck,$link)or die(mysql_error()); 

的mysql_query不返回记录计数,而是,一种资源。

mysql_query