[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: циклы с пред и пост условиями
ilystone
Всем привет.

Не могу понять одну вещь:
Вывожу новости из БД циклом while, и первая новость всегда теряется. Когда вывожу циклом do.. while (по Поповски biggrin.gif ), то первая новость остается на месте.
Почему так происходит?

То же самое при выводе всех thumbs из папки:
выводится тумб со ссылкой на полную картинку (точно также, как здесь), и если вывожу while-ом, то первый тумб пропадает, и все ссылки сбиваются на одну назад, т. е. на втором тумбе(по счету он первый, ведь вайл его не вывел) висит ссылка на первую картинку.

Если вывожу do..while, то на месте первой картинки висит значок битого изображения, но все остальные идут в правильном порядке..



Спустя 2 минуты, 9 секунд (20.08.2010 - 21:52) Nord написал(а):
Цитата

Вывожу новости из БД циклом while, и первая новость всегда теряется. Когда вывожу циклом do.. while (по Поповски  ), то первая новость остается на месте.
Почему так происходит?

Код в студию!

Спустя 2 минуты, 8 секунд (20.08.2010 - 21:54) Rand написал(а):
Возможно ты mysql_fetch_* делаешь ещё и перед циклом, а не только в условии while?

Спустя 13 часов, 49 минут, 3 секунды (21.08.2010 - 11:43) Dezigo написал(а):
do.. while (не попов изобрёл - такая конструкция есть)
без кода мало что скажу.

Спустя 7 часов, 11 минут (21.08.2010 - 18:54) ilystone написал(а):
Dezigo
Конечно есть! Прост попов в своих уроках учит именно ею орудовать, но во многих случаях она не уместна.

Rand
Да , ты прав: в начале каждой страницы у меня идет

<?php  /* Вытаскиваем тайтл, описание и теги из БД */
$sql = "SELECT title, description, metakeys FROM pages WHERE id='1'";
$result = mysql_query($sql) or die(mysql_error() .'<br/>'. $sql);
$row = mysql_fetch_assoc($result);
?>


Тут вытаскиваю ключи и тайтл для таких файлов как index.php, topics.php и т.п. Ну в принципе это лишнее, т.к. таких файлов всего 6, но для порядка я сделал.
Даже если это убрать, проблема останется нерешенной, т.к. в разделе "топики" можно переключаться по категориям, а все категории в отдельной базе и потом из фронт-энда будут добавляться новые, поэтому тут ничего трогать нелья.

Nord

Вот код вывода всех тумбов из папки на странице с галереей:
 
<?php
$directory = 'images/galleries/'.$folder.'/thumbs';
$i=1;
$dir_handle = @opendir($directory) or die("There is an error with your image directory!");
do //поиск по файлам
{
if($file == '.' || $file == '..') continue; //пропустить ссылки на другие папки
$file_parts = explode('.',$file); //разделить имя файла и поместить его в массив
$ext = strtolower(array_pop($file_parts)); //последний элеменет - это расширение
$title = implode('.',$file_parts);
$alt = htmlspecialchars($title);
if ($page == $i) echo '<div class="gallery_thumb_selected"><a href="galleries.php?folder='.$folder.'&page='.$i.'"><img src="'.$directory.'/'.$file.'" alt="'.$alt.'"></div>';
else echo '<div class="gallery_thumb"><a href="galleries.php?folder='.$folder.'&page='.$i.'"><img src="'.$directory.'/'.$file.'" alt="'.$alt.'"></div>';
$i++;
}
while ($file = readdir($dir_handle));

До этого кода есть вызов mysql_fetch_assoc
?>

Спустя 30 минут, 51 секунда (21.08.2010 - 19:25) Rand написал(а):
Цитата
$row = mysql_fetch_assoc($result);

Не надо так делать. Хватит и тех, которые в while. Дело в том, что при каждом вызове mysql_fetch_assoc берется по одной строке из результата выборки из БД. Если ты один раз её использовал, то первую строчку при помощи этой функции уже не получишь! При каждом вызове mysql_fetch_assoc берется следующая строчка из выбокри. Если тебе нужно использовать данные выборки многократно, вначале перегони все полученные данные из БД в массив, а потом работай с ними, как хочешь.
Хотя в приведенном коде, я не увидел, где ты в цикле выводишь данные из БД. В приведенном тобой примере выбирается только одна строка, и вообще из другой таблицы - на выводы новости это никак не повлияет. Где код вывода новостей?

Спустя 5 секунд (21.08.2010 - 19:25) linker написал(а):
<?php 
$directory = 'images/galleries/'.$folder.'/thumbs';
$i=1;
$dir_handle = @opendir($directory) or die("There is an error with your image directory!");
while (($file = readdir($dir_handle)) !== false)
{
if($file == '.' || $file == '..') continue;
$ext = pathinfo($directory . '/' . $file, PATHINFO_EXTENSION);
$alt = htmlspecialchars($file);
if ($page == $i)
echo '<div class="gallery_thumb_selected"><a href="galleries.php?folder='.$folder.'&page='.$i.'"><img src="'.$directory.'/'.$file.'" alt="'.$alt.'"></a></div>';
else
echo '<div class="gallery_thumb"><a href="galleries.php?folder='.$folder.'&page='.$i.'"><img src="'.$directory.'/'.$file.'" alt="'.$alt.'"></a></div>';
$i++;
}

До этого кода есть вызов mysql_fetch_assoc
?>

Спустя 1 час, 21 минута, 7 секунд (21.08.2010 - 20:46) ilystone написал(а):
Всем спасибо -- во всем разобрался! Можно закрыть тему.
Что касается тумбов - причина была в другом: там был один битый тумб. Удалил его, и все встало на свои места.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.