Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с выводом таблицы PHP 
:(
    Опции темы
Addmin
Дата 20.11.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: нет
Всего: 15



Здравствуйте!

Такая проблема: у меня в скрипте каталога должно выводиться в таблице по 3 товара:
Код

  echo "<table border=0>";
  for ($i=1,$j=0;$i<($num+1);$i++,$j++)
  {
    $query= "SELECT * FROM products WHERE id_catalog=".$id." AND pos=".$i;
    $current = mysql_query($query);
    $current = mysql_fetch_array($current);
    {    
    if ($j==0)

     echo "<tr>";
     echo "<td>
     
     <div class=\"miniproduct\">";  
     echo "<div class=\"miniproductimage\"><a href=catalog.php?id_product=".$current['id_product']."><img border=\"0\" src=\"admin/catalog/".$current['small']."\"></a>";
     echo "<p><br><a href=catalog.php?id_product=".$current['id_product'].">".$current['name'].$num."</a></div></p><br><div class=\"miniproducttext\"><div class=pred><b>Öåíà: ".$current['price1']." ðóá.</b></div></div></div></td>";    
    }
    if ($j==1)
    {
     echo "<td><div class=\"miniproduct\">";  
     echo "<div class=\"miniproductimage\"><a href=catalog.php?id_product=".$current['id_product']."><img border=\"0\" src=\"admin/catalog/".$current['small']."\"></a>";
     echo "<p><br><a href=catalog.php?id_product=".$i.">".$current['name']."</a></div></p><br><div class=\"miniproducttext\"><div class=pred><b>Öåíà: ".$current['price1']." ðóá.</b></div></div></div></td>";    
    }
    if ($j==2)
    {
     echo "<td><div class=\"miniproduct\">";  
     echo "<div class=\"miniproductimage\"><a href=catalog.php?id_product=".$current['id_product']."><img border=\"0\" src=\"admin/catalog/".$current['small']."\"></a>";
     echo "<p><br><a href=catalog.php?id_product=".$i.">".$current['name']."</a></div></p><br><div class=\"miniproducttext\"><div class=pred><b>Öåíà: ".$current['price1']." ðóá.</b></div></div></div></td></tr>";    
     $j= -1;
    }  
  }
  echo "</table>";


Но выводится почему-то по пять в ряду:
http://24optom.ru/catalog.php?id_catalog=2

 Подскажите, пожалуйста, где может быть ошибка.


--------------------
PM MAIL   Вверх
bars80080
Дата 20.11.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



я правильно понимаю, что здесь идёт цикл, в котором на каждой итерации происходит запрос строки из таблицы с позицией, отличающейся на 1 от предыдущего?


Цитата(Addmin @  20.11.2009,  19:41 Найти цитируемый пост)
    {    
    if ($j==0)

7ую и 8ую строки поменяйте местами
PM MAIL WWW   Вверх
Ипатьев
Дата 20.11.2009, 21:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Мне кажется, ошибка в нечевидном шаманстве со счетчиками.
"две шаги налево, две шаги направо"
здесь прибавим, здесь отнимем. к чему все эти плюсплюсы и минус-минусы?

Но главная проблема, конечно же, в том, что запрос внутри цикла. Это самое ужасное.


PM MAIL   Вверх
K0T9I
Дата 21.11.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 20.11.2009

Репутация: 2
Всего: 2



Код

$query = mysql_query("SELECT * FROM `products` WHERE `id_catalog`='$id' AND `pos`='$i' limit $num");
$i = 0; // счетчик
$all = mysql_num_rows($query); // всего строк
echo "<table border=0>";
while ($row = mysql_fetch_assoc($query)) {
  if ($i%3 == 0) echo "<tr>\n"; // $a % $b. Деление по модулю. Целочисленный остаток от деления $a на $b.
  echo "<td><div class=\"miniproduct\">";  
  echo "<div class=\"miniproductimage\"><a href=catalog.php?id_product=".$row['id_product']."><img border=\"0\" src=\"admin/catalog/".$row['small']."\"></a>";
  echo "<p><br><a href=catalog.php?id_product=".$row['id_product'].">".$row['name'].$all."</a></div></p><br><div class=\"miniproducttext\"><div class=pred><b>Öåíà: ".$row['price1']." ðóá.</b></div></div></div></td>";
  $i++;
  if ($i%3 == 0 || $i == $all) echo "</tr>\n";
}
echo "</table>";


как то так.

1) у тебя действительно запрос к базе был внутри цикла, а это значит в каждой итерации он заного выполнялся.
2) даже если поместить его перед запросом, то все равно непонятки будут: если у тебя из базы выбрало 2 строки, а $num равен 10, то что он 8 раз просто так будет по циклу проходить?
3) отделение представления от содержания это уже отдельный вопрос


ps: я вот не понимаю, зачем всегда используют fetch_array, даже если нужен 100% только ассоциативный массив? она как то быстрее работает чтоли, чем fetch_assoc?

Это сообщение отредактировал(а) K0T9I - 21.11.2009, 01:10
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.