Корректный вывод данных запроса в мультиколоночную HTML таблицу

void

Новичок
Корректный вывод данных запроса в мультиколоночную HTML таблицу

Значит так, есть база с полями, скажем, name, surname, school, city, country и т.д.

Задача такова: делаем запрос типа SELECT * FROM table;

А вот дальше никак: Итак, как получить на выходе следующую комбинацию:

(использую mysql_fetch_array )


<table>
<tr>
<td>name1</td>
<td>name2</td>
<td>name3</td>
</tr>
<tr>
<td>surnname1</td>
<td>surnname2</td>
<td>surnname3</td>
</tr>
<td>name4</td>
<td>name5</td>
<td>name6</td>
</tr>
<tr>
<td>surnname4</td>
<td>surnname5</td>
<td>surnname6</td>
</tr>
</table>


т.е. таблица с тремя колонками, чтобы после каждого третьего была бы новая строчка, т.е. <tr>,
но строчки парами, т.е.:

-----------------------------------------
name1 | name2 | name3
-----------------------------------------
surname1| surname2| surname3
-----------------------------------------
name4 | name5 | name6
------------------------------------------
surname4| surname5| surname6
------------------------------------------

и, если, скажем результат запроса не кратен 3-м (в остатке 2), то последняя ячека прорисовывалась бы, т.е. nbsp;
А то у меня получается все как:
-----------------------------------------
name1 | name1 | name1
-----------------------------------------
surname1| surname1| surname1
-----------------------------------------

и т.д. никак не могу заставить отображать по три результата свыбранного массива.


Заранее благодарю, а то сломал голову :confused:
 

Ermitazh

Новичок
1. Выбирай инфу $m = mysql_query (...)
2. используй mysql_num_rows (тебе ж сначала нужно получить ряды)
$num= mysql_num_rows($m)
и только потом while($mm=mysql_fetch_array($m)){
здесь и выбираешь далее
}
 

bgm

&nbsp;
Пока есть что фетчить:

1. Фетчишь по шесть записей и заполняешь двумерный массив (строка в блоке - колонка в блоке) необходимыми данными.
2. Выводишь данные
 

void

Новичок
Ermitazh
1. Выбирай инфу $m = mysql_query (...)
2. используй mysql_num_rows (тебе ж сначала нужно получить ряды)
$num= mysql_num_rows($m)
и только потом while($mm=mysql_fetch_array($m)){

Эти пункты я опустил здесь в примере, это и так само собой :)

-~{}~ 07.07.06 14:53:

bgm

Фетчишь по шесть записей - но как именно, можно пример кода?
 

bgm

&nbsp;
Примерно так (общая идея):

$count = mysql_num_rows ($result);
$i = 1; $j = 0; $out = array();
while ($f = mysql_fetch_array($result))
{
$j++; $out[] = $f;
if ( $i<6 and $j<$count) { $i++; }
else
{ $i = 1; my_print ($out); $out = array(); }
}
 

bgm

&nbsp;
Что значит "не то"? Ты или поясняй, что именно "не то", или не задавай вопросов.

Кстати я ошибся: фетчить в твоём случае надо не по шесть, а по три.
 

void

Новичок
bgm

в outpute он мне пишет Array. Спасибо за ответ, я просто еще параллельно экспериментирую, пока не выходит так как нужно.
 

bgm

&nbsp;
void

И как ты этот самый "output" осуществляешь? :) Напиши нормально функцию my_print, которая получает на вход массив из трёх элементов, который тебе надо вывести в соответствии с твоей задачей. И твоя задача решена.
 

void

Новичок
bgm

Давай разовьем тему: :)

function my_print (сюда что-то) {

echo и т.д;

}

Но что внутри? Блин. или я отупел, или постарел
 

ybilevych

Новичок
Примерно так (не проверял, возможны синтаксические ошибки)
PHP:
while ($f = mysql_fetch_assoc($result)) //получить 1-ю колонку
{
echo "<tr>";
$out = array(); //создать пустой массив
$out[0] = $f;
if($f = mysql_fetch_assoc($result)) //получить 2-ю колонку
{
$out[1] = $f;
}
if($f = mysql_fetch_assoc($result)) //получить 3-ю колонку
{
$out[2] = $f;
}
for ($i = 0; $i<3; i++) // Вывести имена
{
echo "<td>";
if (isset($out[$i]))
echo $out[$i]['name']
else 
echo "&nbsp;";
echo "</td>";
}
for ($i = 0; $i<3; i++) // Вывести фамилии
{
echo "<td>";
if (isset($out[$i]))
echo $out[$i]['surname']
else 
echo "&nbsp;";
echo "</td>";
}
echo "</tr>";
}
 

Фанат

oncle terrible
Команда форума
bgm
если человек пишет, что у него выводится слово Array, это значит, что он не умеет работать с массивами.
 

bgm

&nbsp;
void
Рассмотри вот такой пример:

PHP:
function my_print ( $in ) {

$sn = array();
foreach ($in as $val) {
$sn['name'][] = $val['name'];
$sn['surname'][] = $val['surname'];
}

foreach ($sn as $str) {
echo "<tr>";
foreach ($str as $val) { echo "<td>".$val."</td>"; }
echo "</tr>";
}

}
И действительно - почитай мануал на предмет работы с массивами: http://ru.php.net/manual/ru/language.types.array.php

ybilevych Почему же ерунда?
Начнём: а если потребуется не в три колонки, а в пять?
 

void

Новичок
PHP:
<html>
<head>
  <title></title>
</head>
<body>
<table>
<?php
DEFINE ("HostName", "10.10.1.12");
DEFINE ("DBName", "stock");
DEFINE ("UserName", "");
DEFINE ("Password", "");
mysql_connect(HostName,UserName, Password) or die("Could not connect: " . mysql_error());
mysql_select_db(DBName) or die("Could not recognize DB: " . mysql_error());;

function my_print ( $in ) {

$sn = array();
foreach ($in as $val) {
$sn['serial'][] = $val['serial'];
$sn['price'][] = $val['price'];
}

foreach ($sn as $str) {
echo "<tr>\n";
foreach ($str as $val) { echo "<td>".$val."</td>\n"; }
echo "</tr>\n";
}

}

$query = "select * from watches";
$result = mysql_query($query);
$count = mysql_num_rows ($result);
$i = 1;
$j = 0;
$out = array();
while ($f = mysql_fetch_array($result)) {
$j++;
$out[] = $f;

if ( $i<3 and $j<$count) { $i++; }
else
{ $i = 1; my_print ($out); $out = array(); }
}
echo "</table>";
?>
</body>
</html>
Заработало :) Ура товарищи. Спасибо всем!
 
Сверху