Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод данных результирующей таблицы в три столбца
 
 автор: clubxaliav   (27.03.2011 в 21:08)   письмо автору
 
 

Как реализовать данный пример?

В таблице есть id |название раздела | категория раздела

1 | первый раздел | основная категория
2 | второй раздел | первый раздел
3 | третий раздел | основная категория
4 | четвертый раздел | основная категория
5 | пятый раздел | третий раздел


Необходимо:
если $col = 1, то

<table>
    <tr>
         <td>
              первый раздел<br />
              третий раздел<br />
              четвертый раздел<br />
         </td>
    </tr>
    <tr><td colspan={$col}></td></tr>
</table>


если $col = 2, то

<table>
    <tr>
         <td>
              первый раздел<br />              
              четвертый раздел<br />
         </td>
    </tr>
     <tr>
         <td>
              третий раздел<br />              
         </td>
    </tr>
    <tr><td colspan={$col}></td></tr>
</table>


если $col = 3, то

<table>
    <tr>
         <td>
              первый раздел<br />
         </td>
    </tr>
     <tr>
         <td>
              третий раздел<br />              
         </td>
    </tr>
     <tr>
         <td>
              четвертый раздел<br />              
         </td>
    </tr>
    <tr><td colspan={$col}></td></tr>
</table>


$col - в админке будет меняться количество столбцов. Заранее спасибо

   
 
 автор: cheops   (27.03.2011 в 21:25)   письмо автору
 
   для: clubxaliav   (27.03.2011 в 21:08)
 

Возможно вас заинтересует решение по ссылке http://softtime.ru/forum/read.php?id_forum=3&id_theme=8325

   
 
 автор: clubxaliav   (27.03.2011 в 22:37)   письмо автору
 
   для: cheops   (27.03.2011 в 21:25)
 

а как в этот массив занести данные из бд?

$filename = array("all.php", "auth.php",
                    "auth.txt", "base.txt",
                    "chat.html", "config.php",
                    "count.txt", "count_new.txt",
                    "counter.dat", "counter.php",
                    "create.php", "dat.db");

   
 
 автор: cheops   (28.03.2011 в 11:32)   письмо автору
 
   для: clubxaliav   (27.03.2011 в 22:37)
 

А вы его формируйте при выборке результирующей таблицы циклом while(). Т.е. не сразу формируйте таблицу, а сначала создайте промежуточный массив.

   
 
 автор: clubxaliav   (29.03.2011 в 14:05)   письмо автору
 
   для: cheops   (28.03.2011 в 11:32)
 

Так я пробывал, чет не получаеться:

Вот пример.

$query = ( "SELECT * FROM $tables[t_dirs] WHERE razdel = 'Основная категория' ORDER BY position ASC" );
$result = mysql_query ( $query );
$total = mysql_num_rows ( $result );

while ($row = mysql_fetch_array($result)) {
   $name = $row['name'];
  }

$numcols = 2;
$filename = array($name);


Выводит только первую категорию, остальных нет! Где ошибка?

   
 
 автор: cheops   (29.03.2011 в 14:25)   письмо автору
 
   для: clubxaliav   (29.03.2011 в 14:05)
 

Нет, я имею в виду вот что
$query = ( "SELECT * FROM $tables[t_dirs] 
WHERE razdel = 'Основная категория'
ORDER BY position ASC" ); 
$result = mysql_query ( $query ); 
$total = mysql_num_rows ( $result ); 

while ($row = mysql_fetch_array($result)) { 
   $filename[] = $row['name']; 
  } 

$numcols = 2;

   
 
 автор: clubxaliav   (29.03.2011 в 14:38)   письмо автору
 
   для: cheops   (29.03.2011 в 14:25)
 

Во получилось, спасибо огромное очередной раз,... вам надо сделать кнопку спасибо на форум )))

   
 
 автор: clubxaliav   (29.03.2011 в 16:34)   письмо автору
 
   для: cheops   (29.03.2011 в 14:25)
 

Игорь, можете помочь еще с этим примером по этой теме.

При обычном запросе у меня это работает, а в этом примере нет.

у меня есть еще один запрос в:

$query = ( "SELECT * FROM $tables[t_dirs] 
            WHERE razdel = 'Основная категория'
            ORDER BY position ASC" ); 
$result = mysql_query ( $query ); 
$total = mysql_num_rows ( $result ); 

while ($row = mysql_fetch_array($result)) {  
                
                $filename[] = $row['name'];   

  } 

$numcols = 2;
   
// Вычисляем число строк
  $number = (int)($total/$numcols);
  if((float)($total/$numcols) - $number != 0) $number++;

  // Формируем промежуточный двумерный массив
  for($i = 0; $i < $number; $i++)
  {
    for($j = 0; $j < $numcols; $j++)
    {
      $arr[$i][$j] = $filename[$j*$number + $i];
    }
  } 


  // Выводим таблицу
  echo "<table width=664 height=100% cellspacing=0 cellpadding=0>";
  for($i = 0; $i < $number; $i++)
  {
    echo "<tr>";
    for($j = 0; $j < $numcols; $j++)
    {
      
      $links = ( "SELECT * FROM `byp_links`, `byp_dirs`
 WHERE byp_links.dir = byp_dirs.name AND
 byp_dirs.razdel = '".$arr[$i][$j]."'" );              
      $dirlink = mysql_query ( $links );
      $n = mysql_num_rows ( $dirlink );
      if ( $n == 0 ) { $n = "0"; }

      echo "<td valign=top><font color=\"#0a7e3f\"><strong>".$arr[$i][$j]."</strong></font> [$n]<br />";
      
      $sql = ( "SELECT * FROM `byp_dirs` 
                          WHERE razdel = '".$arr[$i][$j]."'                           
                          ORDER BY id ASC" );                          
                $subraz = mysql_query ( $sql );                
                
                while ($sub = mysql_fetch_array($subraz)) {                

                $subname = $sub['name'];  
                                
                $sublinks = ( "SELECT * FROM `byp_links`, `byp_dirs` 
WHERE byp_links.dir = byp_dirs.name AND 
byp_links.dir = '$subname'" );
                $subdirlink = mysql_query ( $sublinks );
                $ns = mysql_num_rows ( $subdirlink );
                if ( $ns == 0 ) { $ns = "0"; }                              

                echo " - $subname [ $ns ]<br />";
                                
                             }
      echo "</td>";                       

    }
    echo "</tr>";
  } 
  echo "</table>"; 
он должен вывести количество [ $n ] добавленных ссылок в подразделы по каждой категории.

вот тут:

echo "<td valign=top><font color=\"#0a7e3f\"><strong>".$arr[$i][$j]."</strong></font> [$n]<br />";


Он то их показывает, но при 2х столбцах и допустим 3 категории, вот такая [0] появляется в пустой ячейки таблицы

Первая категория  [1]    Вторая категория [1]
Третья категория [0]       [0]


Как избавиться от [0] в пустой ячейки таблицы?

   
 
 автор: cheops   (29.03.2011 в 16:41)   письмо автору
 
   для: clubxaliav   (29.03.2011 в 16:34)
 

А вы вот эту проверку
if ( $n == 0 ) { $n = "0"; }
Замените следующей
if (!empty($arr[$i][$j]))  $n = "[".intval($n)."]"; 
else  $n = "";
А при выводе вместо [$n] выводите просто $n.

   
 
 автор: clubxaliav   (29.03.2011 в 16:45)   письмо автору
 
   для: cheops   (29.03.2011 в 16:41)
 

Во, получилось,.... еще разок спасибо +

   
 
 автор: clubxaliav   (22.06.2011 в 16:52)   письмо автору
 
   для: cheops   (29.03.2011 в 16:41)
 

Игорь, а как убрать здесь пустое значение с обводкой, а то при выводе 2х картинок почему-то 3я картинка которой нет имеет обводку border (в стилях задана обводка).


$numcols = 3;
$sql = ( "SELECT * FROM `byp_persona`, `byp_fotogalery` 
WHERE byp_persona.id_pers = byp_fotogalery.persid AND 
byp_persona.alt_pers = '$name_alt' 
ORDER BY byp_fotogalery.id_galery ASC" );
$result = mysql_query( $sql );
$total = mysql_num_rows ( $result );

if ( 0 < $total ) {

while ($row = mysql_fetch_array($result)) {  
                
   $filename[] = $row['img_galery'];


// Вычисляем число строк
  $number = (int)($total/$numcols);
  if((float)($total/$numcols) - $number != 0) $number++;

  // Формируем промежуточный двумерный массив
  for($i = 0; $i < $number; $i++)
  {
    for($j = 0; $j < $numcols; $j++)
    {
      $arr[$i][$j] = $filename[$j*$number + $i];

    }
  } 


  // Выводим таблицу
  echo "<table cellspacing=0 cellpadding=0 class=\"table_razdel\">";
  for($i = 0; $i < $number; $i++)
  {
    echo "<tr>";
    for($j = 0; $j < $numcols; $j++)
    {
        echo "<td valign=top><div id=\"img_galery\">
<img src=\"../images/galery/$name_alt/".$arr[$i][$j]."\"></div></td>";                       

    }
    echo "</tr>";
  }

  echo "</table>";
}

   
 
 автор: clubxaliav   (22.06.2011 в 17:29)   письмо автору
 
   для: clubxaliav   (22.06.2011 в 16:52)
 

т.е он видет картинку как <img src=\"../images/galery/$name_alt/\"> и обводит ее! соответственно ее не существует.

   
 
 автор: cheops   (22.06.2011 в 20:18)   письмо автору
 
   для: clubxaliav   (22.06.2011 в 17:29)
 

А вы проверяйте существование изображения при помощи фукнции file_exists()

   
 
 автор: clubxaliav   (25.06.2011 в 11:44)   письмо автору
 
   для: cheops   (22.06.2011 в 20:18)
 

нет не проверяю, а на каком этапе ее нужно проверять?

И еще почему картинки располагаются вот так

1 9 17
2 10 18
3 11 19
4 12 20
5 13 21
6 14 22
7 15 23
8 16 24

а должно быть, вот так

1 2 3
4 5 6
7 8 9
10 11 12 и т.д

   
 
 автор: cheops   (25.06.2011 в 12:15)   письмо автору
 
   для: clubxaliav   (25.06.2011 в 11:44)
 

1) Там где вам удобнее, эта функция скажет вам есть такое изображение или нет, в зависимости от ответа вы можете принять то или иное решение
2) Чтобы добиться этого, все ячейки нужно сохранить в массив и формировать таблицу уже из массива. Эта ситуация подробно рассматривается в скрипте по ссылке http://softtime.ru/scripts/calendar.php

PS Под новые вопросы лучше заводить новые темы - больше ответов можно получить и ссылаться на них удобнее. Давайте эту тему закроем, а если остались вопросы, создадим новые темы под них?

   
 
 автор: clubxaliav   (22.06.2011 в 17:31)   письмо автору
 
   для: clubxaliav   (22.06.2011 в 16:52)
 

Может написать как нибудь так:

if ($total = 2) { $numcols = 2; }

хотя при 4 картинках в $numcols = 3, будет 2 обводки без картинок....

   
 
 автор: clubxaliav   (22.06.2011 в 19:37)   письмо автору
 
   для: clubxaliav   (22.06.2011 в 16:52)
 

Разбил тег картинки на 2 части и посредине прописал если пусто, то нечего не вставляем, если что то есть, то вставляем стиль, а <div> убрал! Пустая обводка убралась! Метод тыка рулит ))))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования