正反方辩论 舌战群雄

技术与开发

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

5-f9-1-1.jpg

首先,要提供一个“生成辩论室”的页面(这个页面可以通过网站首页、论坛首页等进入),用户输入辩论室主题、主持人和主持人密码后,就生成了一个新的辩论室,通过设定的密码登录辩论室后便可以成为主持人。评论室生成后,其他用户就可以参与评论了。评论时,需要选择支持正方或反方。如果出现不雅的评论,主持人可以删除、禁言等。最后,要把辩论室的话题展示到特定区域,例如网站首页、论坛首页等。

由于辩论室较多,如何判断主持人是属于哪个辩论室的呢?这就是程序开发的难点。我的思路是,将辩论室编号作为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";//读取反对方评论

编后

本文的程序还可以做更多的扩充,如在评论时可以添加表情图片,改变字体颜色等,当然还可以让网友为主持人的每次判决做出反应,扔鸡蛋或献鲜花。根据相似的原理,大家还可以开发出网上辩论赛等程序。