用PHP+MySql编写聊天室

大家好!好久没有看到大家了,上次写了用PHP的通过文件操作的聊天室,当然是漏洞百出的,而且每一次刷新屏幕都很糟糕的!我想了好久,是不是能有一种方法不要刷新,就能取得发言的信息了?多用一个框架就能实现这个效果了,即多用一个框架我们称为getmsg,我们让getmeg去取得信息而且保证每一次取得的信息是最新的,就是上次取得的发言就不要了,上次我编的就是每一次取得信息都是重复的,这样效果不好。
我的设计思想是:每一次发言,都把它提交到服务器上,然后保存到一个数据库里,每格几秒钟getmsg就去服务器上取得
最新发言数据,并保证上次取得的发言就不要取下来了,然后把取下来的发言叠加到一个专门显示发言的窗口(listmsg)去。这样我们就感觉listmsg窗口不会有重刷新的感觉而且,只是看到发言信息不断加进去,这样就有很好的效果,
怎样在一个框架把信息加到另个框架去了?用JavaScript就可以实现这个想法的:
script language=JavaScript !– var win=parent.frames[0]
//第一个框架即在文档中第一次出现的frame var doc=win.document //获取文档
doc.write(发言信息)//这样就可以把信息加到另个frame里去了! — /script
当然你得在mysql里建两个表,一个表用于保存发言信息,一个表用于保存几个在线的,在列在线人数时,我们让它每个60秒刷新一次,并把一分钟以前的发言删掉,并看某个发言人是不是很长时间没发言了,是的话,就删掉他,
由于表的子段很简单,在这里就不要写出来了,看程序就会知道了。这个程序在网上网下测试的效果都很好!
表的名字是:chat和chat_getmsg !–主框架chat.php– ?PHP
if(!isset($username))$username=guest;
$conid=mysql_connect(localhost,yourcounter,password);
mysql_select_db(yourdadabase,$conid); $dstr=date(YmdHis); $sql=insert
chat_getmsg (username,shijian) values (‘$username’,’$dstr’);
mysql_query($sql,$conid); $sql=update chat_getmsg set shijian=’$dstr’
where username=’$username’; mysql_query($sql,$conid);
mysql_close($conid); ? html head titleUntitled Document/title meta
content=text/html; charset=gb2312 /head frameset rows=283,105
frameborder=YES border=1 framespacing=0 cols=*frameset cols=520,113
frameborder=yes border=1 framespacing=0 rows=*frame name=topFrame
scrolling=auto border=1 noresize src=list.html frame name=rightFrame
scrolling=auto border=1 noresize src=username.php /frameset frameset
rows=17,90 frameborder=yes border=1 framespacing=0 cols=*?PHP echo
frame name=topFrame1 scrolling=NO border=1 noresize
src=getmsg1.php?username=$usernamen; ? ?PHP echo frame name=bottomFrame
scrolling=NO border=1 noresize src=fayan.php?username=$usernamen; ?
/frameset /frameset noframesbody bgcolor=#FFFFFF /body/noframes /html
!–发言fayan.php — ?php if(!isset($username)) $username=guest;
if(!isset($yanse)) $yanse=blue; if(!isset($objectname))
$objectname=大家; ? html head titleUntitled Document/title meta
content=text/html; charset=gb2312 style type=text/css !– .normalfont
{font-family: 宋体; font-size: 10pt; font-weight: 800; color: #99FF33;
height: auto; width: auto; left: 0px; top: 0px; clip:rect()} — /style
/head body bgcolor=#ff3333 form method=post name=fayanform action=?PHP
echo fayan.php?username=$username&yanse=$yanse&objectname=$objectname ;?
class=normalfont table width=100% border=0 cellspacing=0 cellpadding=0
class=normalfont trtd width=17%height=22 颜色:select id=yanse name=yanse
option value=blue ?PHP if($yanse==blue) echo SELECTED;? Blueoption
value=red?PHP if($yanse==red) echo SELECTED;? red option value=green
?PHP if($yanse==green) echo SELECTED;?green option value=yellow ?PHP
if($yanse==yellow) echo SELECTED;? yellow option value=brown ?PHP
if($yanse==brown) echo SELECTED;? brown option value=#ff00ff ?PHP
if($yanse==#ff00ff) echo SELECTED;? ff00ff option value=#bb00ff ?PHP
if($yanse==#bb00ff) echo SELECTED;? bb00ff option value=#cc00ff ?PHP
if($yanse==#cc00ff) echo SELECTED;? cc00ff option value=#aa00ff ?PHP
if($yanse==#aa00ff) echo SELECTED;? aa00ff option value=#6600ff ?PHP
if($yanse==#6600ff) echo SELECTED;? 6600ff option value=#7700ff ?PHP
if($yanse==#7700ff) echo SELECTED;? 7700ff option value=#1100ff ?PHP
if($yanse==#1100ff) echo SELECTED;? 1100ff option value=#11ffff ?PHP
if($yanse==#11ffff) echo SELECTED;? 11ffff option value=#11aaff ?PHP
if($yanse==#11aaff) echo SELECTED;? 11aaff option value=#1199ff ?PHP
if($yanse==#1199ff) echo SELECTED;? 1199ff option value=#1133ff ?PHP
if($yanse==#1133ff) echo SELECTED;? 1133ff /select /td td
width=55%height=22 class=normalfont发言:input type=text name=fayan
size=35 input type=hidden name=username value=?PHP echo $username; ?
input type=Button name=Button value=发言 onclick=submitfayan() /td td
width=28%height=22 /td /tr trtd width=17% height=20对象: input type=text
name=objectname size=10 value=?PHP echo $objectname;? /td td
width=55%height=20 class=normalfonta href=回去/a /td td width=28%
height=20 class=normalfont /td /tr /table /form /body Script
language=JavaScript !– fayanform.fayan.focus() function submitfayan() {
if(fayanform.fayan.value!=) fayanform.submit() else alert(不能发空信息)
fayanform.fayan.focus() } — /script /html ?PHP
if(isset($username)&&isset($fayan)){
$conid=mysql_connect(localhost,yourcount,yourpassword);
mysql_select_db(database,$conid); $sql=insert chat
(username,objectname,action,msg,color) values
($username,$objectname,NO,$fayan,$yanse); mysql_query($sql,$conid);
mysql_close($conid); } ? !–获取发言信息getmsg.php– html head
titleUntitled Document/title meta content=text/html; charset=gb2312
?PHP$conid=mysql_pconnect(localhost,yourcount,password);
mysql_select_db(database,$conid); if(!isset($username))
$username=getmsg;$dt=time();$newdate=date(YmdHis,$dt);
$fromdate=date(YmdHis,$dt-6);; $sql=select username as
name,msg,action,objectname ,shijian,color from chat where
shijian=$fromdate; $res=mysql_query($sql,$conid); echo meta
content=6,url=getmsg.php?username=$username n; echo /headn; echo script
language=JavaScriptn; echo !–n; echo var win=parent.frames[0]n; echo
var doc=win.documentn; echo var divlin=doc.body.all(lin)n;
while(list($name,$msg,$action,$objectname,$shijian,$color)=mysql_fetch_row($res))
{ if($objectname!=大家||$objectname) $object=对 a
href=JavaScript:selectusername(‘$objectname’)$objectname/a ;
echodivlin.innerHTML=divlin.innerHTML+font color=$color size=3a
href=JavaScript:selectusername(‘$name’)$name/a $object 说: $msg
/fontbrn; } echo win.scrollBy(6000,6000)n; echo –n; echo /scriptn; ?
body bgcolor=#333333 /body /html !–欢迎词getmsg1.php — html head
titleUntitled Document/title meta content=text/html; charset=gb2312
?PHPif(!isset($username)) $username=guest; echo meta
content=6;url=getmsg.php?username=$username n; echo /headn; echo script
language=JavaScriptn; echo !–hiden; echo var win=parent.frames[0]n;
echo var doc=win.documentn; echo var divlin=doc.body.all(lin)n; echo
divlin.innerHTML= font color=blueb欢迎 $username 的光临/b/fontbrn; echo
–n; echo /scriptn; ? body bgcolor=#333333 /body /html
!–显示发言list.html– html head titleUntitled Document/title meta
content=text/html; charset=gb2312 style type=text/css !– .lin
{font-size: 10pt; color: #FF6633} — /style /head body bgcolor=#FFFFFF
center div color=blue font color=white size=6b 欢迎光临/b /marquee /div
/center div id=lin class=lin/div /body Script language=JavaScript !–
function selectusername(str) { var win=parent.frames[3] var
doc=win.document var form1=doc.body.all(fayanform)
form1.objectname.value=str } — /script /html !–罗列在线人数– html
head titleUntitled Document/title meta content=text/html; charset=gb2312
meta content=60 style type=text/css !– .lin {font-size: 10pt; color:
#ff0066} — /style /head body bgcolor=#33ff00 center class=linb
在线人数 /b hr ?PHP if(!isset($username)) $username=guest;
$dt=time();$newdate=date(YmdHis,$dt); $fromdate=date(YmdHis,$dt-200);
$linkid=mysql_connect(localhost,yourcount,password);
mysql_select_db(yourdatabase,$linkid); $sql=update chat_getmsg set
shijian=$newdate where username=$username; mysql_query($sql,$linkid);
$sql=select username from chat_getmsg where shijian=$fromdate;
$res=mysql_query($sql,$linkid);
while(list($username)=mysql_fetch_row($res)){ echo a
href=JavaScript:selectusername(‘$username’)$username/abrn;
$fromdate=date(YmdHis,$dt-100); $sql=delete from chat where
shijian=$fromdate; mysql_query($sql,$linkid); mysql_close($linkid); }
? /center Script language=JavaScript !– function selectusername(str) {
var win=parent.frames[3] var doc=win.document var
form1=doc.body.all(fayanform) form1.objectname.value=str } — /script
/body /html

1.guestbook.php html head script language=JavaScript !– !– var
hellotext=为了您的最佳浏览效果请您使用IE4.0以上的版本和800*600分辨率
var thetext= var started=false var step=0 var times=1 function
welcometext() { times– if (times==0) { if (started==false) { started =
true; window.status = hellotext; setTimeout(anim(),1); } thetext =
hellotext; } } function showstatustext(txt) { thetext = txt;
setTimeout(welcometext(),4000) times++ } function anim() { step++ if
(step==7) {step=1} if (step==1) {window.status=’===’+thetext+’===’} if
(step==2) {window.status=’===’+thetext+’===’} if (step==3)
{window.status=’==’+thetext+’==’} if (step==4)
{window.status=’==’+thetext+’==’} if (step==5)
{window.status=’===’+thetext+’===’} if (step==6)
{window.status=’===’+thetext+’===’} setTimeout(anim(),200); } // —
welcometext(); function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+.location=’+selObj.options[selObj.selectedIndex].value+’);
if (restore) selObj.selectedIndex=0; } //– /script
title天地网络留言版/title meta content=text/html; charset=gb2312 /head
style type=text/css !– a:link {font-size: 9pt; color: #FFFFFF} —
/style body ? $PAGESIZE=5; $db=mysql_connect(localhost,root,);
mysql_select_db(lyanban,$db); $result=mysql_query(SELECT * FROM
message order by date desc,$db); $rowcount=mysql_num_rows($result);
$PAGES=CEIL($rowcount/$PAGESIZE); if($rowcount==0) {echo 目前没有留言!a
href=guestbook.htm欢迎您留言!/a;} if($rownum == ) { $rownum = 1; }
$AA=CEIL($rownum/5); $i=0 ; echo TABLE WIDTH=100%tddiv font size=2
color=#000000B共有留言:$rowcount 条共:$PAGES 页right现在是第 $AA
页/right/B/font/div/td; echo hr size=1 color=#ccccffwidth=75%; while
($myrow=mysql_fetch_array($result)){ $i++;
if(($i=$rownum)&&($i$rownum+5)){ echo table width=75% border=1
cellspacing=0 cellpadding=0 bordercolordark=#FFFFFF
bordercolorlight=#000000 background=15.JPG; echo trtd width=15%div font
size=2 color=#FFFFFF姓 名/font/div/tdtd width=85%font size=2
color=#FFFFFF$myrow[username]/font/td/tr; echo trtd width=15%div font
size=2 color=#FFFFFF电子信箱/font/div/tdtd width=85%font size=2
color=#FFFFFFa href=mailto:$myrow[email]$myrow[email]/font/a/td/tr;
echo trtd width=15%div font size=2 color=#FFFFFF公司主页/font/div/tdtd
width=85%font size=2 color=#FFFFFFa href=$myrow[homepage]
target=_blank$myrow[homepage]/font/a/td/tr; echo trtd width=15%div
font size=2 color=#FFFFFF留言主题/font/div/tdtd width=85%font size=2
color=#FFFFFF$myrow[topic]/font/td/tr; echo trtd width=15%div font
size=2 color=#FFFFFF留言内容/font/div/tdtd width=85%font size=2
color=#FFFFFF$myrow[content]/font/td/tr; echo trtd width=15%div font
size=2 color=#FFFFFF留言时间/font/div/tdtd width=85%font size=2
color=#FFFFFF$myrow[date]/font/td/tr; echo /tablehr size=1
color=#ccccffwidth=75%;} } echo table width=100%trtd width=87%;
#判断是否有或 echo form name=hiddenform method=post
action=guestbook.php; echo div input type=hidden name=rownum value=;
echo input type=hidden name=rowcount value=$rowcount; #显示 if
($rownum=5) echo input type=submit value=
onclick=document.hiddenform.rownum.value=.($rownum-5).; #显示 if
($rownum+5=$rowcount) { echo input type=submit value=
onclick=document.hiddenform.rownum.value=.($rownum+5)./div; } echo
/form; echo /td; echo /tr; echo /table; echo table width=100% trtddiv
font color=#ffffff size=2a
href=guestbook.htm返回继续发言/a/font/div/td/tr/table; ? /body /html
2.show.php3 ? $username = htmlspecialchars(ltrim(stripslashes
(trim($name))));//本函式可去掉字串中的反斜线空格字元 $email =
htmlspecialchars(ltrim(stripslashes (trim($email)))); $homepage =
htmlspecialchars(ltrim(stripslashes (trim($homepage)))); $topic =
htmlspecialchars(ltrim(stripslashes (trim($topic)))); $content =
htmlspecialchars(ltrim(stripslashes (trim($content)))); //
$content=base64_encode($content); //send email //if ($ok)
mail($email,$topic,$content); if
(($username==)or($topic==)or(strlen($username)20)or(strlen($topic)20))
{echo 请填写必要的项目或着非法用户名!a
href=javascript:history.go(-1);返回/a; } //wrong email ? elseif
(($email!=)and(!eregi(^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$,$email)))
{ echo 请您填写正确的 E-Mail 地址/pp a
href=javascript:history.go(-1);返回/a; } //wrong homepage ? elseif
(($homepage!=)and(!eregi(()+[0-9a-z-]+.([0-9a-z-]+.)+[a-z]{2,3}$,$homepage)))
{echo 主页地址输入错误!a href=javascript:history.go(-1);返回/a;} else{
//联接数据库 mysql_connect(localhost,root,);
mysql_select_db(lyanban); $sql=select password from tb where
username=’$username’; $result=mysql_query($sql);
$nums=mysql_num_rows($result); if($nums!=1){ echo对不起!请先a
href=register.html注册/a!; } else{ //得到日期 YYYY-MM-DD HH:MM:SS
2000-01-01 00:00:00′ $t = date(Y.-.m.-.d. .H.:.i.:.s);
//将新用户插入数据库 mysql_query(insert into message values
(‘$username’,’$email’,’$homepage’,’$topic’,’$content’,’$t’)); echo div
font size=2 color=#000000谢谢您留言!您的留言已成功加入,a
href=guestbook.php返回/a/font/div; } } ? 3.zhuc.php(注册程序) ?
mysql_connect(localhost,root,) or die(无法连接数据库,请重试);
mysql_select_db(lyanban) or die(无法选择数据库,请重试); $query=select
password from tb where username=’$username’;
$result=mysql_query($query); $numrows=mysql_num_rows($result);
if($numrows!=0) {echo ‘已有人注册此名,请重新选择名字!a
href=javascript:history.go(-1);返回/a’;} else {$query=insert into
tb(username,password) values(‘$username’,’$password’);
mysql_query($query); echo ‘注册成功’; echo ‘A HREF=guestbook.htm
请登录!/A’;} ? 以下是两个配套的HTML: 1。留言网页 html head meta
content=text/html; charset=gb2312 meta name=GENERATOR content=Microsoft
FrontPage 4.0 meta name=ProgId content=FrontPage.Editor.Document
title天地网络留言版欢迎您留言!/title /head body bgcolor=#FFFFFF div
align=center center br font size=2天地网络留言版测试版/fontbr br form
method=post action=show.php3 table width=66% tr td width=50% height=1
div align=center font size=2 您的尊姓大名:/font/div /td td width=50%
height=1 div align=center input type=text name=name size=20 /div /td /tr
tr td width=50% height=1 div align=centerfont size=2
您的电子邮件地址:/font/div /td td width=50% height=1 div align=center
input type=text name=email size=20 /div /td /tr tr td width=50% height=1
div align=centerfont size=2 您的公司主页地址:/font/div /td td width=50%
height=1 div align=center input type=text name=homepage size=20 value=
/div /td /tr tr td width=50% height=1 div align=center font
size=2留言主题:/font/div /td td width=50% height=1 valign=middle div
align=center input type=text name=topic size=20 /div /td /tr tr td
width=50% height=1 div align=center font size=2留言内容:/font/div /td
td width=50% height=1 div align=center /div /td /tr tr td width=100%
colspan=2 height=66 p align=center textarea rows=10 name=content
cols=50/textarea /p /td /tr tr td width=50% height=18 div
align=center/div /td td width=50% height=18 div align=center/div /td /tr
tr td width=50% height=18 align=center p align=center input type=submit
value=发表留言 name=B1 /p /td td width=50% height=18 align=center div
align=center input type=reset value=全部重写 name=B2 /div /td /tr /table
/form /center /div p /p p /p /body /html 2.注册程序 html head
titleregiste/title meta content=text/html; charset=gb2312 /head body
bgcolor=#FFFFFF div align=center p/p p/p p用户注册/p form method=post
action=zhuc.php p用户名: input type=text name=username /p p密码: input
type=password name=password /p p input type=submit name=Submit
value=确定 input type=reset name=Submit2 value=重来 /p /form p/p /div
/body /html 如需要ZIP文件可给我来信。tandinet@163.net

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图