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
Форумы портала PHP.SU :: Версия для печати :: Помогите с выводом данных из базы!
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Помогите с выводом данных из базы!

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

1. chehonte - 06 Февраля, 2009 - 11:20:50 - перейти к сообщению
Здравствуйте!

Вообщем такая задача, есть база в ней много записей и нужно вывести их в 2 колонки в таблицу! Идея такая что сначала делаем mysql_num_rows, смотрим сколько в базе записей делим на 2+1 и в первую колонку выводим первую половину записей, а во вторю колонку остатки =) пробовал написать но чёт торможу =) в 1 колонку всё вываливается, а во 2 никак! помогите пожалуйста очень буду благодарен!
2. Stierus - 06 Февраля, 2009 - 11:26:14 - перейти к сообщению
код выложить было бы неплохо
3. chehonte - 06 Февраля, 2009 - 11:40:00 - перейти к сообщению
Прошу не смеяться =) я не идеал в написании кода! вот что получилось, вообщем с 1 колонкой всё нормально а во 2 выходит только 1 запись а остальные за пределы таблицы улетают, просто немогу понять куда поставить создание 2 td и чтоб всё остальное именно в неё печаталось!
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $result=mysql_query("SELECT * FROM `menu`");
  4. $row=mysql_num_rows($result);
  5. $result2=$row/2+1;
  6. print '<table cellpadding="0" cellspacing="0" border="1"><tr><td>';
  7. $i="1";
  8. while ($array=mysql_fetch_array($result))
  9. {
  10.         if($result2>$i)
  11.         {
  12.                 ?>
  13.                 <input type='checkbox' value="<?PHP print $array['name']; ?>">
  14.                 <?PHP print $array['name']; ?>
  15.                 <?PHP
  16.         }
  17.         else
  18.         {
  19.                 print "<td>";
  20.                 ?>
  21.                
  22.                 <input type='checkbox' value="<?PHP print $array['name']; ?>">
  23.                 <?PHP print $array['name']; ?>
  24.                 <?PHP  
  25. print "<td>";
  26.         }
  27. $i++;
  28. }
  29. print "</td></tr></table>";
  30. ?>
  31.  
4. Stierus - 06 Февраля, 2009 - 11:52:07 - перейти к сообщению
Попробуйте сначала в голове алгоритм составить, а уже потом попытайтесь написать, что хотите, на php. если не получится - поможем. Учитывайте, что таблицы заполняются построчно, т.е. <table><tr><td></td><td></td></tr></table> - это 1 строка , тоесть вы не можете заполнить сначала 1 столбец, потом второй, как бы этого не хотелось Улыбка Нужно сразу оба заполнять.
5. chehonte - 06 Февраля, 2009 - 11:59:47 - перейти к сообщению
Я то алгоритм составил в голове токо криво Радость а новый чёт не получаесО Улыбка
6. Stierus - 06 Февраля, 2009 - 12:11:40 - перейти к сообщению
как насчет :
1. сохранить все записи в массив
2. Посмотреть размер массива
3. В цикле заполнить таблицу :
ячейка первого столбца будет I-й элемент массива,
ячейка второго столбца будет (i+ половина размера массива)-й элемент массива
7. chehonte - 06 Февраля, 2009 - 12:21:21 - перейти к сообщению
Вроде дошло Радость буду пробовать!
(Добавление)
Вообщем мучился мучился, в конце концов сделал так Улыбка
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $result=mysql_query("SELECT `name` FROM `menu`");
  4. print  '<table cellpadding="0" cellspacing="0" border="1">';
  5. $print=false;
  6. while ($array=mysql_fetch_array($result))
  7. {
  8.         if(!$print)
  9.         {
  10.                 print "<tr><td>";
  11.                 ?>
  12.                 <input type='checkbox' value="<?PHP print $array['name']; ?>" />
  13.                 <?PHP
  14.                 print $array['name'];
  15.                 print "</td>";
  16.                 $print=true;
  17.         }
  18.         else
  19.         {
  20.                 print "<td>";
  21.                 ?>
  22.                 <input type='checkbox' value="<?PHP print $array['name']; ?>" />
  23.                 <?PHP
  24.                 print $array['name'];
  25.                 print "</td></tr>";
  26.                 $print=false;
  27.         }
  28. }
  29.  
  30. print "</table>";
  31. ?>
  32.  
8. Stierus - 06 Февраля, 2009 - 13:53:27 - перейти к сообщению
Тебе нужно, что бы было именно в 1-й колонке 1-я половина, во 2-й вторая :
1 5
2 6
3 7
4 8
...

или можно сделать что будет идти так:

1 2
3 4
5 6
7 8
...

?
9. chehonte - 06 Февраля, 2009 - 14:48:49 - перейти к сообщению
Последний скрипт который я кинул это реализация второго варианта предложенного вами, а вообще желательно бы сделать первый вариант Улыбка
10. Stierus - 06 Февраля, 2009 - 15:05:29 - перейти к сообщению
Цитата:
а вообще желательно бы сделать первый вариант

1 Цикл заполняет массив записями из базы данных, но ничего не выводит
2. Смотрим сколько элементов в массиве, делим пополам - это наша дельта
3. for ($i=0; $i<#наша дельта; $i++){ - второй цикл по уже сформированному массиву
внутри цикла выводим строку (2 ячейки),
ячейка первого столбца будет I-й элемент массива,
ячейка второго столбца будет (i+ #наша дельта)-й элемент массива

ps
Когда пополам делить будешь - учитывай случаи нечётных чисел Улыбка. Подробнее алгоритм не знаю как описать, разве что всё написать самому, что не хотелось бы.
11. chehonte - 06 Февраля, 2009 - 15:12:56 - перейти к сообщению
Stierus пишет:
Когда пополам делить будешь - учитывай случаи нечётных чисел


Да я об этом тоже думал, но в 1 скрипте который я прислал, там более менее всё работало, у меня в базе было 9 записей, в 1 столбец вышло 5, а остальные 4 тоже вышли, но только за пределы таблицы улетели Радость

А вообще попробую доработать ваше предложение если не лень будет, ото уж чёт впарился, пол дня только этот скрипт мучил Радость если вдруг доберусь то скину сюда готовый вариант!

Большое вам спасибо за помощь! Улыбка
12. chehonte - 06 Февраля, 2009 - 19:10:17 - перейти к сообщению
Вот конечный результат, может кому и пригодиться
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $result=mysql_query("SELECT * FROM `menu`");
  4. $row=mysql_num_rows($result);
  5. $result2=ceil($row/2);
  6. print '<table cellpadding="0" cellspacing="0" border="0"><tr valign="top"><td width="150">';
  7. $i="1";
  8. while ($array=mysql_fetch_array($result))
  9. {
  10. ?>
  11.         <input type='checkbox' value="<?PHP  print $array['name']; ?>">
  12.         <?PHP  print $array['name']; ?>
  13.                 <?PHP  
  14.         if($result2==$i)
  15.         {
  16.                 print "</td><td width='150'>";
  17.         }
  18.         $i++;
  19. }
  20. print "</td></tr></table>";
  21. ?>
  22.  

 

Powered by ExBB FM 1.0 RC1