2013-07-30 2 views
0

두 개의 난수를 생성해야하며 다음과 같은 코드가 있어야 이전에 생성 된 적이 있습니다. $ ticket_number1 및 $ ticket_number2는 각각 'ticket1'및 'ticket2'필드의 데이터베이스 테이블 'ticket'에 저장됩니다. 뭔가 잘못되었지만, 생성 된 숫자가 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

나는 임의의 숫자가 1에서 6 사이 인 약 7 번 코드를 시도했는데 주어진 두 숫자는 항상 다르지만 이미 주어진 숫자를 반복했다. (예를 들어 첫 번째 시도에서는 숫자 3과 5를 네 번째 시도에서 그것은 숫자 3과 6을 주었다). 따라서 $ ticket_number1이 $ ticket_number2와 같지 않은 것 같습니다. 그러나이 두 변수가 이미 주어진 수치와 같지 않도록 제한하지 않습니다. – Alex

+0

이렇게하려면 티켓 번호가 생성 될 때 데이터베이스에 티켓 번호를 저장해야합니다. PHP는 데이터베이스 나 세션에 유지하지 않으면 마지막 세션에서 와트 티켓 번호가 나왔음을 알 수 없습니다. 그러한 작은 데이터 세트를 더하면 더 빨리 숫자가 다 떨어질 것입니다. –

관련 문제