Использование цикла внутри функции - PullRequest
2 голосов
/ 25 июня 2010

Я все еще изучаю функции и как они работают. Я знаю, что я делаю не так, просто не как это исправить. Я пишу функцию, чтобы извлечь данные изображения из базы данных и вернуть их на экран. Это работает, но если есть более одного изображения, он вернет только последнее изображение. Я знаю, что проблема в том, что $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;
    }

1 Ответ

3 голосов
/ 25 июня 2010

Ваше 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_image, mysql_query будет возвращать только один результат (вы не включили звонок на get_project_image, поэтому я не уверен, справились ли вы с этим или нет

...