Результаты запроса вставить в таблицу

Vadimka

Новичок
Результаты запроса вставить в таблицу

есть запрос: выбрать фотки для альбома...
$q=mysql_query("select i,sign FROM photo_album_fot where idalbum='$idalbum' order by 10 desc");
$c=mysql_num_rows($q);

имеющиеся фотографии необходимо вставить в таблицу по 4 фотки в ряд, чтото типа
<table><tr>
<td><img src=1 fot></td>
<td><img src=2 fot></td>
<td><img src=3 fot></td>
<td><img src=4 fot></td>
</tr></table>
 

IL78

Guest
Я бы делал примерно так:

PHP:
<table><tr>
<?php
$cell = 1;
while ($f = mysql_fetch_assoc($q)) {
   echo '<td><img src="'.$f["i"].'"></td>';
   $cell++;
   if ($cell>4) {
        $cell = 1;
        echo "</tr><tr>";
   }
}
?>
</tr></table>
 

Serguitar

Новичок->продвинутый
Автор оригинала: IL78
Я бы делал примерно так:

PHP:
<table><tr>
<?php
$cell = 1;
while ($f = mysql_fetch_assoc($q)) {
   echo '<td><img src="'.$f["i"].'"></td>';
   $cell++;
   if ($cell>4) {
        $cell = 1;
        echo "</tr><tr>";
   }
}
?>
</tr></table>
А по-моему условие проверки значения переменной $cell должно проходить внутри цикла...
 

Crazy

Developer
Автор оригинала: Serguitar
А по-моему условие проверки значения переменной $cell должно проходить внутри цикла...
Обана. А сейчас оно где происходит?

-~{}~ 20.06.04 03:05:

Автор оригинала: IL78
Я бы делал примерно так:
А вот я бы воздержался. Твой код глючит, если число строк в выборке не кратно четырем. Хотя... Если кратно -- тоже глючит. Посмотри внимательно на формируемый HTML-код.
 

IL78

Guest
Crazy , критику принимаю. Если не кратно, получаются недостающие ячейки (которые браузер не отрисовывает и при border=0 в таблице этого не видно), а если кратно - получаются пустые tr-ки (которые опять же не отображаются).
Вот исправленный вариант:
PHP:
<table>
<?php
$cell=1;
while ($f = mysql_fetch_assoc($q)) {
   if ($cell==1) echo "<tr>";
   echo '<td><img src="'.$f["i"].'"></td>';
   $cell++;
   if ($cell>4) {
        echo "</tr>";
        $cell = 1;
  }
} 
if ($cell<4) {
   for ($i=$cell;$i<4;$i++) echo "<td>&nbsp;</td>";
   echo "</tr>";
}
?></table>
 

Crazy

Developer
Тоже неверно. Простой контрольный вопрос: как будет себя вести, если запрос вернет 0 строк?
 

IL78

Guest
И тут согласен, нужно еще весь этот блок заключить в if(mysql_num_rows($q)>0) {...}.
Попытаюсь прикрыться стандартной отговоркой "хотел показать общий принцип")
 

IL78

Guest
Упс... Вот так всегда - одну проблему убираю, новую создаю... Как от этого отучиться...
PHP:
<?php
if (mysql_num_rows($q)>0) {
echo "<table>";
$cell=1;
while ($f = mysql_fetch_assoc($q)) {
   if ($cell==1) echo "<tr>";
   echo '<td><img src="'.$f["i"].'"></td>';
   $cell++;
   if ($cell>4) {
        echo "</tr>";
        $cell = 1;
  }
}
if ($cell>1 and $cell<4) {
   for ($i=$cell;$i<4;$i++) echo "<td>&nbsp;</td>";
   echo "</tr>";
}
echo "</table>";
}
?>
1) Чего я еще не учел?
2) Как делать совсем правильно?
 

SiMM

Новичок
Автор оригинала: IL78
Упс... Вот так всегда - одну проблему убираю, новую создаю... Как от этого отучиться...
Задачу надо решать в общем, а не в частных случаях.
2) Как делать совсем правильно?
А всего то надо было завести счётчик и смотреть в каждом цикле на остаток от деления счётчика на число элементов в строке. Хотя для степеней двойки существуют и более быстродействующие, чем получение остатка от деления, операции ;)
 

Crazy

Developer
Автор оригинала: IL78
2) Как делать совсем правильно?
Ты делаешь правильно. Но можно сделать проще:

1. Занести все в массив.
2. Дополнить массив так, чтобы число элементов было кратко 4.
3. Вывести значения из массива.
 
Сверху