2010-05-17 135 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