2010-06-25 84 views
2

我仍然在学习函数以及它们是如何工作的。我知道我在做什么错,而不是如何解决它。我正在写一个函数,将图像数据从数据库中提取出来并返回到屏幕上。它可以工作,但如果有多个图像,它将只返回最后一张图片。我知道问题是$project_image只返回最后一个图像,因为while循环的工作方式,但我的问题是我怎么可能不使用一个while循环或使它添加多个图像到$project_image变量。在函数中使用循环

摘编功能

function get_project_image($id,$type="thumb",$src="false",$limit=1){ 
    if($type =="main"){ 
     $project_image_qry = mysql_query(" SELECT i_name FROM `project_images` WHERE i_project_id = '$id' AND i_type= '2' LIMIT $limit ") or die(mysql_error()); 
     $project_image=""; 
      while($project_image_row = mysql_fetch_array($project_image_qry)) { 
      $project_image_result = mysql_fetch_array ($project_image_qry);  

       if($src=="true"){ 
        $project_image .= '<img src="'.admin_settings('site_url').admin_settings('image_main_dir').'/'.$project_image_result['i_name'].'" alt="project_image"/>'; 
        } 
       else{ 
        $project_image .= $project_image_result['i_name']; 
        } 
      } 
     } 
    return $project_image; 
    } 

回答

3

while状况是好的,但你似乎是取两次,$project_image_row$project_image_result,所以你会被跳过所有其他图像。刚取阵列一次(在while循环是好的),并使用$project_image_result代替$project_image_row内环路来指代阵列:

while($project_image_result = mysql_fetch_array($project_image_qry)) { 
    if($src=="true"){ 
     $project_image .= '<img src="'.admin_settings('site_url').admin_settings('image_main_dir').'/'.$project_image_result['i_name'].'" alt="project_image"/>'; 
    } 
    else{ 
     $project_image .= $project_image_result['i_name']; 
    } 
} 

而且,它似乎是在默认情况下,你告诉它仅要求一个来自数据库的图像。您有一个默认参数$limit=1,并且您使用SQL LIMIT来筛选结果,所以除非您将第四个参数传递给get_project_imagemysql_query只会返回一个结果(您没有包含对get_project_image的调用, m不知道你是否处理了这个问题

+0

非常感谢你!这很好,我相信你在上面例子中'while'循环中使用'$ project_image_result'而不是'$ project_image_row' 此外,关于您对默认限制的评论,我的函数调用看起来像'echo get_project_image($ project_row ['p_id'],“main”,“true”,2);'我将其限制为默认为1两种图像类型每种类型只有一个图像。再次感谢 – BandonRandon 2010-06-26 00:45:27

+0

@Bandon的确,接得好;它现在已经修复了 – 2010-06-26 01:46:48