<!--#include file="adovbs.inc" -->
<!--#include file="tools.asp"-->
<!--#include file="forumconn.asp"-->
<%'--------------------------------------Delete begin
delete=request("delete")
selectuserid=request.form("selectuserid")
if (delete=1) and (not selectuserid="") then
set rs=server.createobject("adodb.recordset")
sql="delete from "&tablename&" where fldAuto in ("&request.form("selectuserid")&")"
rs.open sql,conn,3
'rs.close
'set rs=nothing
end if
'---------------------------------------Delete end %>
<%
'----
Function InsertAP(n)
If n <> "" Then
If Instr(n,"'")<>0 Then
InsertAP = Replace(n,"'","''")
Else
InsertAP = n
End If
End If
End Function
Sub DispSubMail(layer,id)
'layer: how many spaces to insert in
SQL2 = "SELECT * FROM " &tablename& " WHERE fldReply = " & cInt(id) & " ORDER BY fldAuto"
Set rs2 = conn.Execute(SQL2)
do until rs2.eof
varAuto2 = rs2("fldAuto")
varName2 = rs2("fldName")
varEmail2 = rs2("fldEmail")
varTi2 = rs2("fldTitle")
varBody2 = rs2("fldBody")
varDate2 = rs2("fldDate")
str=""
if session("netparty_loginname")="blueriver" then
response.write "<input type=""checkbox"" name=""selectuserid"" value="""&rs2("fldAuto")&""">"
end if
for j=1 to layer
str=str & "<img src=blank.gif WIDTH=15 HEIGHT=12>"
next
str=str & "<b><img src=re.gif WIDTH=17 HEIGHT=12><a href='reply.asp?ID=" & varAuto2 & "&Reply=" & varAuto2 & "'><font size=2 face=arial>" & varTi2 & "</a></font> <font face=arial size=2>-- " & varName2 & ". " & varDate2 & "</font> "
If varDate2=Date Then
str=str & "<img src=new.gif WIDTH=34 HEIGHT=12>"
end If
str=str & "</b><br>"
Response.Write(str)
call DispSubMail(layer+1,varAuto2)
rs2.movenext
loop
End Sub
%>
·forum.sql
C R E A T E T A B L E [ d b o ] . [ f o r u m ] (
[ f l d A u t o ] [ i n t ] N O T N U L L ,//自动赋值,整数,从1或0开始
[ f l d R e p l y ] [ i n t ] N U L L ,
[ f l d N a m e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d E m a i l ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d C a t e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d T i t l e ] [ n t e x t ] N U L L ,
[ f l d B o d y ] [ n t e x t ] N U L L ,
[ f l d D a t e ] [ s m a l l d a t e t i m e ] N U L L
) O N [ P R I M A R Y ] T E X T I M A G E _ O N [ P R I M A R Y ]
G O
<!--#include file="adovbs.inc" -->
<!--#include file="tools.asp"-->
<!--#include file="forumconn.asp"-->
<%'--------------------------------------Delete begin
delete=request("delete")
selectuserid=request.form("selectuserid")
if (delete=1) and (not selectuserid="") then
set rs=server.createobject("adodb.recordset")
sql="delete from "&tablename&" where fldAuto in ("&request.form("selectuserid")&")"
rs.open sql,conn,3
'rs.close
'set rs=nothing
end if
'---------------------------------------Delete end %>
<%
'----
Function InsertAP(n)
If n <> "" Then
If Instr(n,"'")<>0 Then
InsertAP = Replace(n,"'","''")
Else
InsertAP = n
End If
End If
End Function
Sub DispSubMail(layer,id)
'layer: how many spaces to insert in
SQL2 = "SELECT * FROM " &tablename& " WHERE fldReply = " & cInt(id) & " ORDER BY fldAuto"
Set rs2 = conn.Execute(SQL2)
do until rs2.eof
varAuto2 = rs2("fldAuto")
varName2 = rs2("fldName")
varEmail2 = rs2("fldEmail")
varTi2 = rs2("fldTitle")
varBody2 = rs2("fldBody")
varDate2 = rs2("fldDate")
str=""
if session("netparty_loginname")="blueriver" then
response.write "<input type=""checkbox"" name=""selectuserid"" value="""&rs2("fldAuto")&""">"
end if
for j=1 to layer
str=str & "<img src=blank.gif WIDTH=15 HEIGHT=12>"
next
str=str & "<b><img src=re.gif WIDTH=17 HEIGHT=12><a href='reply.asp?ID=" & varAuto2 & "&Reply=" & varAuto2 & "'><font size=2 face=arial>" & varTi2 & "</a></font> <font face=arial size=2>-- " & varName2 & ". " & varDate2 & "</font> "
If varDate2=Date Then
str=str & "<img src=new.gif WIDTH=34 HEIGHT=12>"
end If
str=str & "</b><br>"
Response.Write(str)
call DispSubMail(layer+1,varAuto2)
rs2.movenext
loop
End Sub
%>
·forum.sql
C R E A T E T A B L E [ d b o ] . [ f o r u m ] (
[ f l d A u t o ] [ i n t ] N O T N U L L ,//自动赋值,整数,从1或0开始
[ f l d R e p l y ] [ i n t ] N U L L ,
[ f l d N a m e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d E m a i l ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d C a t e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d T i t l e ] [ n t e x t ] N U L L ,
[ f l d B o d y ] [ n t e x t ] N U L L ,
[ f l d D a t e ] [ s m a l l d a t e t i m e ] N U L L
) O N [ P R I M A R Y ] T E X T I M A G E _ O N [ P R I M A R Y ]
G O
先申明,我的系统没有经过实际的检验,只能说我给你的是一份设计思想,你需要自己理解再修改(甚至会有想象不到的问题)。
数据库(我用的是sqlserver):你那张表需要改为以下字段(我只用到1,2, 3两个字段):
1 id(自动赋值,整数,从1或0开始)
2 value(double浮点)
3 level
4 topic
5 content
6...(更新timestamp什么的)
由于时间太长了,我找不到当时的源代码,只能陈述一下思路:
1显示:
select * from table order by value就可以了。
因为在插入记录时,已经保证value控制记录的先后,就是说,即使122在13后才插入数据库,122对应的value值也小于13对应的value值。(122,13的位置见我第一次的答复)
由level来保证缩进:level=0就不缩进,level=1,在response.write前多写几个" "就是了,其他的以此类推。诸如分页之类的事就自己考虑了。
2插入记录
这里只叙述算法
要求插入记录时得到以下信息:
a.如果是新建论题,只要得到topic,content
insert into table(value,level,..) values(-1,0,...)
select id from table where value = -1
update table set value = "selected id" where id = "selected id"
b.如果是对论题(比如id=1000,value=1000.5,level=1) 的回复,得到id(=1000),value(=1000.5),topic,content
那么答复的newlevel=1,id由数据库自动管理,现在只要得到新的value就可以了。
求新value值:
I: 得到rs
rs的打开:sql = "select value,level from table where value >= "gotvalue(1000.5)"
II:
rs.movenext
dim value1,value2
value1 = rs("value")
value2 = id(=1000)
while rs("level") >= newlevel and not rs.eof
rs.movenext
value1 = rs("value")
wend
if not rs.eof then
value2 = rs("value")
else
value2 = value2 + 1
end if
newvalue=(value1 + value2)/2
-------------------------------------------
先试着去理解,如果有什么疑问再提出来。