一个用JSP写的论坛的实例(三)
来源:Linux-cn.com
作者:Webmaster
时间:2007-05-05
点击:
[ 收藏] [ 投稿]
三:论坛分页技术的实现
首先创建一个临时表bbs_t,这个表和存放帖子的表结构基本相同,只是这个表的第一个字段为一个自增性的字段类型,然后将存放帖子的表中的所有数据插入这个临时表中:
stmt.executeUpdate("create temporary table bbs_t
(autoadd int auto_increment primary key,click int,uname char(20),
title text,memo text,id int,rootid int,level int,num int,dtime char(20),
facepath char(40))");
stmt.executeUpdate("insert into bbs_t(click,uname,title,memo,id,rootid,
level,num,dtime,facepath) select click,uname,title,memo,id,rootid,level,
num,dtime,facepath from bbs where forum='"+forum+"'
order by rootid+idsign(rootid)*id desc,num");
|
现在就可以通过这个临时表来进行分页了,以下是实际程序代码:
<%
//用来取得整个表中跟帖的总数,用来表示有多少个主题
RS=stmt.executeQuery("select count(rootid) from bbs_t where rootid=0");
if(RS.next())
titleall=RS.getInt(1);
%>
<%
//取得整个表中的帖子数,再与30(每页显示30条帖子)取摸,得到总页数
RS=stmt.executeQuery("select max(autoadd) from bbs_t");
if(RS.next()) {
int p_t=RS.getInt(1);
if(p_t%30==0)
pageall=p_t/30;
else
pageall=p_t/30+1;
}
//每页第一条帖子的ID,初始值为1
begin=1;
//用来记录当前是第几页,初始值为第一页,当按“下一页”按钮后pagenow的值自动加一;
反之自动减一
pagenow=1;
%>
<%
//设置本页第一条帖子的ID
begin=(pagenow1)*30+1;
//取得从begin开始后的29条记录,返回数据集
RS=stmt.executeQuery("select id,title,rootid,click,memo,uname,dtime,
facepath,autoadd from bbs_t where autoadd>='"+begin+"' and
autoadd<='"+(begin+29)+"'");
%>
|
四:这里是最关键的部分,用来发新帖子,删除帖子,修改帖子,回复帖子
<%@page import="java.sql.*,java.util.Date"%>
<%@page contentType="text/html;charset=gb2312"%>
<%!
//############### 公用变量 ###################
String uname="";//当前用户的用户名
String forum="";
String flag="";
ResultSet rs=null;
ResultSet rs1=null;
String i="";//帖子ID
String r="";//根帖ID
int id=0;
String content="";//帖子内容
String checkbox="";//是否自动回复
String title="";//帖子标题
//########### reply变量 ####################
int ordernum=65536;//基数
int level=0;//bbs数据库中的level字段
int num=0;//bbs数据库中的num字段
String space="";//保存回复帖子前面的空格
int rootid=0;
String title_m="";
//################ edit变量 ########################
//串t为数据库中的title字串,t1为要替换的title
public String repl(String t,String t1) {
int begin=t.indexOf("<font color=+pcolor+>");
int end=t.indexOf("</font>");
if(begin!=1 && end!=1)
t=t.substring(0,begin+21)+t1+t.substring(end,t.length());
return t;
}
String emote="";//保存表情
%>
<%
//从被提交的页面取得用户名,当前论坛ID,当前帖子ID,是否为跟帖,
帖子标题,帖子内容,表情等值
uname=String.valueOf(session.getValue("username")).toString();
forum=String.valueOf(request.getParameter("forum")).toString();
flag=String.valueOf(request.getParameter("flag")).toString();
i=String.valueOf(request.getParameter("i")).toString();
r=String.valueOf(request.getParameter("r")).toString();
title=String.valueOf(request.getParameter("title")).toString();
content=String.valueOf(request.getParameter("memo")).toString();
emote=String.valueOf(request.getParameter("emote")).toString();
%>
<%
//################## post #######################
if(flag.equals("post") && !title.equals("")) {
if(title!=null) {
rs=sqlbean.execQuery("select id from bbs order by id desc");
if(rs.next())
//设置该新帖子的ID
id=rs.getInt("id")+1;
else
id=1;
title="<a href=viewbbs.jsp?i=+id+&r=0&forum=+forum+>
<font color=+pcolor+>"+title+"</font></a>";
sqlbean.execUpdate("insert into bbs values
(0,'"+uname+"','"+title+"','"+content+"','"+id+"',0,0,0,'"
+tools.rdate()+"','"+checkbox+"','"+forum+"','"+emote+"')");
}
out.println("你的帖子已经发出,请稍后...");
}
%>
<%
//###################### reply ########################
if(flag.equals("reply") && !title.equals("")) {
rs=sqlbean.execQuery("select uname,id,rootid,
level,num,amail from bbs where id='"+i+"'");
if(rs.next()) {
rs1=sqlbean.execQuery("select iname,email from
usertable where iname='"+rs.getString("uname")+"'");
if(rs1.next())
to=rs1.getString("email");
level=rs.getInt("level")+1;
num=rs.getInt("num");
amail=rs.getString("amail");
}
//以下是论坛树状结构的算法,此算法在前面已经详细介绍过了,这里就不重复了
if(rs.next()) { //没有子帖
rootid=Integer.valueOf(i).intValue();
num=num+ordernum;
space="   ";
}
else {
if(r.equals("0"))//回复根帖
{
rootid=Integer.valueOf(i).intValue();
rs1=sqlbean.execQuery("select * from bbs where forum='"+forum+"'
and rootid='"+i+"' and num>'"+num+"' order by
rootid+idsign(rootid)*id desc,num");
}
else {
rootid=Integer.valueOf(r).intValue();
rs1=sqlbean.execQuery("select * from bbs where forum='"+forum+"'
and rootid='"+r+"' and num>'"+num+"' order by
rootid+idsign(rootid)*id desc,num");
}
if(rs1.next()) {
num=(num+rs1.getInt("num"))/2;
}
else {
num=num+ordernum;
}
space="";
for(int j=0;j<level;j++)
space=space+"   ";
}
if(i!=null) {
title_m=String.valueOf(request.getParameter("textfield3").toString());
title=title_m;
content=String.valueOf(request.getParameter("textfield")).toString();
if(title!=null) {
rs=sqlbean.execQuery("select id from bbs order by id desc");
if(rs.next())
id=rs.getInt("id")+1;
title=space+"<font color=+pcolor+>"+title+"</font>";
//sqlbean.execUpdate("insert into bbs values(0,'"+uname+"','"
+title+"','"+content+"','"+id+"','"+rootid+"','"+level+"','"+num+"',
'"+tools.rdate()+"','"+checkbox+"','"+forum+"','"+emote+"')");
}
}
out.println("你的帖子已经发出,请稍后...");
}
%>
<%
//################# edit #####################
if(flag.equals("edit")) {
rs=sqlbean.execQuery("select title from bbs where id='"+i+"'");
if(rs.next())
title=repl(String.valueOf(rs.getString("title")).toString(),title);
if(title!=null) {
sqlbean.execUpdate("update bbs set title='"+title.trim()+"',memo='"
+content.trim()+"',dtime='"+tools.rdate()+"',facepath='"+emote+"'
where id='"+i+"' and forum='"+forum+"'");
}
out.println("你的帖子已经发出,请稍后...");
}
%>
<%
//################ delete ###########################
if(flag.equals("delete")) {
//如果删除的是跟帖子,则将下面的所有子帖全部删除
if(r.equals("0")) {
sqlbean.execUpdate("delete from bbs where id='"+i+"'
or rootid='"+i+"'");
}
//删除子帖,删除子帖的所有回复的帖子,其余的不变
else {
rs=sqlbean.execQuery("select level,num from bbs where id='"+i+"'");
if(rs.next()) {
level=rs.getInt("level");
num=rs.getInt("num");
}
rs=sqlbean.execQuery("select level,num from bbs where rootid='"+r+"'
and level<="+level+" and num>"+num+" order by
rootid+idsign(rootid)*id desc,num");
if(rs.next()) {
sqlbean.execUpdate("delete from bbs where rootid='"+r+"'
and num<"+rs.getInt("num")+" and num>="+num);
}
else {
rs=sqlbean.execQuery("select level,num from bbs where rootid='"+r+"'
and num>="+num+" order by num desc");
if(rs.next()) {
sqlbean.execUpdate("delete from bbs where rootid='"+r+"'
and num<="+rs.getInt("num")+" and num>="+num);
}
}
}
out.println("该帖已经被删除!");
}
%>
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:JSP 技术白皮书
下一篇:[硬盘]安装第二块硬盘
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】
更多相关文章
|
|
|