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

Форум MySQL

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

 

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

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

тема: Вывод результатов из базы данных в несколько столбцов
 
 автор: franko   (31.03.2011 в 19:42)   письмо автору
 
 

Добрый вечер!

есть цикл
if (mysql_num_rows($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);
do
{
printf ("<h4><a href='post.php?id=%s'>%s</a></h4><br>
", $myrow3["id"], $myrow3["title"]);
}
while ($myrow3 = mysql_fetch_array($result3));
}


но смотрится тяжело. список большой. а как вывести это к примеру в два (или в три) столбца?

  Ответить  
 
 автор: cheops   (31.03.2011 в 20:33)   письмо автору
 
   для: franko   (31.03.2011 в 19:42)
 

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

  Ответить  
 
 автор: elenaki   (31.03.2011 в 20:46)   письмо автору
 
   для: franko   (31.03.2011 в 19:42)
 

примерно так. вывод данных в таблицу с заданным количеством столбцов и строк (3х3 или 6х8) и линками для постраничного листания


<?
$show_cols = 3; // кол-во колонок
$show_rows = 3; // кол-во строк

$start1 = $_GET["start1"];

if (!isset($start1)) $start1=1;

 //определяем, сколько столбцов и где мы находимся
$query =  ("SELECT * FROM store order by id ");//выбираем все
$array=mysql_query($query); 
$num_rows = mysql_num_rows($array); //кол-во строк в базе
$cols=floor($num_rows/$show_cols); //кол-во столбцов в таблице вывода
$pages = floor($num_rows/($show_cols*$show_rows));// кол-во страниц
?>
<table border=0 width="100%"><tr><td>

<? if ($num_rows > $show_cols*$show_rows*$pages) $pages++; 
//если строк в базе больше чем помещается на одной странице, переходим на след.стр-цу
for ($ii=1; $ii<=$pages; $ii++) { //цикл перебора страниц
$from1=$ii*$show_rows*$show_cols-($show_rows*$show_cols-1); //количество показанных страниц минус кол-во всех страниц
$to1=$ii*$show_rows*$show_cols; //количество показанных страниц
if ($to1 > $num_rows) $to1 = $num_rows; //esli pokaz. str-c  > chem strok v baze, to delaem =
if ($start1==$from1) echo "| <font  class=opanki >$from1 - $to1</font>"; 
else 
{echo " | <a href=\"view.php?start1=$from1&step=$step\"> $from1 - $to1</a>";}
        
}?>
</td></tr></table>
<?/// вывод страницы
if ($num_rows > $pages*$show_cols*$show_rows) $vid++; 
for ($iii=0; $iii<=$vid; $iii++) { 

/// вывод таблицы
        $query0 = "SELECT * FROM sub_menu where id = $step";
        $result0 = mysql_query($query0); 
        $row0 = mysql_fetch_array($result0);
        $title_sub = $row0["title_sub"];

echo "<h3 class=header>$title_sub</h3>";    
if ($num_rows > $show_rows) $show_rows++; 
for ($i=2; $i<=$show_rows; $i++) { 
$start1=$start1 - 1; 
$query = "SELECT * FROM store order by id  DESC limit $start1,$show_cols";
$start1=$start1+$show_cols + 1;
$result = mysql_query($query);
$number = mysql_num_rows($result);
echo"<table align=center border=\"0\" cellpadding=5 cellspacing=2 >";
$j = 0;
    WHILE ($j < $number)
     {      
     $id = mysql_result($result,$j,"id");
     $image = mysql_result($result,$j,"image");
     $descr = mysql_result($result,$j,"descr");
     $link = mysql_result($result,$j,"link");
     $title = mysql_result($result,$j,"title");
     echo"<td>";
if ($link !="") { echo "<img src=\"img/mic/".$image.".jpg\" border=0 ></TD>";}
else echo "<img src=\"img/mic/".$image.".jpg\" border=0 ></TD>";

     $j++;
     }// конец вывода строки
?>
</tr>
<?
}// конец вывода таблицы
?>
</table>
<?
}// конец выводы страницы
/// конец всего
?>

  Ответить  
 
 автор: Dinya_1   (31.03.2011 в 23:06)   письмо автору
 
   для: franko   (31.03.2011 в 19:42)
 

Вот хороший пример


<?php 
    $sql = mysql_query("SELECT id,name foto_name FROM katalog ORDER BY id ");  
if(!$sql)
{echo "<br>В данном разделе пока нет информации";}
else 
{
  if(mysql_num_rows($sql) > 0) 
  { 
    echo "<table width='100%' border='0' cellspacing='0' cellpadding='0'>"; 
    $i = 0; 
    while ($row = mysql_fetch_array($sql))  
    {  
      $i++; 
      if($i == 1) echo "<tr >"; 
echo "<td><table class='t14' width='100px' border='0' cellspacing='0' cellpadding='0' >
<tr>
<td><strong class='t16'>$row[name]</strong></td>
</tr>
<tr>
<td><a href='descript.php?id=$row[id]'><img class='img' border='0' width='100px' height='75px' src='img/tovar/small/".$row['foto_name']."'></a></a></td>
</tr>
<tr>
<td><span class='t15'>Цена: </span></td>
</tr>
<tr>
<td align='center'><center><a class='b11_1' href='add_korzina.php?id=$row[id]&action=1'></a></center></td>
</tr>
</table></td>";
//Указываем количество столбцов на странице
if($i == 4) 
{ 
echo "</tr>"; 
$i = 0; 
} 
} 
echo "</table>"; 
}}
    ?>


  Ответить  
 
 автор: franko   (01.04.2011 в 14:18)   письмо автору
 
   для: Dinya_1   (31.03.2011 в 23:06)
 

воспользовался вашим примером
есть вопросы.
<?php  
$sql = mysql_query("SELECT * FROM regions ORDER by title");   
if(!$sql) 
{echo "<br>В данном разделе пока нет информации";} 
else  
{ 
  if(mysql_num_rows($sql) > 0)  
  {  
    echo "<table width='100%' border='0' cellspacing='0' cellpadding='0'>";  
    $i = 0;  
    while ($row = mysql_fetch_array($sql))   
    {   
      $i++;  
      if($i == 1) echo "<tr>";  
echo "<td><table width='100px' border='0' cellspacing='0' cellpadding='0' > 
<tr> 
<td><a href='post_regions.php?id_region=$row[id_region]'>$row[title]</a></td> 
</tr> 
</table></td>"; 
//Указываем количество столбцов на странице 
if($i == 4)  
{  
echo "</tr>";  
$i = 0;  
}  
}  
echo "</table>";  
}} 
?>

1. Почему-то происходит разрыв в title, т.е на вывод идет название, к примеру так
Московский
университет

а не в строчку. не могу понять где разрывается...
2. Вывод идет построчно в этом коде, а как вывести постолбно. заполняем вначале 1-й стоблик, а потом второй...

  Ответить  
 
 автор: cheops   (01.04.2011 в 14:32)   письмо автору
 
   для: franko   (01.04.2011 в 14:18)
 

1. Разрыв идет по пробелу, это типичное поведение в таблицах, чтобы запретить такой перевод строк добавьте атрибут nowrap в тэг <td>

  Ответить  
 
 автор: cheops   (01.04.2011 в 14:37)   письмо автору
 
   для: franko   (01.04.2011 в 14:18)
 

2. Для этого все ссылки необходимо предварительно поместить в массив, который потом выводить при помощи скрипта, который приведен ниже
<?php
  $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");
  // Вычисляем количество элементов в массиве
  $total = count($filename);
  // Количество столбцов в таблице
  $numcols = 3;

  // Вычисляем количество строк
  $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 border=1>";
  for($i = 0; $i < $number; $i++)
  {
    echo "<tr>";
    for($j = 0; $j < $numcols; $j++)
    {
      echo "<td>".$arr[$i][$j]."</td>";
    }
    echo "</tr>";
  } 
  echo "</table>";
?>

  Ответить  
 
 автор: franko   (01.04.2011 в 15:17)   письмо автору
 
   для: cheops   (01.04.2011 в 14:37)
 

Что здесь подразумевается под ссылками?

  Ответить  
 
 автор: cheops   (01.04.2011 в 16:58)   письмо автору
 
   для: franko   (01.04.2011 в 15:17)
 

>Что здесь подразумевается под ссылками?
<a href='post_regions.php?id_region=$row[id_region]'>$row[title]</a>

  Ответить  
 
 автор: franko   (01.04.2011 в 18:29)   письмо автору
 
   для: cheops   (01.04.2011 в 16:58)
 

т.е должно выглядеть следующим образом?

<?php
$filename = array("post_regions.php");

верно?

  Ответить  
 
 автор: cheops   (01.04.2011 в 18:55)   письмо автору
 
   для: franko   (01.04.2011 в 18:29)
 

Нет, лучше в цикле while, который обрабатывает результирующую таблицу, этому массиву присвоить уже готовые ссылки
<?php
  ...
  $filenamep[] = "<a href='post_regions.php?id_region=$row[id_region]'>$row[title]</a>";
  ...
?>

  Ответить  
 
 автор: franko   (01.04.2011 в 23:21)   письмо автору
 
   для: cheops   (01.04.2011 в 18:55)
 

т.е в итоге будет вот так?

<?php 
$filenamep[] = "<a href='post_regions.php?id_region=$row[id_region]'>$row[title]</a>";
  // Вычисляем количество элементов в массиве 
  $total = count($filename); 
  // Количество столбцов в таблице 
  $numcols = 3; 

  // Вычисляем количество строк 
  $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 border=1>"; 
  for($i = 0; $i < $number; $i++) 
  { 
    echo "<tr>"; 
    for($j = 0; $j < $numcols; $j++) 
    { 
      echo "<td>".$arr[$i][$j]."</td>"; 
    } 
    echo "</tr>"; 
  }  
  echo "</table>"; 
?>

верно?

  Ответить  
 
 автор: cheops   (02.04.2011 в 00:46)   письмо автору
 
   для: franko   (01.04.2011 в 23:21)
 

Нет. Вам нужно получить массив.
$sql = mysql_query("SELECT * FROM regions ORDER by title");    
if(!$sql)  
{echo "<br>В данном разделе пока нет информации";}  
else   
{  
  if(mysql_num_rows($sql) > 0)   
  {   
    while ($row = mysql_fetch_array($sql))    
    {    
      $filename[] = "<a href='post_regions.php?id_region=$row[id_region]'>$row[title]</a>";
    }
  }
}
?>
А вот уже после того, как массив $filename заполнен, можно использовать приведенный выше скрипт.

  Ответить