主题:急急急...一个正在学ASP的菜鸟的问题
youlong
[专家分:0] 发布于 2007-05-28 21:54:00
[em18]
[size=4]如何在留言本中实现在每个留言后点击"回复/查看回复"都可以回复这个留言,留言的内容在"回复/查看回复"这个页面,而且可以多个人留言,就好象一个论坛,点击每个主题进去后都可以回贴,不过不用注册也可以回复留言,请大家帮帮我 [/size]
回复列表 (共8个回复)
沙发
lrj525 [专家分:260] 发布于 2007-05-28 22:02:00
回复贴子可以单独的建一张表,主健设为留言ID,当点击一个留言的回复/查看回复时把留言显示在回复页,当用户进行回复时把留言ID和回复内容插到回复表中,可参考好多文章系统网站的文章评论.
板凳
youlong [专家分:0] 发布于 2007-05-28 22:55:00
"当用户进行回复时把留言ID和回复内容插到回复表中"
怎样插入,能具体说一下吗?
我建另外两张表,一张是存放留言的user表,另一张是存放回复的rever表
user表有id,name,content,time_us四个字段
rever表有r_id,r_name,r_content,time_as四个字段
可是回复留言的页面显示的是全部的回复内容,而不是只对某个留言的回复,请看看应该加点什么进去?
其中回复留言的页面check.asp的代码是这样的:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn.asp"-->
<%
id=request.QueryString("id")
set rs=server.CreateObject("adodb.recordset")
sql="select * from user where id="&id
rs.open sql,conn,1,1
%>
<html>
<body>
<table width="640" border="0" align="center" cellpadding="0" cellspacing="2" bgcolor="336600" >
<tr>
<td width="200" height="20" align="left" valign="middle" bgcolor="99FF99">留言人:<%=rs("name")%> </td>
<td width="300" align="center" valign="middle" bgcolor="99FF99">发表时间:<%=rs("time_us")%></td>
</tr>
<tr>
<td height="20" colspan="2" align="left" valign="top" bgcolor="99FF99"><br />
<%=rs("content")%></td>
</tr>
<%
dim rs,sql
set rs=server.CreateObject("adodb.recordset")
sql="select * from rever order by time_as desc"
rs.open sql,conn,1,1
%>
<%do while not rs.eof%>
<td width="200" height="20" align="left" valign="middle" bgcolor="99FF99">回复人:<%=rs("r_name")%> </td>
<td width="300" align="center" valign="middle" bgcolor="99FF99">回复时间:<%=rs("time_as")%></td>
</tr>
<tr>
<td height="20" colspan="2" align="left" valign="top" bgcolor="99FF99"><br />
<%=rs("r_content")%></td>
</tr>
<%
i=i+1
if i=rs.pagesize then exit do
rs.movenext '记录向下移动一行
loop
%>
</table>
<br>
<%
set rs=server.CreateObject("adodb.recordset")
sql="select * from user where id="&id
rs.open sql,conn,1,1
%>
<form id="form1" name="form1" method="post" action="re.asp?id=<%=id%>">
<table width="600" border="1" align="center" cellpadding="0" cellspacing="1" bgcolor="00ff00" bordercolor="#00FF00">
<tr>
<td align="center" colspan="2"><font size="+1" color="#FF0000"><b>回复<%=rs("name")%>的留言</b></font></td></tr>
<tr>
<td width="220" height="20" align="right" valign="middle" bgcolor="#99FF99">回复人姓名:</td>
<td width="380" align="left" valign="middle" bgcolor="#99FF99"><label>
<input name="r_name" type="text" class="box" id="r_name" size="30" />
</label></td>
</tr>
<tr>
<td height="20" align="right" valign="middle" bgcolor="#99FF99">回复内容:</td>
<td align="left" valign="middle" bgcolor="#99FF99"><label>
<textarea name="r_content" cols="50" rows="5" class="box" id="r_content"></textarea>
</label></td>
</tr>
<tr>
<td height="20" colspan="2" align="center" valign="middle" bgcolor="#99FF99"><label>
<input name="Submit" type="submit" class="box" value="提交留言" />
<input name="Submit2" type="reset" class="box" value="重新填写" />
</label></td>
</tr>
</table>
</form>
</body>
</html>
<%
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
3 楼
youlong [专家分:0] 发布于 2007-05-28 22:55:00
下面是re.asp的代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn.asp"-->
<%
set rs=server.CreateObject("adodb.recordset")
sql="select * from rever "
rs.open sql,conn,1,1
%>
<%
dim r_name,r_content
r_name = request.Form("r_name")
r_content = request.Form("r_content")
%>
<% '这段代码的作用是要求那些内容是必须填写的,也就是判断是否为空
'判断姓名是否为空
if r_name="" then response.write "<script language=javascript>" response.write "alert('请填写姓名');" response.write "javascript:history.go(-1);" response.write "</script>"
response.End()
else r_name=r_name
end if
'判断留言内容是否为空
if r_content="" then
response.write "<script language=javascript>"
response.write "alert('请填写回复内容');"
response.write "javascript:history.go(-1);"
response.write "</script>"
response.End()
else
r_content=r_content
end if
<%
dim rs,sql
set rs=server.CreateObject("adodb.recordset")
sql="select * from rever"
rs.open sql,conn,3,3 %>
<% '这段代码是把读取过来的内容,都赋值给数据表里的相应字段
rs.addnew
rs("r_name")=r_name
rs("r_content")=r_content
rs("time_as")=now()
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
response.write"<script language=javascript>"
response.write"alert('恭喜您!回复成功!');"
response.write"javascript:location='index.asp';"
response.write"</script>"
%>
下面是conn.asp文件代码:
<%
dim conn
set conn=server.CreateObject("adodb.connection") conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("data/mybook.mdb")
%>
4 楼
ir77 [专家分:570] 发布于 2007-05-28 23:33:00
你的问题出在现在还没有考虑好数据库中各个字段的关系,而且数据库表的名字也比较糟糕,
你的两个表:
user表有id,name,content,time_us四个字段
rever表有r_id,r_name,r_content,time_as四个字段
,建议改成如下
post表(主帖,有以下字段):
id(主帖的编号,可以用数据库自动编号的功能,这个编号是唯一的,以后对帖子进行操作就靠这个,比如删除,加分等)
title(题目)
content(内容)
posttime(发帖时间)
lastreposttime(最新的回帖时间,有这个时间后,比较容易实现论坛的那种按回帖时间对帖子进行排序的功能)
author(作者)
repose表(回帖):
id(回帖的编号,可以用数据库自动编号的功能)
content(内容)
posttime(发帖时间)
postid(说明这个回帖属于哪个主帖,这个是关键,否则没法判断是回的哪个帖,与post表中的id相对应)
author(如果你的回帖不需要作者,那这个可以不要)
数据库表的内容就这些,然后理顺关系:
对于主帖(postindex.asp)
sql="select * from post order by lastreposttime"
(选择所有的帖子,按照最后回帖的时间排序,这个用于显示所有的主帖)
<a href="postdisplay?id=<%=rs("id")%>" ><%=rs("title")%></a>
用这个来进入具体的某个帖子
下面是显示相应的帖子的页面(postdisplay.asp):
id=request.QueryString("id")
(获得所要显示的帖子的id)
sql="select * from post where id='"&id&"'"
(从数据库中找出id号码相对应的主帖)
后面就是显示主帖的代码
显示回帖如下:
sql="select * from repost where postid='"&id&"' order by posttime"
(选出所有针对该主帖的回帖,按回帖的时间排序)
这个就是主要的思路的,我只写主要的,其他的你自己考虑一下吧
5 楼
lrj525 [专家分:260] 发布于 2007-05-29 10:28:00
楼上的说的很明了,做asp主要就是思路清晰,请教问题并不是让人把源码都写出来,而是给你一个思路,然后你去研究把你没有想到的通过别人的思路用程序实现出来,这样才能让自己提高。
6 楼
youlong [专家分:0] 发布于 2007-05-29 14:32:00
谢谢两位的指点,我试试看
7 楼
youlong [专家分:0] 发布于 2007-05-30 14:15:00
还是不会
postid(说明这个回帖属于哪个主帖,这个是关键,否则没法判断是回的哪个帖,与post表中的id相对应)
这段话理解不了,postid怎样才能与post表的id相对应,请指教
8 楼
youlong [专家分:0] 发布于 2007-05-30 20:16:00
好了,终于做出来了
我来回复