正反方辩论 舌战群雄
技术与开发
数动连线程序员许勇:当前的评论系统,用户参与评论时,以跟帖方式居多,较少有正方反方的。而有这种功能的,又缺乏管理,在评论时经常出现谩骂。我考虑很久,想到了一个解决方法——设计一个有主持人的辩论室(程序下载地址:http://www.shudoo.com/bzsoft)。

首先,要提供一个“生成辩论室”的页面(这个页面可以通过网站首页、论坛首页等进入),用户输入辩论室主题、主持人和主持人密码后,就生成了一个新的辩论室,通过设定的密码登录辩论室后便可以成为主持人。评论室生成后,其他用户就可以参与评论了。评论时,需要选择支持正方或反方。如果出现不雅的评论,主持人可以删除、禁言等。最后,要把辩论室的话题展示到特定区域,例如网站首页、论坛首页等。
由于辩论室较多,如何判断主持人是属于哪个辩论室的呢?这就是程序开发的难点。我的思路是,将辩论室编号作为Cookie值名,从而让每个辩论室都有不同的Cookie值,主持人登录后将他的用户名存入对应的Cookie值中,判断该值是否为空即可判断该辩论室主持人是否已上线,这样便不会对其他辩论室的主持人产生影响了。根据相似原理,我们还可以制作出网上辩论赛等程序。
第一步:设计数据库表
根据需求,我们需要设计两个数据库表,分别记录辩论室基本信息和网友评论。其中辩论室基本信息包括辩论室标志、讨论主题、主持人、主持人密码和主持人是否在线标志。网友评论包括评论标志、评论人、评论内容、评论支持对象、评论推荐和对应的辩论室标志。数据库表关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
——辩论室基本信息
CREATE TABLE `ftmain` (
`id` int(10) unsigned NOT NULL auto_increment,
`title` varchar(255) default NULL,
——网友评论表
CREATE TABLE `fating` (
`id` int(10) unsigned NOT NULL auto_increment,
`un` varchar(20) default NULL,
`content` varchar(255) default NULL,
第二步:生成辩论室
当用户输入辩论室相关信息,点击“生成辩论室”按钮后,就新建立一个辩论室,他就成为辩论室的主持人。主持人的主要职责是推荐优秀的评论和删除无理的评论。辩论室生成后其他用户便可以发表评论了。新建一张PHP页面命名为“index.php”作为生成辩论室页面,新建一张PHP页面命名为“bls.php”作为辩论室页面,输入相关代码,其中关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
//index.php页面代码
$db->update("INSERT INTO `ftmain` ( `id` , `title` , `fg` , `fgpw` , `online` ) VALUES (NULL , '$title', '$fg', '$fgpw', '0') ");//将辩论室信息存入数据库
$qs=$db->insert_id();//获得辩论室编号
alert('成功生成辩论室!','bls.php?qs='.$qs);
//bls.php页面代码
//找到对应辩论室标志的辩论室
$sql="select id,title,fg,fgpw,online from `ftmain` where id='$qs' limit 1";
$rs=$db->get_one($sql);
if($rs){
$qs=$rs['id'];
$title=$rs['title'];
$fg=$rs['fg'];
$fgpw=$rs['fgpw'];
$online=$rs['online'];
}else{
alert('对不起!没有找到对应的辩论室!',0);
exit();
//主持人推荐、删除评论部分
if($doit=='rec'){//推荐指定的优秀评论
if((!empty($id)) && is_numeric($id)){
$sql="update `fating` set recommended=1 where id='$id'";
$db->update($sql);
}
}
if($doit=='unrec'){ //取消指定的优秀评论
if((!empty($id)) && is_numeric($id)){
$sql="update `fating` set recommended=0 where id='$id'";
$db->update($sql);
}
}
if($doit=='del'){//删除无理的评论
if((!empty($id)) && is_numeric($id)){
$sql="delete from `fating` where id='$id'";
$db->update($sql);
第三步:展示评论内容
网友可以在辩论室内针对话题发表自己的评论,并且可以选择支持或者反对该主题。分别读取支持和反对的评论显示在正方或反方评论区域中,这里大家需要注意的是,由于主持人具有推荐和删除评论的权力,我们在显示评论的时候,如果当前页面访问者为主持人,应将“推荐”和“删除”的按钮显示在评论旁。最后将辩论室的话题添加到特定区域,方便用户参与。在bls.php页面输入相关代码,其中关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
if(!empty($fgadmin)){//如果当前访问者为主持人
$oper1='[<a href="#" onclick="oper(0,this)">取消</a> <a href="#" onclick="oper(1,this)">删除]';
$oper2='[<a href="#" onclick="oper(2,this)">置顶</a><a href="#" onclick="oper(1,this)">删除]';
$sql="select * from fating where zf=1 and qs='$qs' order by id desc";//读取支持方的评论
$rows=$db->query($sql);
while($rs=$db->fetch_array($rows)){
echo '<li id="'.$rs['id'].'">'.$rs['content'].'['.$rs['un'].'] '.date('Y-m-d H:i:s',$rs['time']).$oper2.'';
$sql="select * from fating where zf=0 and qs='$qs' order by id desc";//读取反对方评论
编后
本文的程序还可以做更多的扩充,如在评论时可以添加表情图片,改变字体颜色等,当然还可以让网友为主持人的每次判决做出反应,扔鸡蛋或献鲜花。根据相似的原理,大家还可以开发出网上辩论赛等程序。