Вывод таблицы в цикле в две колонки

vladex
На сайте с 21.12.2008
Offline
9
2965

Ссылка на сайт где проблемы!!!

Вот код


function two_column($arr)
{
$m1 = array();
$m2 = array();
foreach($arr as $key=>$val)
{
if ($key%2 == 0)
$m1[] = $val;
else
$m2[] = $val;

}
return array('m1'=>$m1, 'm2'=>$m2);
}

$result = mysql_query ("SELECT * FROM portfolio ORDER BY id") or print mysql_error();

if ((mysql_num_rows($result))!=0)
{
$ret_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$ret_arr[] = $row;
}
}

$arr = two_column($ret_arr);
$c = sizeof($arr['m1']);
for ($i=0; $i<=$c; $i++ )
{
echo <<<VLADEX
"<table align='center' class='listing'>
<tr>
<td class='list'>
<img class='img' alt='{$arr['m1'][$i]['alt']}' align='left' src='{$arr['m1'][$i]['mini_img']}'>
<a class='href_l' href='all_portfolio.php?id={$arr['m1'][$i]['id']}'>{$arr['m1'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m1'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m1'][$i]['author']}</p>
</td>
<td class='list'>
<img class='img' alt='{$arr['m2'][$i]['alt']}' align='right' src='{$arr['m2'][$i]['mini_img']}'>
<a class='href_r' href='all_portfolio.php?id={$arr['m2'][$i]['id']}'>{$arr['m2'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m2'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m2'][$i]['author']}</p>
</td>
</tr>
<tr>
<td class='cover'>{$arr['m1'][$i]['cover_text']}</td><td class='cover'>{$arr['m2'][$i]['cover_text']}</td>
</tr>
</table>"
VLADEX;

Не пойму почему появляется пустая таблица, а на локальном хостинге вообще ошибки выдает:

Всегда на высоте (http://urik.i-vladex.com/)
aleksey_php
На сайте с 17.03.2008
Offline
53
#1

Проблема видимо у Вас в том, что если число строк в таблице portfolio нечётное, то появляется лишняя пустая ячейка в конце таблицы?

Вот Вам быстрое решение: перепишите цикл for

for ($i=0; $i<=$c; $i++ ) 

{
if(isset($arr['m1'][$i]) and isset($arr['m2'][$i])){
echo "
<table align='center' class='listing' border=1>
<tr>
<td class='list'>
<img class='img' alt='{$arr['m1'][$i]['alt']}' align='left' src='{$arr['m1'][$i]['mini_img']}'>
<a class='href_l' href='all_portfolio.php?id={$arr['m1'][$i]['id']}'>{$arr['m1'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m1'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m1'][$i]['author']}</p>
</td>
<td class='list'>
<img class='img' alt='{$arr['m2'][$i]['alt']}' align='right' src='{$arr['m2'][$i]['mini_img']}'>
<a class='href_r' href='all_portfolio.php?id={$arr['m2'][$i]['id']}'>{$arr['m2'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m2'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m2'][$i]['author']}</p>
</td>
</tr>";
}
elseif(isset($arr['m1'][$i])){
echo "
<table align='center' class='listing' border=1>
<tr>
<td class='list' colspan='2'>
<img class='img' alt='{$arr['m1'][$i]['alt']}' align='left' src='{$arr['m1'][$i]['mini_img']}'>
<a class='href_l' href='all_portfolio.php?id={$arr['m1'][$i]['id']}'>{$arr['m1'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m1'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m1'][$i]['author']}</p>
</td>
<tr>
<td class='cover'>{$arr['m1'][$i]['cover_text']}</td><td class='cover'>{$arr['m2'][$i]['cover_text']}</td>
</tr>
</table>";
}
elseif(isset($arr['m2'][$i])){
echo "
<table align='center' class='listing' border=1>
<tr>
<td class='list' colspan='2'>
<img class='img' alt='{$arr['m2'][$i]['alt']}' align='right' src='{$arr['m2'][$i]['mini_img']}'>
<a class='href_r' href='all_portfolio.php?id={$arr['m2'][$i]['id']}'>{$arr['m2'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m2'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m2'][$i]['author']}</p>
</td>
<tr>
<td class='cover'>{$arr['m1'][$i]['cover_text']}</td><td class='cover'>{$arr['m2'][$i]['cover_text']}</td>
</tr>
</table>";
}
}

Можете использовать этот код, но я бы на Вашем месте переписал его более красиво, т.к. я привёл его лишь для того, чтобы Вы поняли в чём проблема.

vladex
На сайте с 21.12.2008
Offline
9
#2

Вот так изменил код - >>>>


function two_column($arr)
{
$m1 = array();
$m2 = array();
foreach($arr as $key=>$val)
{
if ($key%2 == 0)
$m1[] = $val;
else
$m2[] = $val;

}
return array('m1'=>$m1, 'm2'=>$m2);
}
$result = mysql_query ("SELECT * FROM portfolio ORDER BY id") or print mysql_error();

if ((mysql_num_rows($result))!=0)
{
$ret_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$ret_arr[] = $row;
}
}
$arr = two_column($ret_arr);
$c = sizeof($arr['m2']);
for ($i=0; $i<=$c; $i++ )
{
if(isset($arr['m2'][$i]) && isset($arr['m1'][$i])){
print "
<table align='center' class='listing' border=1>
<tr>
<td class='list'>
<img class='img' alt='{$arr['m1'][$i]['alt']}' align='left' src='{$arr['m1'][$i]['mini_img']}'>
<a class='href_l' href='all_portfolio.php?id={$arr['m1'][$i]['id']}'>{$arr['m1'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m1'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m1'][$i]['author']}</p>
</td>
<td class='list'>
<img class='img' alt='{$arr['m2'][$i]['alt']}' align='right' src='{$arr['m2'][$i]['mini_img']}'>
<a class='href_r' href='all_portfolio.php?id={$arr['m2'][$i]['id']}'>{$arr['m2'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m2'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m2'][$i]['author']}</p>
</td>
</tr>";
}
}

И теперь вывод идет так - >>>>

Ссылка

aleksey_php
На сайте с 17.03.2008
Offline
53
#3

Ну так это то, что Вы хотели? Или что-то ещё Вас не устраивает?

vladex
На сайте с 21.12.2008
Offline
9
#4
vladex
На сайте с 21.12.2008
Offline
9
#5

Главное код идет без ошибок, проверил во всех браузерах:(

aleksey_php
На сайте с 17.03.2008
Offline
53
#6

Смотрите внимательно:


print "
<table align='center' class='listing' border=1>
<tr>
<td class='list'>
<img class='img' alt='{$arr['m1'][$i]['alt']}' align='left' src='{$arr['m1'][$i]['mini_img']}'>
<a class='href_l' href='all_portfolio.php?id={$arr['m1'][$i]['id']}'>{$arr['m1'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m1'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m1'][$i]['author']}</p>
</td>
<td class='list'>
<img class='img' alt='{$arr['m2'][$i]['alt']}' align='right' src='{$arr['m2'][$i]['mini_img']}'>
<a class='href_r' href='all_portfolio.php?id={$arr['m2'][$i]['id']}'>{$arr['m2'][$i]['title']}</a>
<p class='date'>Последнее обновление:{$arr['m2'][$i]['date']}</p>
<p class='date'>Автор:{$arr['m2'][$i]['author']}</p>
</td>
</tr>";

Вы не закрываете таблицу.

В том примере, что я Вам кинул во втором сообщении - я сам забыл один раз </table> вставить.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий