2013-07-30 61 views
0

我有下面的代碼應該會生成兩個隨機數,如果它們以前已經生成過,就不會重複它們。 $ ticket_number1和$ ticket_number2分別保存到'ticket1'和'ticket2'字段中的數據庫表'票證'中。 雖然有些事情是錯誤的,但我測試了生成的數字介於1和6之間的腳本,並且我得到了一個結果,其中$ ticket_number1和$ ticket_number2是相同的數字(本例中爲4),並且不應該發生。之後,我再次測試,我得到了兩個不同的數字(1和4),但他們之前已經發出,所以他們不應該再次出現。 這意味着整個腳本除了生成隨機數之外沒有其他任何操作。 我已經被告知mysql_已被棄用,但這不是腳本不能正常工作的原因,對吧? 關於這應該如何正常工作的任何想法? 感謝您的幫助提前。PHP生成兩個隨機數而不重複彼此以前的數字

function getTicket(){ 
    $count=1; 
    while($count){ 
     $ticket_number = mt_rand(01990, 32000); 
     $query = "SELECT ticket1 FROM `tickets` 
     WHERE `ticket1` == '$ticket_number' or `ticket2` == '$ticket_number'"; 
     $count = mysql_num_rows(mysql_query($query)); 
    } 
    return $ticket_number; 
} 



$ticket_number1 = getTicket(); 
$ticket_number2 = getTicket(); 
+2

爲什麼不能你只需要使用一個[自動遞增鍵(https://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html)?爲什麼他們必須是隨機數字? – Gordon

+0

您是否將這些結果保存到數據庫?你的意思是這些數字在一次會話中或隨後的調用中是相同的 –

+0

由於當你得到一個有效的隨機數字時你沒有更新數據庫,所以SQL查詢是相當無意義的 –

回答

0

我只是在黑暗中拍攝在這裏,但如果數字是在同一個叫即$ ticket_number1和$ ticket_number2在一個調用的頁面是一樣的,你可以告訴函數拒絕解決這個問題已經選擇了數

function getTicket($exclude=-1){ 
    $count=1; 
    while($count){ 
    $ticket_number = mt_rand(01990, 32000); 
    $query = "SELECT ticket1 FROM `tickets` 
    WHERE `ticket1` == '$ticket_number' or `ticket2` == '$ticket_number'"; 
    $count = mysql_num_rows(mysql_query($query)); 
    if(!$count) 
     $count=$ticket_number==$exclude; 

    } 
    return $ticket_number; 
} 

$ticket_number1 = getTicket(); 
$ticket_number2 = getTicket($ticket_number1); 
+0

我試了你的代碼大約7次,隨機數在1和6之間,給出的兩個數字總是不同的,但它重複了已經給出的數字(例如,在第一次嘗試中給出了數字3和5以及在第四次嘗試中給出了數字3和6)。 因此,它似乎工作,使$ ticket_number1不等於$ ticket_number2。但它不會限制這兩個變量與已經發出的數字相等。 – Alex

+0

要做到這一點,您需要將票號存儲在數據庫中。除非您將它們存入數據庫或會話中,否則php無法知道上次會話中的wat票號碼是否出現。加上這樣一個小數據集,你很快就會用盡數字 –