2012-08-24 54 views
0

我創建了一個while循環,爲用戶生成隨機圖像。每次我加載頁面時,while循環產生一個隨機數的圖像。我希望它顯示10,但它會產生3-10圖像的任何地方。我檢查了數據庫,並且user_id對每個條目都是獨一無二的。我不知道爲什麼這樣做。代碼有什麼問題?我還會接受一個答案,指出一個方向(教程鏈接)以更好的方式重寫此代碼。循環結果不穩定

<?php 

$query = mysql_query("SELECT `user_id` FROM `users` ORDER BY RAND() LIMIT 0, 10"); 

$r = 1; 

while ($results_row = mysql_fetch_assoc($query)) 

    { 

$var_1 = $results_row['user_id']; 

    $getting_essentials = mysql_query("SELECT 

    `band_name`,`donated_money`,`donated_time` FROM `create_project` WHERE `user_id` = 

    $var_1"); 

    $getting_results = mysql_fetch_assoc($getting_essentials); 

$bandsname = $getting_results['band_name']; 

if (isset($bandsname) === true) {  

$donatedmoney = $getting_results['donated_money']; 

$donated_time = $getting_results['donated_time']; 

$var_2 = username_from_user_id($var_1); 

$image_name = 'images/' . md5($var_2) . '_' . $var_1;  

    echo '<a href="' . $var_2 . '"><img src="' . $image_name . '" class="'.$r.'" 

    width="300" height="185"/></a>'; 

} 
$r++; 
} 

?> 
+2

如果'user_id'是唯一的,那麼你就不需要'DISTINCT'。 – staticsan

+0

謝謝。儘管如此,我仍然會遇到同樣的錯誤行爲。 – jason328

+0

$ var_2的用途是什麼,我的意思是$ var_2被賦值,$ image_name不包含任何圖像擴展名,代碼會生成類似'images/jdgjkgdfkgf234/5'的東西。所以它不應該顯示圖像。 –

回答

1

我看到幾個潛在問題。

首先,什麼是var_2?它似乎沒有設置在任何地方。

其次,看起來您會得到與您的表中唯一用戶ID一樣多的圖像。這對我來說似乎是一種試圖獲得十張圖像的奇怪方式。

第三,您使用的圖像的實際文件名是使用用戶ID構建的。可能並非所有文件都存在。

一種檢查最後一點的方法是在瀏覽器中簡單地執行「查看源代碼」操作。

它可能是,你總是得到123圖像(假設你有123個不同的用戶ID),但其中一些不存在。

作爲低級別的調試練習,您可以將代碼插入到echo調試語句(以HTML格式),以便您可以看到封面下面發生了什麼。這通常是確定問題的最快捷方式。換句話說,辣椒之類的東西代碼:

$bandsname = $getting_results['band_name'];  # Existing line 
echo 'bandsname is "' . $bandsname . '".<br>'; # new line 

通過這樣做,並檢查輸出,它會讓它比試圖對代碼做靜態分析很多更加明顯。

+0

對不起,這是當我嘗試簡化這裏的代碼時會發生什麼。讓我告訴你完整的代碼。 – jason328

+0

感謝您的潛在問題,我已經修復了它,但錯誤仍顯示出來。隨着我想做的事情,隨機選擇和展示幾個圖像,我認爲這個代碼是不合適的,並將在一個新的解決方案。 – jason328

+0

您的調試解決方案非常有用。我意識到這個代碼很糟糕,我會重寫它。謝謝您的幫助。我會考慮您的解決方案作爲答案,因爲它爲答案設定了基調:「重寫比修復所有這些問題(包括這些多個資源ID錯誤)要好得多。」 – jason328