der sql-code sieht so aus:
jedesmal, wenn die daten aus der datenbank gelesen wurde, wird die variable
session(loginZeit) auf now gesetzt. alles, was seit dem in die db
geschrieben wurde, ist als neu anzusehen...
das updaten des chat geschieht in einem versteckten frame...
hier nun der gesamte CODE:
<% @LANGUAGE=VBSCRIPT %>
<% Response.Buffer = true
If (Session("loggedIn") <> "loggedIn") then
Response.Clear
response.redirect("chatroom_logout.asp")
else
function SQLString( stri )
Dim neu
Dim neu2
if len(stri) = 0 or isnull(stri) then
SQLString = "NULL"
exit function
end if
neu = replace( stri, """", "\""" )
SQLString = neu
end function
Response.Expires=0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control", "no-store"
Response.Buffer = true
user = Session("name")
logintime = Session("loginZeit")
'DateAdd("s", -1, Session("loginZeit"))
empfaenger = "alle"
newdate = month(logintime) & "/" & day(logintime) & "/" & year(logintime) &
" " & hour(logintime) & ":" & minute(logintime)& ":" & second(logintime)
set conn=Server.CreateObject("adodb.connection")
cnpath="DBQ=" & server.mappath("../cgi-bin/chat.mdb")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
sql = "SELECT * FROM chatdialog WHERE (sender = '"&user&"' OR (empfaenger =
'"&empfaenger&"' OR empfaenger = '"&user&"')) AND datum >= #" & newdate & "#
ORDER BY datum DESC"
set RS = conn.Execute(sql)
sql = "SELECT * FROM loggedIn ORDER BY name"
set RSLoggedIn = conn.Execute(sql)
' Ueberpruefen, ob Admin eingeloggt ist
sql = "SELECT * FROM admin"
set RS4 = conn.Execute(sql)
if(NOT rs4.EOF) then
Session("AdminOn") = true
else
Session("AdminOn") = false
end if
RS4.close
if (Session("FramesLoaded")>=4) then
Session("loginZeit") = now
end if
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
<!--
function update()
{
top.ChatRoomFrame.chatFrame.document.write("<font face=\"Tahoma\"
size=2>");
top.ChatRoomFrame.chatFrame.document.write("<%
if(NOT rs.EOF) then
do while (NOT rs.EOF)
inhalt = rs.fields.item("inhalt")
output = output&"<BR>"&rs.fields.item("sender")&"(an:
"&rs.fields.item("empfaenger")&"): "&SQLString(inhalt)
rs.movenext
loop
rs.close
response.write(output)
end if
%>");
top.ChatRoomFrame.chatFrame.document.write("</font>");
while(top.ChatRoomFrame.howisinFrame.document.getElementsByName("chatters")[
0].length)
{
d =
top.ChatRoomFrame.howisinFrame.document.getElementsByName("chatters")[0].len
gth - 1;
top.ChatRoomFrame.howisinFrame.document.getElementsByName("chatters")[0].rem
ove(d);
}
<% do while (NOT RSloggedIn.EOF) %>
var position =
top.ChatRoomFrame.howisinFrame.document.getElementsByName("chatters")[0].len
gth;
var Eintrag =
top.ChatRoomFrame.howisinFrame.document.createElement("option");
Eintrag.text = "<% = RSloggedIn.fields.item("name") %>";
Eintrag.value = "<% = RSloggedIn.fields.item("name") %>";
top.ChatRoomFrame.howisinFrame.document.getElementsByName("chatters")[0].add
(Eintrag,position);
<%
RSloggedIn.moveNext
loop
%>
}
//-->
</script>
</head>
<body bgcolor="#FF9900" onload="<% if (Session("FramesLoaded")>=4) then
%>javascript:update();<% end if
%>window.setInterval('window.location.reload()',5000)">
<div align="right">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="59%"><font face="Arial, Helvetica, sans-serif"><b><font
color="#3366FF"><i>JUNGE
KUECHE CHAT</i></font></b></font></td>
<td width="41%">
<div align="right"><font face="Tahoma" size="2"><b><font
color="#3366FF" face="Arial, Helvetica, sans-serif">Uwe
Zimmer ist zur Zeit:<%if(Session("AdminOn")) then %> online.<%
else %>
offline.<%end if%></font></b></font></div>
</td>
</tr>
</table>
</div>
</body>
</html>
<% end if %>
----- Original Message -----
From: "Claudius Ceteras" <[EMAIL PROTECTED]>
To: "AspGerman Kaffeehaus" <[EMAIL PROTECTED]>
Sent: Thursday, August 29, 2002 2:23 PM
Subject: [aspdecoffeehouse] RE: doppelte ausgabe...
Du hast nicht Dein SQL gepostet... Woher merkst Du was f�r den
jeweiligen Chatter neu ist?
Wieso definierst Du eine Funktion und schreibst den update-code nicht
direkt in den script-block?
Wo wird diese funktion aufgerufen? Kann es sein, dass die alte funktion
aufgerufen wird, falls die neue noch nicht ganz da ist beim aufruf?
Claudius
>
> ich habe einen chat programmiert, der alle 5 sekunden aus
> einer datenbank
> den dialog ausliest und die neusten eintr�ge mit
> document.write in eine html
> seite schreibt.
> allerdings passiert es ab und zu- und deswegen kann ich es
> mir auch nicht
> erkl�ren, dass einige datens�tze zweimal geschrieben werden.
> ich habe mir mal die datenbank runtergeladen und dort sind
> die eintr�ge nur
> einmal vorhanden.
> es muss also beim auslesen geschehen...
> hat jemand eine idee ??? code ist folgender:
>
> <script language="JavaScript">
> <!--
>
> function update()
> {
> top.ChatRoomFrame.chatFrame.document.write("<font face=\"Tahoma\"
> size=2>");
> top.ChatRoomFrame.chatFrame.document.write("<%
> if(NOT rs.EOF) then
>
> do while (NOT rs.EOF)
> inhalt = rs.fields.item("inhalt")
> output = output&"<BR>"&rs.fields.item("sender")&"(an:
> "&rs.fields.item("empfaenger")&"): "&SQLString(inhalt)
>
> rs.movenext
> loop
> rs.close
> response.write(output)
>
> end if
> %>");
> top.ChatRoomFrame.chatFrame.document.write("</font>");
>
| [aspdecoffeehouse] als [EMAIL PROTECTED] subscribed
| http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.asp
| [aspdecoffeehouse] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.asp