回 帖 发 新 帖 刷新版面

主题:急急急...一个正在学ASP的菜鸟的问题

[em18]
 
[size=4]如何在留言本中实现在每个留言后点击"回复/查看回复"都可以回复这个留言,留言的内容在"回复/查看回复"这个页面,而且可以多个人留言,就好象一个论坛,点击每个主题进去后都可以回贴,不过不用注册也可以回复留言,请大家帮帮我 [/size]

回复列表 (共8个回复)

沙发

回复贴子可以单独的建一张表,主健设为留言ID,当点击一个留言的回复/查看回复时把留言显示在回复页,当用户进行回复时把留言ID和回复内容插到回复表中,可参考好多文章系统网站的文章评论.

板凳

"当用户进行回复时把留言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="提交留言" />&nbsp;&nbsp;&nbsp;&nbsp;
            <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 楼

下面是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 楼


你的问题出在现在还没有考虑好数据库中各个字段的关系,而且数据库表的名字也比较糟糕,

你的两个表:
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 楼

楼上的说的很明了,做asp主要就是思路清晰,请教问题并不是让人把源码都写出来,而是给你一个思路,然后你去研究把你没有想到的通过别人的思路用程序实现出来,这样才能让自己提高。

6 楼

谢谢两位的指点,我试试看

7 楼

还是不会

postid(说明这个回帖属于哪个主帖,这个是关键,否则没法判断是回的哪个帖,与post表中的id相对应)

这段话理解不了,postid怎样才能与post表的id相对应,请指教

8 楼

好了,终于做出来了

我来回复

您尚未登录,请登录后再回复。点此登录或注册