[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: симметричный вывод изображений
maccamset
Приветствую всех. Прошу помоч.
Задача: из бд нужно выводить изображения таким образом, чтобы они становились в строку по 3 штуки, а в последней строке становились симметрично. т.е. , к примеру дано 8 картинок, выводим первые три в первой строке, вторые три во второй строке, а оставшиеся две в третей строке, но симметрично центру. если 7 штук изначально, то последняя картинка - седьмая должна расположиться по центру. Привожу код:
Если нужны комментарии - сделаю.
Проблема этого кода в том, что если в базе id_p идут не по порядку, то он работает неправильно.
Т.е. если после 7 идёт 9, то ошибка. Помогите исправить этот код или подскажите где найти решение моей задачи.

<?
##

if (isset($_GET['id_p'])) {$id_p = $_GET['id_p'];}
if (isset($_GET['name_p'])) {$name_p = $_GET['name_p'];}
if (isset($_GET['img_index'])) {$img_index = $_GET['img_index'];}

$result = mysql_query("SELECT * FROM `poshiv`");

$num_rows = mysql_num_rows($result);

echo '<p valign = "top"><table width="500" border="1" align="center">';
echo "<tr>";
# мегацикл
#

while ($myrow = mysql_fetch_assoc($result))
{
$a = $myrow["id_p"]%3;
if ($myrow["id_p"] % 3 == 0)
{
if ($num_rows - $myrow["id_p"] == 0)
{
printf ("<td><p><img src='%s' width='120' height='78' alt='фото'>
<a href='edit_lesson.php?id_p=%s'>trt%s</a></p></td>"
,$myrow["img_index"],$myrow["id_p"],$myrow["name_p"]);
break;
}
printf ("<td width='166'><p><img src='%s' width='120' height='78' alt='фото'>
<a href='edit_lesson.php?id_p=%s'>df%s</a></p></td></tr><tr>"
,$myrow["img_index"],$myrow["id_p"],$myrow["name_p"]);
}
# float fmod ( float $x , float $y )
# Возвращает дробный остаток от деления десятичных дробей x и y ).
# Остаток ® определяется так: x = i * y + r, где i - некоторое целое.
# r всегда имеет такоей же знак, как и x и модуль, меньший или равный модулю y .

elseif ($num_rows - $myrow["id_p"] == 0 && fmod($myrow["id_p"], 3) == 1)
{

printf ("<td colspan='3' align='center'><p><img src='%s' width='120' height='78' alt='фото'><br>
<a href='edit_lesson.php?id_p=%s'>797%s</a></p></td></tr><tr>"
,$myrow["img_index"],$myrow["id_p"],$myrow["name_p"]);
}
elseif ($num_rows - $myrow["id_p"] == 1 && fmod($myrow["id_p"], 3) == 1)
{

printf ("<td colspan='3'><table width='490' border='1'><tr><td><p><img src='%s' width='120' height='78' alt='фото'>
<a href='edit_lesson.php?id_p=%s'>787%s</a></p></td>"
,$myrow["img_index"],$myrow["id_p"],$myrow["name_p"]);
}
elseif ($num_rows - $myrow["id_p"] == 0 && fmod($myrow["id_p"], 3) == 2)
{

printf ("<td><p><img src='%s' width='120' height='78' alt='фото'>
<a href='edit_lesson.php?id_p=%s'>77%s</a></p></td></tr></table></td>"
,$myrow["img_index"],$myrow["id_p"],$myrow["name_p"]);
}
else
{
printf ("<td width='166'><p><img src='%s' width='120' height='78' alt='фото'>
<a href='edit_lesson.php?id_p=%s'>7%s</a></p></td>"
,$myrow["img_index"],$myrow["id_p"],$myrow["name_p"]);
}
}

echo "</tr></table></p>";
echo "<br>Получено строк: $num_rows";
##
?>




Спустя 16 минут, 33 секунды (23.12.2009 - 22:59) VolCh написал(а):
заведи переменную $i=1 вне цикла и везде где используешь $myrow["id_p"] для вычислений позиции в таблице используй её. Ну и в конце цикла её увиличвай на 1 $i++;

Спустя 41 минута, 35 секунд (23.12.2009 - 23:40) maccamset написал(а):
VolCh, спасибо за помощь, совет дельный, всё работает!
немного подшаманю и всё. а нет ли решения первоначальной задачи
(я про вывод) поменьше? никто не подскажет?

Спустя 2 часа, 49 минут, 15 секунд (24.12.2009 - 02:30) inpost написал(а):
А не получился ли у меня, случайно, индусский код?
Дополнение: "Теперь подправил, вроде нормально стало, хотя не проверял, так, навскидку написал".

$result = mysql_query("SELECT * FROM `poshiv`");
$rows = mysql_num_rows($result);
$tr = var_dump((int) ($rows/3)); $tr++;

echo "<table>";
$i = 1;
while (($myrow = mysql_fetch_assoc($result)) or ($i != $tr));
{
echo "<tr><td>$myrow['img']</td>"
$myrow = mysql_fetch_assoc($result);
echo "<td>$myrow['img']</td>";
$myrow = mysql_fetch_assoc($result);
echo "<td>$myrow['img']</td></tr>";
$i++;
}

echo "</table<table><tr>";

while ($myrow = mysql_fetch_assoc($result));
{echo "<td>IMG</td>";}
echo "</tr></table>";

Спустя 10 часов, 15 минут (24.12.2009 - 12:45) Gabriel написал(а):
inpost
$myrow = mysql_fetch_assoc($result);
зачем оно в теле цикла?
а чтобы позиционировать картинки не пробовал тегу <tr> поставить алигн центр?

Спустя 49 минут, 38 секунд (24.12.2009 - 13:34) inpost написал(а):
Gabriel
Когда-то не знал, как делать трижды это действие, и использовал такую вещь, так в привычке осталось. Это всё неопытность сказывается! smile.gif
а Алигн - ото то и понятно, это подразумевается (+подразумевается что ширина для обоих таблиц будет тоже зарание выставлена одинаковая!), для этого и создается вторая таблица с одной или двумя картинками (или с тремя), которым делаются выравнивания по центру, чтобы получить результат такой, как надо Макку smile.gif

Визуальный эфект будет такой:

| 1 | 2 | 3 |
| 4 | 5 | 6 |
| _7_|_ 8_| или,
|___ 7___|
Быстрый ответ:

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