我想在定制的论坛上为不同的用户显示不同的数据,但我不太确定最好的方法。
这是我正在使用的结构:
CREATE TABLE IF NOT EXISTS `forums_forums` (
`forum_id` int(11) NOT NULL auto_increment,
`forum_name` varchar(100) NOT NULL,
`order_number` int(11) NOT NULL default '0',
`posts` int(11) NOT NULL default '0',
`replies` int(11) NOT NULL default '0',
`forum_description` text NOT NULL,
`allow_topics` int(11) NOT NULL default '0',
`admin_only` int(11) NOT NULL default '0',
`team` int(11) NOT NULL,
PRIMARY KEY (`forum_id`),
KEY `forum_name` (`forum_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=102 ;
默认情况下,每个用户都应看到除管理员和团队特定论坛之外的所有论坛。有些用户将成为团队的一部分,但其他用户不会,因此作为团队一部分的用户应该看到所有论坛,包括他们的团队特定论坛,而不是管理员论坛。
如果用户是团队的一部分,则用户表具有与论坛团队匹配的相同团队 ID。
这是我刚才拥有的,但我无法找出更改它的最佳方法:
if ($GLOBALS["USER"]["team"] == 1) {
$a = mysql_query("SELECT * FROM forums_forums ORDER BY order_number");
} else {
$a = mysql_query("SELECT * FROM forums_forums WHERE admin_only=0 ORDER BY order_number");
}
WHILE ($b = mysql_fetch_array($a)) {
?>
<?if ($b["admin_only"] == 1) {?>
<tr bgcolor="#111111" height="100">
<?} else {?>
<tr bgcolor="#000000" height="100">
<?}?>
<td valign="top">
<blockquote style="margin:10px;">
<a href="/forums-view.php?forum_id=<?=$b["forum_id"]?>"><font color="#FFFFCC"><b><?=$b["forum_name"]?></b></font></a>
</blockquote>
</td>
<td align="center"> <b><?=number_format($b["posts"])?></b> </td>
<td align="center"> <b><?=number_format($b["replies"])?></b> </td>
<td valign="top">
<blockquote style="margin:10px;">
<?=$b["forum_description"]?>
</blockquote>
</td>
</tr>
<?}?>
</table>
首先,你真的不需要在每一行都放PHP标签,只需将它们全部保存在一个块中即可。我认为你能做的最好的事情,因为论坛表格可能不会包含太多行,就是选择所有行,然后添加显示内容的条件。另外,我假设一个没有组的论坛的 id 为 0。
$table = '';
$sql = "SELECT * FROM forums_forums ORDER BY order_number ASC";
$run = mysql_query($sql);
while($row = $mysql_fetch_assoc($run))
{
if(($_GLOBALS['users']['team'] == 1 && $row['admin_only']) || ($row['team'] > 1 && $_GLOBALS['users']['team'] == $row['team']) || ($row['team'] == 0 && $row['admin_only']))
{
$table .= '
<tr>
<td>'.$row['forum_name'].'</td>
<td>'.$row['replies'].'</td>
<td>'.$row['posts'].'</td>
<td>'.$row['forum_description'].'</td>
</tr>';
}
}
echo '<table>'.$table.'</table>';
但请记住,这是一种非常讨厌的做事方式。如果你想要更干净、更可导航的代码,那就看看模板。您可以毫不费力地自己编写模板类。然后,您应该要做的是拥有一个包含所有HTML的模板,并根据需要重复该行。
此外,还应查看表的一些数据类型。例如,如果admin_only只能是 1 或 0,则它应该是长度为 1 的 TINYINT。