2015-04-23 29 views
0

這讓我困惑了好幾個小時。以下是有問題的代碼。它在我的本地服務器上工作良好,但是當遷移到活動服務器時,我看到的問題是以int類型生成和存儲的隨機數(與本地相同)不是隨機的。所有條目都有完全相同的編號(2147483647)。生成一個不在現場服務器上工作的隨機數字

我不知道它爲什麼在本地工作,但不會在現場服務器上。這是PHP的確切版本。我已經研究了幾個小時,並找不到一件事。

我敢肯定,這是一些簡單的疏忽,想通過這裏發表,你們其中一位才華橫溢的開發人員可以指出它嗎?

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['submit'])) 
{ 
date_default_timezone_set("America/New_York"); 
$first_name = ucwords(addslashes(strip_tags($_POST['firstName']))); 
$last_name = ucwords(addslashes(strip_tags($_POST['lastName']))); 
$age = addslashes(strip_tags($_POST['age'])); 
$location = addslashes(strip_tags($_POST['state'])); 
$description = addslashes(strip_tags($_POST['desc'])); 
$date_added = date("Y-m-d"); 
$aka = ucwords(addslashes(strip_tags($_POST['aka']))); 

$offender_id = mt_rand(1, 99999999999); 

//offense pertinent 
$date_of_offense = addslashes(strip_tags($_POST['date_of_offense'])); 
$offense = addslashes(strip_tags($_POST['offense'])); 
$added_by = addslashes(strip_tags($_POST['added_by'])); 

if(empty($aka)) 
{ 
    $aka='None Known'; 
} 


if($first_name&&$last_name&&$age&&$location&&$description&&$date_of_offense&&$offense&&$added_by) 
    { 
     include('../includes/db_cred.php'); 

     $sql = "INSERT INTO offenders VALUES ('', '0', '$offender_id', '$first_name', '$last_name', '$aka', '$age', '$location', '$description', 'na', 'na', 'na', '$added_by', '$date_added')"; 
+0

注意你的'mt_rand'調用中的'max'值遠高於可能的最大值,這恰好是'2147483647'。我還假設'$ offender_id'應該是唯一的,在這種情況下,我不建議爲這些生成隨機數。 – Marty

+0

謝謝先生!這應該解決它,並感謝提示。 – jds

+0

有趣的是,本地計算機上的'mt_rand'可以接受大於2^32的範圍,但服務器不會。 –

回答

0

您正在以下PHP電話:

$offender_id = mt_rand(1, 99999999999); 

然而,mt_rand()似乎能夠接受你的服務器上的最大值爲2^32 = 2147483647,這是希望的值繼續看。

從PHP手冊:

的整數的大小是依賴於平臺的,雖然約兩十億的最大值是通常的值(這是32位帶符號的)

相關問題