2010-11-09 2 views
0

Пользовательская функция php возвращает набор записей из запроса mysql.Заполнение с помощью записей в таблице Html

Мне нужно заполнить таблицу из двух столбцов, имеющих равное количество или сбалансированное между двумя.

Я знаю, что мы можем разделить по числу столбцов количество строк, а затем использовать цикл для заполнения каждого td соответственно.

Любые предложения или наиболее практичный способ отображения наборов записей на таблицах, организованных в соответствии с их размерами?

Не использовать шаблоны в настоящее время.

В принципе необходимо контролировать тэг TD из эха или нет и заполняться.

Пример кода:

$col_num = 2; //Number of colums to parse data onto. 

$count_r = mysql_num_rows($result)/$col_num; 

echo '<table style="width:400px;border:3px solid green;"><tr><td>'; 

$ui=1; 

while($row = mysql_fetch_array($result)) 
{        
    if($ui<$count_r) 
     { 

      echo '<input disabled type="checkbox" value="$row[id]"'; $this->ischecked($uid,$row[id]); echo "/>".$row['name'].'<br>'."\r\n"; 

     } 
    $ui++; 
} 

//FIRST COLUMN SET 

echo '</td>'; 

echo '<td>'; 

//SECOND COLUMN SET 


echo '</td></tr></table>'; 
+0

Имеет ли значение, если записи указаны в порядке? –

+0

Предпочтительно. Спасибо – Codex73

ответ

1

Если вы не возражаете о порядке ваших записей вы можете просто сделать (предполагая, что у вас есть свои результаты в массиве называется $result) следующее:

... 
echo "<table>"; 
for($i=0;$i<count($result);$i+=2): 
    echo "<tr>"; 
     echo "<td>{$result[$i]['field']}</td>"; 
     echo "<td>{$result[$i+1]['field']}</td>"; 
    echo "</tr>"; 
endfor; 
echo "</table>"; 

Я не знаю, если это лучший способ сделать это, но так я сделал бы это в вашем случае. Имейте в виду, что я не проверяю, есть ли реальные результаты, мы предполагаем, что это так. Чтобы проверить, установлен ли $results, вы можете использовать оператор if, проверяющий его количество отсчетов, например.

Примечание Заменить for($i=0;$i<count($result);$i+=2): с for($i=0;$i<count($result);$i+=2){ и endfor; с } для традиционно отформатированный код.

+0

Спасибо. Пример немного открыл мне голову, и я смог выполнить эту функцию. – Codex73

1

Я бы рекомендовал использовать неупорядоченный список - <ul> и применить атрибут CSS float к его элементам списка (<li>). Таким образом, вам не придется беспокоиться о подсчете количества записей.

Просто введите каждую запись в поле <li> и установите их все в float: left;.

Затем ограничьте высоту <ul>, чтобы она была достаточно короткой, чтобы вынудить дополнительные <li> s поплавок в новую колонку.

Как указано в @Steve, вам также необходимо будет установить ширину <li> постоянной, чтобы столбцы были согласованы. И сделайте ширину вашего <ul> более чем в два раза и меньше, чем в три раза больше ширины <li>.

Основной способ сделать это - позвонить по телефону mysql_num_rows() по вашему запросу. Умножьте результат на высоту каждого <li>, затем разделите на два, и это будет высота вашего <ul>. Это сделает каждый столбец равной высоты.

Вы могли также сделать это с <div> с (один <div> для каждого элемента, все завернутые в одном глобальном <div>).

Но использование списка является предпочтительным способом отображения списка информации в HTML (если информация не является табличной и требует нескольких столбцов на поле, которых у вас нет и нет).

Если вам нужна более подробная справка, на этом есть great Opera Web Standards article.

+0

Не забудьте установить ширину вашей 'LI' для поддержания стандартной ширины столбца. В противном случае они будут соответствовать только тексту, поэтому не все будут одинакового размера. – Ben

+0

@Steve: Да, определенно. Я забыл упомянуть об этом. –

+0

Это совершенно не сработало. Я буду продолжать играть с ним. – Codex73

Смежные вопросы