0

カスタムメイドのフォーラムでさまざまなユーザーのさまざまなデータを表示したいのですが、最善の方法がわかりません。

ここに私が取り組んでいる構造があります:

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 ;

デフォルトでは、各ユーザーは、管理者およびチーム固有のものを除くすべてのフォーラムを表示する必要があります。一部のユーザーはチームの一員になりますが、他のユーザーはチームの一員ではないため、チームの一員であるユーザーは、管理者のフォーラムではなく、チーム固有のフォーラムを含むすべてのフォーラムを表示する必要があります。

ユーザーがチームの一員である場合、users テーブルには、フォーラム チームと一致する等しいチーム 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">&nbsp;<b><?=number_format($b["posts"])?></b>&nbsp;</td>
<td align="center">&nbsp;<b><?=number_format($b["replies"])?></b>&nbsp;</td>
<td valign="top">
<blockquote style="margin:10px;">
<?=$b["forum_description"]?>
</blockquote>
</td>
</tr>
<?}?>
</table>
4

1 に答える 1

0

まず、すべての行に PHP タグを配置する必要はありません。すべてを 1 つのブロックにまとめてください。フォーラムテーブルにはおそらくあまり多くの行が含まれないので、できる最善のことは、それらをすべて選択してから、表示されるものに関する条件を追加することだと思います. また、グループのないフォーラムの 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 を 1 行に並べたテンプレートを作成する必要があります。

また、テーブルのデータ型のいくつかを確認する必要があります。たとえば、admin_only が 1 または 0 しか指定できない場合は、長さが 1 の TINYINT にする必要があります。

于 2013-09-21T17:27:47.770 に答える