请帮忙, 我在函数中调用数据库中的数据,并希望以表格格式将其显示给用户。我的目标是让我的数据库中的所有名称看起来像这样:
John Peter James Steven
Jess Syndey Monique Lynda
但我得到的是:
John John John John
Peter Peter Peter Peter
James James James James
etc etc etc etc
这是我的代码:
function public_navigation($sel_subject, $sel_page, $public = true) {
$output = "<table border=\"1\">";
$subject_set = get_all_subjects($public);
$column_count = mysql_num_fields($subject_set);
while ($subject = mysql_fetch_array($subject_set)) {
$output .= "<tr>";
for($column_num = 0; $column_num < $column_count; $column_num++) {
$output .= "<td><a href=\"index.php?subj=" . urlencode($subject["id"]) .
"\">{$subject["menu_name"]}</a></td>";
}
}
$output .= "</tr></table>";
return $output;
}
答案 0 :(得分:1)
尝试:
function public_navigation ($sel_subject, $sel_page, $public = true, $column_count = 4) {
$output = '<table border="1">'; // Start table element
$subject_set = get_all_subjects($public); // Get data
for ($i = 1; $subject = mysql_fetch_array($subject_set); $i++) { // Loop data witha counter
if ($i == 1) {
// Start of a new row
$output .= '<tr>';
}
// Cell for this record
$output .= '<td><a href="index.php?subj='.htmlspecialchars(urlencode($subject["id"])).'">'.htmlspecialchars($subject["menu_name"]).'</a></td>';
if ($i >= $column_count) {
// End of this row
$i = 0;
$output .= '</tr>';
}
}
if ($i > 1 && $i <= $column_count) {
// Pad with an empty cell if needed
$colspan = ($column_count + 1) - $i;
$output .= "<td colspan=\"$colspan\" /></tr>";
}
$output .= '</table>'; // End of table
return $output; // Return output
}
答案 1 :(得分:0)
遇到数据库查询问题时,应始终将查询与其一起发布。如果你伪装字段名称等,这很好,但如果没有更多细节,很难找出问题。
对于初学者来说,即使你不想这样,你似乎也在按名字排序。从查询中删除“ORDER BY [FIELDNAME]”应解决此问题。
其次,看起来你正在“分组”某些东西或“加入”某些内容而不过滤掉双重结果。至少,当你看到多次弹出相同的行时,这是最常见的问题。这可以通过在查询中使用“DISTINCT([FIELDNAME])”来修复。
而且,在旁注中,为什么使用get_all_subjects()和mysql_num_fields()而不仅仅是mysql_query()?事实上,我甚至不确定get_all_subjects()是什么,php.net没有它,它绝对不是一个标准的PHP函数...
function public_navigation($sel_subject, $sel_page, $public = true) {
$RowCount = 1;
$SQL = mysql_query("YOUR QUERY");
while ($Row = mysql_fetch_array($SQL) {
$RowHTML = '<td>[CONTENTS OF CELL]</td>'.(($RowCount % 4) ? '</tr><tr>' : '');
$RowCount++;
}
return eregi_replace('<tr></tr>','','<table><tr>'.$output.'</tr></table>');
}
答案 2 :(得分:0)
你有两个嵌套的循环,while总是读取一个新的行,而for的输出频率与行一样多。打开
<tr>
之前的然后关闭它。然后设置
$i=0;
之前。
同时这样做:
if ($i%5 == 0)
{
echo "</tr><tr>";
}
$i++;
这应该这样做。