2012-08-24 57 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