| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1574 人关注过本帖
标题:不好意思!总是麻烦大家!
只看楼主 加入收藏
hell
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2004-6-3
收藏
 问题点数:0 回复次数:14 
不好意思!总是麻烦大家!
我做的一个练习:通过数据库实现简单的聊天室功能!
还有最后一点问题请教各位朋友!
当用户用呢称(nickname)登录后将nickname写入一个Seiion变量.
如:session("nickname")=nickname 并将nickname写入在线表online及聊天内
容表中,现在我想在用户离线后利用Session_OnEnd事件从在线用户表(online)
中删除该用户呢称:于是将其写入global.asa文件,并将该文件保存在我的WEB
站点根目录下(不知这样对吗?我的chat程序在根目录的更下级目录中):
global.asa代码如下:
--------------------------------------------------------------
<Script language=VBScript runat=server>
Sub Session_OnEnd()
  dim nickname
  nickname=session("nickname")
  set conn=server.createobject("adodb.connection")
  dbpath=server.mappath("img\chatroom.mdb")
  conn.open "provider=microsoft.jet.oledb.4.0;data source="&dbpath
  set rs=server.createobject("adodb.recordset")
  sqlstr="delete from online where 呢称='"&nickname&"'"
  rs.open sqlstr,conn
  session("nickname")=""
  session.abandon
End Sub
</Script>
--------------------------------------------------------------
不知错在哪里了,并不能实现用户下线(或关闭IE一次)时删除online表中
他呢称的效果,即所有登入聊天室的呢称都一直存在,程序应该没问题(我
存到另外文件中试过了),不知问题出在什么地方了!小弟初学!对ASP知
之甚少,请各位哥哥姐姐弟弟妹妹看年问题出在什么地方了!
小菜先谢谢大家!给大家鞠个躬先!!!
搜索更多相关主题的帖子: 麻烦 
2004-06-22 22:58
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2004-3-30
收藏
得分:0 
把整个聊天室的程序发布上来行吗,我调试调试

在风中迷茫的男孩
2004-06-23 00:56
hell
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2004-6-3
收藏
得分:0 

发上来可以!很烂的噢!大家不许笑噢!


2004-06-23 11:20
belin2000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:975
专家分:194
注 册:2004-6-2
收藏
得分:0 

谁没有做过新手?


59ita点com(我就爱TA)
2004-06-23 12:06
hell
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2004-6-3
收藏
得分:0 
=============那我贴了:请大家帮忙看看在哪里,谢谢!================
这是一个很简单的聊天室练习,主要特征就是提供实时更新的数据库信息:更新采用浏览器每隔一段
时间(我设为4S)刷新一次页面的简单办法来实现
聊天室共用到7段简单的小代码:
(1)chatroom.mdb   :整个聊天室的数据库(有两个表:chat表存储聊天信息,online表存储在线名单)
(2)default.asp    :输入呢称登录页面
(3)chat.asp       :整个聊天室的框架页面
(4)display.asp    :即时显示用户聊天信息的框架
(5)online.asp     :显示在线用户的框架
(6)talk.asp       :用户输入聊天内容的框架
(7)talkinsert.asp :处理用户聊天话语,把每个话语插入数据库中
另加一个global.asa  :用于当用户下线时触发其中的session_onend事件,以在online表中删除其呢称。

=====================<1>default.asp=========================
<%
session("isconnected")=true
%>
<html>
<title>==聊天练习程序--登录窗口==</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
</head>
<body>
<form method="post"  action="chat.asp" name="chatform">
输入你的呢称:<input type=text name="nickname" size=20>  
<input type=submit name=button value=进入聊天室>
</form>
</body>
</html>

[此贴子已经被作者于2004-06-23 12:24:47编辑过]



2004-06-23 12:10
hell
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2004-6-3
收藏
得分:0 

===========================<2>chat.asp:================================ <% '过滤用户输入的呢称 function sqlstr(data) sqlstr="'"&replace(data,"'","''")&"'" end function '判断用户是否经过登录页面 if isempty(session("isconnected")) then response.redirect "default.asp" response.end end if '获取nickname nickname=trim(request("nickname")) if nickname="" then response.write "呢称不能为空!请<a href=default.asp><font color=red>返回</font></a>重新输入呢称!" response.end end if '判断数据库中是否存在同样呢称的用户,并且该用户正在线上 dim conn,dbpath on error resume next set conn=server.createobject("adodb.connection") dbpath=server.mappath("img\chatroom.mdb") conn.open "provider=microsoft.jet.oledb.4.0;data source="&dbpath set rs=server.createobject("adodb.recordset") 'sqlstring="select * from online where 姓名='"&nickname&"'" '这里去死吧 sqlstring="select * from online where 姓名="&sqlstr(nickname) rs.open sqlstring,conn if not rs.eof then response.write "你选择的呢称已被使用!请<a href=default.asp><font color=red>返回</font></a>更换呢称然后再次进入!" response.end end if '关闭rs rs.close set rs=nothing set rs=server.createobject("adodb.recordset") sqlstr1="insert into online(姓名) values('"&nickname&"')" '把该用户的呢称插入online表中 application.lock rs.open sqlstr1,conn application.unlock rs.close conn.close set rs=nothing set conn=nothing '将用户存入一个session变量中 session("nickname")=nickname %> <!--页面框架--> <html> <head><title>★★★聊天室练习★★★</title> <meta http-equiv="content-type" content="text/html;charset=gb2312"> </head> <frameset rows="*,80" frameborder="yes" border=0 framespacing="0"> <frameset cols="*,201" frameborder="yes" border=0 framespacing="0"> <frame name="mainframe" src="display.asp" scrolling="yes"> <frame name="rightframe" src="online.asp" scrolling="no" noresize> </frameset> <frame name="bottomframe" scrolling="no" noresize src="talk.asp"> </frameset> <noframes> <body gbcolor="#ffffff" text="#000000">你的浏览器不支持框架!</body> </noframes> </html>

[此贴子已经被作者于2004-06-23 12:18:49编辑过]


2004-06-23 12:16
hell
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2004-6-3
收藏
得分:0 

==================<3>talk.asp============================== <html><head> <title>==发言窗口==</title> <meta http-equiv="content-type" content="text/html;charset=gb2312"> </head> <body bgcolor="navyblue" text="#000000" leftmargin=100> <form name="talk" method="post" action="talkinsert.asp"> <input type="text" name="content" size=80 maxlength=40> <input type="hidden" name="whotalk" value=<%=session("nickname")%>>&nbsp; <input type="submit" name="submit" value="发&nbsp;言"> </form> </body> </html> =======================<4>talkinsert.asp========================== <% dim content content=trim(request.form("content")) '如果发言不为空再执行操作 if content<>"" then nickname=trim(request.form("whotalk")) '获取讲话人呢称 set conn=server.createobject("adodb.connection") dbpath=server.mappath("img\chatroom.mdb") conn.open "provider=microsoft.jet.oledb.4.0;data source="&dbpath set rs=server.createobject("adodb.recordset") sqlstr="insert into chat(姓名,内容) values('"&nickname&"','"&content&"')" '将该用户的发言插入到chat表中: application.lock rs.open sqlstr,conn application.unlock end if response.redirect "talk.asp" %> =======================<5>online.asp============================= <html> <head> <title>==在线人员==</title> </head> <body bgcolor=lavender> <br><br>

<% dim conn,dbpath dbpath=server.mappath("img\chatroom.mdb") set conn=server.createobject("adodb.connection") conn.open "provider=microsoft.jet.oledb.4.0;data source="&dbpath set rs=server.createobject("adodb.recordset") sqlstr="select * from online" rs.open sqlstr,conn,3,3 rs.movefirst count=rs.recordcount %> <font color=red face=幼圆>当前在线[共<font color=blue><%=count%></font>人]:</font><div align=left><hr color=blue size=5 width=130></div> <% while not rs.eof response.write "&nbsp;<font color=blue>"&rs("姓名")&"</font><br>" rs.movenext wend set rs=nothing %> </body> </html>


2004-06-23 12:20
hell
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2004-6-3
收藏
得分:0 

===========================<6>display.asp=========================== <html><head> <title>聊天内容窗口</title> <meta http-equiv="content-type" content="text/html;charset=gb2312"> <meta http-equiv="refresh" content="3";url="<%=request.servervariables("path_info")%>"> </head> <body background="img\bg04.gif" bgproperties="fixed" text="#000000" leftmargin=10> <font color=blue face=幼圆 size=4><font color=red>★</font>聊天室小程序</font> <hr size=3 color=blue>

<% set conn=server.createobject("adodb.connection") dbpath=server.mappath("img\chatroom.mdb") conn.open "provider=microsoft.jet.oledb.4.0;data source="&dbpath set rs=server.createobject("adodb.recordset") sqlstr="select top 20 * from chat order by 时间 desc" rs.open sqlstr,conn

do while not rs.eof response.write rs("时间")&"[<font color=red>"&rs("姓名")&"</font>说:]" response.write "&nbsp;"&rs("内容")&"<br>" rs.movenext loop response.write "<br>"

set rs=nothing %> </body> </html> ===========================<7>global.asa======================== <Script language=VBScript runat=server> Sub Session_OnEnd() dim nickname nickname=session("nickname") set conn=server.createobject("adodb.connection") dbpath=server.mappath("img\chatroom.mdb") conn.open "provider=microsoft.jet.oledb.4.0;data source="&dbpath 'dbpath="d:\hell\asp\chat\img\chatroom.mdb" 'conn.open "provider=microsoft.jet.oledb.4.0;data source='"&dbpath&"'" set rs=server.createobject("adodb.recordset") sqlstr="delete from online where 姓名='"&nickname&"'" rs.open sqlstr,conn session("nickname")="" session.abandon End Sub </Script> ------------------------------------------------------------------------------------------------ 现在的主要问题是:当每个用户下线后,无法在online表中删除其呢称 global.asa程序应该没什么问题(我copy在别的文件中测试过了,可以达到删除呢称的效效果) 所以我感觉是在用户下线后session_onend事件并没有执行 搞了一天了,实在不懂什么原因! 请大家看看:谢谢大家!!!


2004-06-23 12:24
regedit
Rank: 5Rank: 5
等 级:贵宾
威 望:19
帖 子:950
专家分:0
注 册:2004-6-8
收藏
得分:0 

你说的下线是指用户按了“退出”后,还是关掉IE???

如果是第一种情况的话就应该设一个退出按扭,使session("nickname")=""

这样子就可以啦!!!


最新作品:百货品牌商品资讯第一门户([url]http://www./[/url]),欢迎交流
2004-06-23 12:31
hell
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2004-6-3
收藏
得分:0 

应该是关闭IE或关闭聊天室所在站点吧(也就是所谓的结束一次会话). 因为人们好像没有先点退出按钮再关闭聊天室的习惯吧 如果是这样,该怎么实现呢? Session_OnEnd事件不是当用户退出网站或本次会话超时时触发的吗? 还是这里的Session_OnEnd放的不是地方?请大家看看啊?


2004-06-23 12:41
快速回复:不好意思!总是麻烦大家!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027717 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved