Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как вывести результат запроса в несколько равных столбцов [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: Как вывести результат запроса в несколько равных столбцов
carakurt
Отправлено: 29 Июня, 2009 - 21:19:47
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Друзья, я позволю себе влезть в ваше обсуждение со своей похожей на описываемую ecipuser-ом проблемой и надеюсь, что мы все вместе сможем ее решить....
Так вот, передо мной также втала проблема разместить на листе в таблице логотипы. По три в ряд. Но, мне кажется, я сделал это очень нерационально. У меня есть таблица "producers", с уникальным полем "id" и полем "logo" со ссылкой на файл с изображением (IMG/1.gif). Вот как выглядит мой иррациональный код:

CODE (text):
скопировать код в буфер обмена
  1.  
  2. <table><tr>
  3. <?php
  4. $result2 = mysql_query ("SELECT id, logo FROM producers WHERE id<5",$db);
  5. $myrow2 = mysql_fetch_array($result2);
  6. do {
  7. printf ("<td><a href='view_producer.php?id=%s'><img src='%s'></a></td>",
  8. $myrow2['id'],$myrow2['logo']);
  9. }
  10. while ($myrow2 = mysql_fetch_array($result2));
  11. ?>
  12. </tr></table>
  13.  
  14. <table><tr>
  15.  
  16. <?php
  17. $result2 = mysql_query ("SELECT id, logo FROM producers WHERE id>4 AND id<9",$db);
  18. $myrow2 = mysql_fetch_array($result2);
  19. do {
  20. printf ("<td><a href='view_producer.php?id=%s'><img src='%s'></a></td>",
  21. $myrow2['id'],$myrow2['logo']);
  22. }
  23. while ($myrow2 = mysql_fetch_array($result2));
  24. ?>
  25. </tr></table>
  26.  
  27.  


Помогите, пожалуйста, его автоматизировать. Я не очень усвоил про проверку кратности, высказанную JustUserR.
 
 Top
valenok Модератор
Отправлено: 29 Июня, 2009 - 21:22:45
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Он имел в виду что после каждого третего логотипа нужно ставить перевод строки.
Тебе же остается считать какой логотип является третим, шестым и т.д.
Является ли число кратным трем можно проверить остатком деления на три оператором %

3%3 =0
4%3 = 1
5%3 = 2
6%3=0

Каждый раз когда остаток 0 - нужно делать перевод строки.


-----
Truly yours, Sasha.
 
My status
 Top
carakurt
Отправлено: 29 Июня, 2009 - 22:30:10
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Наконец-то я понял эту функцию! Спасибо большое! Буду эксперементировать!
 
 Top
JustUserR
Отправлено: 30 Июня, 2009 - 02:20:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




carakurt К слову сказать очень распространенная проверка по кратности
Зачатсую с помощью нее в таблице нечетные строки выделяют одим цветом а четные другим чтобы яснее было видно строку и вообще красивее было Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
carakurt
Отправлено: 10 Июля, 2009 - 22:19:50
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




JustUserR, спасибо Вам большое! Я так понимаю, что вообще этой функции, проходимой в 7-8 классах средней школы есть достаточно много применений в программировании.
Хочу задать в продолжение моего кода вопрос, не совсем относящийся к данной теме, но все же...

Я воспользовался, предложенной JustUserR функцией проверки кратности, но тут у меня возникла трудность с конструкцией DO WHILE, воспользоваться которой я уже не могу, а цикл WHILE из-за моего, пока что, низкого уровня владения PHP выдает результат начиная лишь со второй строки... чтобы стало понятнее вот код:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. echo "<table><tr>";
  3. $result2 = mysql_query ("SELECT id, logo FROM producers",$db);
  4. $myrow2 = mysql_fetch_array($result2);
  5. $cv=0;
  6.  
  7. echo '<td><a href="view_producer.php?id=',$myrow2['id'],'"><img src="',$myrow2['logo'],'"></a></td>';
  8.  
  9. while ($myrow2 = mysql_fetch_array($result2))
  10. {
  11. echo '<td><a href="view_producer.php?id=',$myrow2['id'],'"><img src="',$myrow2['logo'],'"></a></td>';
  12.  
  13. $cv++;
  14.  
  15. if($cv%3==0)
  16. {
  17. echo "</tr><tr>";
  18. }
  19.  
  20. }
  21. echo "</tr></table>";
  22.  


Т.е., как вы видите, перед началом цикла WHILE я единожды вывожу первое, содержащиеся в массиве изображение. Подскажите, пожалуйста, рационально ли это или же я могу так написать код, чтобы цикл WHILE выводил массив с самой первой строки?
 
 Top
valenok Модератор
Отправлено: 11 Июля, 2009 - 03:17:49
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




ТЫ можешь. И мы в тебя верим.


-----
Truly yours, Sasha.
 
My status
 Top
carakurt
Отправлено: 11 Июля, 2009 - 10:38:48
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




valenok пишет:
ТЫ можешь. И мы в тебя верим.



Радость Спасибо тебе! Мне стало намного легче...но может быть можно дать мне направление мысли...некую нить Ариадны, чтобы я не сбился с пути истинного!
 
 Top
valenok Модератор
Отправлено: 11 Июля, 2009 - 14:47:39
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)






-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 11 Июля, 2009 - 16:16:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




carakurt Попробуйте такой код - я еще добавил условие чтобы не выводилсоь пустой строки в начале и переход срабатывал только на 3 столбце (Как и должно быть Улыбка
PHP:
скопировать код в буфер обмена
  1. <?PHP echo "<table><tr>";
  2. $result2 = mysql_query ("SELECT id, logo FROM producers",$db);
  3. while($myrow2 = mysql_fetch_array($result2))
  4. {$myres2[]=$myrow2;}
  5. for($i=0;$i<count($myres2);$i++)
  6. {echo '<td><a href="view_producer.php?id='.$myres2[$i]['id'].'"><img src="'.$myres2[$i]['logo'].'"></a></td>';
  7. if(($i%3==0)&&(!($i==0))) {echo "</tr><tr>";}
  8. else {}}
  9. echo "</tr></table>"; ?>


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
carakurt
Отправлено: 13 Июля, 2009 - 09:25:39
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




JustUserR, спасибо Вам большое за код! Буду вникать и разбираться! Подмигивание
valenok, спасибо за ссылку!
 
 Top
carakurt
Отправлено: 19 Июля, 2009 - 12:30:47
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Уважаемый, JustUserR! Обращаюсь к Вам за помощью в очередной (надеюсь последний) раз с этой нескончаемой шарманкой! Досконально разобрал Ваш код, но, пока не хватает знаний для его окончательной доработки.
Итак, в цикле FOR начинают выводиться данные, полученные из массива. Причем, благодаря введению в действия дополнительной переменной $i, вывод начинается с индекса 0. Замечательно!
После вывода первой ячейки таблицы происходит проверка удовлетворения условиям оператоа IF. Так как у нас на данный момент времени $i==0, то перевода строки не происходит и цикл возвращается в начало, увеличивая на единицу значение переменной $i. И так продолжается пока значение переменной $i не будет равно 3. Тогда произойдет перевод строки и таблица продолжит заполняться и далее.
НО!!! Из-за того, что первый индекс = 0, то ячеек в строке будет не 3, как я мечтаю, а 4, что портит мне всю малину. Если же я убераю дополнительное условие оператора IF, где переменная $i не должна быть равна 0, то количество ячеек в таблице становится необходимым, т.е. равняется 3, но первая строка, что естественно, содержит только одну ячейку - изображение с индексом 0, а затем происходит перенос строки. Т.е. либо пение, либо танцы, а вот так чтобы УУУУХ и все сразу - не происходит!
(Добавление)
ВСЕ!!! Ура!!! Спасибо, друзья большое за то, что наставили меня на путь истиный! Поддался таки мне каменный цветок! Все получилось с помощью цикла DO WHILE
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. echo "<table border='1px'><tr>";
  4.  
  5. $result2 = mysql_query ("SELECT id, logo FROM producers",$db);
  6. $myrow2 = mysql_fetch_array($result2);
  7. $i=0;
  8. do
  9. {
  10. echo '<td><a href="view_producer.php?id='.$myrow2['id'].'"><img src="'.$myrow2['logo'].'"></a></td>';
  11. $i++;
  12. if($i%3==0)
  13. {
  14. echo "</tr><tr>";
  15. }
  16. else {}
  17. }
  18. while($myrow2 = mysql_fetch_array($result2));
  19.  
  20. echo "</tr></table>";
  21. ?>
  22.  

Может кому-нибудь сгодится!
 
 Top
JustUserR
Отправлено: 19 Июля, 2009 - 14:00:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




carakurt Да я рад за вас что вы наконецто разобрались с этой темой
На будущее могу сказать что можно было сделать проверку ($i+1)%3==0 тогда бы эффект был бы тот же и не было бы пустой строки Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
carakurt
Отправлено: 19 Июля, 2009 - 15:29:35
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Не совсем понял Вас, JustUserR. Если не сложно, объясните куда можно было бы вставить эту проверку?
 
 Top
JustUserR
Отправлено: 20 Июля, 2009 - 17:00:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Както вот так Улыбка
PHP:
скопировать код в буфер обмена
  1. <?PHP  echo "<table><tr>";
  2. $result2 = mysql_query ("SELECT id, logo FROM producers",$db);
  3. while($myrow2 = mysql_fetch_array($result2))
  4. {$myres2[]=$myrow2;}
  5. for($i=0;$i<count($myres2);$i++)
  6. {echo '<td><a href="view_producer.php?id='.$myres2[$i]['id'].'"><img src="'.$myres2[$i]['logo'].'"></a></td>';
  7. [b]if(($i+1)%3==0)[/b] {echo "</tr><tr>";}
  8. else {}}
  9. echo "</tr></table>"; ?>


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
carakurt
Отправлено: 20 Июля, 2009 - 20:32:37
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




JustUserR, спасибо Вам огромное за поддержку, помощь и участие! Возьму себе эти приемы на заметку!
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB