用PHP+MySQL搭建聊天室功能實(shí)例代碼
更新時(shí)間:2012年08月20日 21:46:36 作者:
MySQL并發(fā)能力強(qiáng)、響應(yīng)速度快,是性能優(yōu)異的數(shù)據(jù)庫(kù)軟件;PHP是功能強(qiáng)大的服務(wù)器端腳本語(yǔ)言。筆者在山西鋁廠網(wǎng)站開(kāi)發(fā)中,采用PHP4.0+MySQL3.23.38建立了多種應(yīng)用。
下面,以一個(gè)簡(jiǎn)單的聊天室設(shè)計(jì)為例,介紹PHP+MySQL在網(wǎng)頁(yè)開(kāi)發(fā)中的應(yīng)用
1、總體設(shè)計(jì)
1.1 構(gòu)思與規(guī)劃:
聊天室的基本原理,就是把每個(gè)連上同一網(wǎng)頁(yè)的用戶傳送的發(fā)言數(shù)據(jù)儲(chǔ)存起來(lái),然后將所有的發(fā)言數(shù)據(jù)傳給每一用戶。也就是說(shuō),用數(shù)據(jù)庫(kù)匯集每個(gè)人的發(fā)言,并將數(shù)據(jù)庫(kù)中的數(shù)據(jù)傳給每一個(gè)人就實(shí)現(xiàn)了聊天室的功能。
1.2 表設(shè)計(jì)
首先使用MySQL建立表chat用來(lái)儲(chǔ)存用戶的發(fā)言:
mysql> CREATE TABLE chat
-> (chtime DATATIME,
-> nick CHAR(10) NOT NULL,
->words CHAR(150));
表中只設(shè)定了三個(gè)域,chtime是發(fā)言的時(shí)間,nick為發(fā)言者的昵稱,words是發(fā)言的內(nèi)容,發(fā)言最多150個(gè)字符
1.3 網(wǎng)頁(yè)設(shè)計(jì)
一個(gè)最簡(jiǎn)單的聊天室通常需要兩個(gè)頁(yè)框:一個(gè)頁(yè)框是用戶輸入發(fā)言的表單,另一個(gè)用來(lái)顯示大家的發(fā)言。所以代碼段通常至少需要如下幾段:
建立頁(yè)框的結(jié)構(gòu)(main.php)
顯示大家發(fā)言的程序段(cdisplay.php)
傳送用戶發(fā)言的程序段(speak.php)
用戶登錄進(jìn)入聊天室程序段(login.php)
2、代碼設(shè)計(jì)
以上規(guī)劃完成后,就可以著手代碼設(shè)計(jì)了,采用php可以非常簡(jiǎn)明實(shí)現(xiàn)以上的功能。
2.1 用戶登錄login.php,本段代碼是一個(gè)完全HTML網(wǎng)頁(yè)
<html>
<head>
<title>用戶登錄</title>
</head>
<body>請(qǐng)輸入您的昵稱<br>
<form action=”main.php” method=”post” target=”_self”>
<input type=”text” name=”nick” cols=”20”>
<input type=”submit” value=”登錄”>
</body>
</html>
用戶提交自己的昵稱后,就進(jìn)入到聊天室,以下的處理交由main.php處理。
2.2 頁(yè)框主體代碼段main.php:
<?
setcookie(“nick”,$nick) //用cookie記錄用戶昵稱,是常用的傳遞變量方法
?>
<html>
<title>山西鋁廠聊天室試用版ver1.0</title>
<frameset rows=”80%,*”>
<frame src=” cdisplay.php” name=”chatdisplay”>
<frame src=”speak.php” name=”speak”>
</frameset>
</html>
2.3 顯示發(fā)言cdisplay.php
本代碼段的任務(wù)是將表chat中的數(shù)據(jù)取出,顯示在頁(yè)框中。每次刷新時(shí),取數(shù)據(jù)庫(kù)中最近的15條發(fā)言。同時(shí),為防止數(shù)據(jù)庫(kù)無(wú)限增大,需設(shè)計(jì)刪除陳舊數(shù)據(jù)的功能。代碼如下
<html>
<head>
<title>顯示用戶發(fā)言</title>
<meta http-equiv=”refresh” content=”5;url=cdisplay.php”>
</head>
<body>
<?
$link_ID=mysql_connect(“main”,”root”);
//鏈接Mysql服務(wù)器 服務(wù)器名為main,管理員名為root
mysql_select_db(“abc”); //選擇數(shù)據(jù)庫(kù)
$str=”select * from chat ORDER BY chtime;” ; //查詢字符串
$result=mysql_query($str, $link_ID); //送出查詢
$rows=mysql_num_rows($result); //取得查詢結(jié)果的記錄筆數(shù)
//取得最后15筆發(fā)言,并顯示
@mysql_data_seek($resut,$rows-15); //移動(dòng)記錄指針到前15筆記錄
if ($rows<15) $l=$rows; else $l=15; //記錄總數(shù)小于15,則最多為該記錄數(shù)
for ($i=1;$i<=$l;$i++) {
list($chtime,$nick,$words)=mysql_fetch_row($result);
echo $chtime; echo “ “;echo $nick; echo”:” ; echo $words; echo “<BR>”;
}
//清除庫(kù)中過(guò)時(shí)的數(shù)據(jù)
@mysql_data_seek($result,$rows-20); //移動(dòng)記錄指針到前20筆記錄
list($limtime)=mysql_fetch_row($result);
$str=”DELETE FROM chat WHERE chtime<'$limtime' ;” ;
$result=mysql_query($str,$link_ID); //送出查詢字符串,庫(kù)中只留前20個(gè)記錄
mysql_close($link_ID);
?>
</body>
</html>
2.4 送出發(fā)言到數(shù)據(jù)庫(kù)speak.php
<html>
<head>
<title>發(fā)言</title>
</head>
<body>
<?
If ($words)
{ $link_ID=mysql_connect(“main”,”root”);
mysql_select_db(“abc”); //數(shù)據(jù)庫(kù)名為abc
$time=date(y).date(m).date(d).date(h).date(i).(date(s); //取得當(dāng)前時(shí)間
$str=”INSERT INTO chat(chtime,nick,words) values
(‘$time','$nick','$words');” ;
mysql_query($str,$link_ID); //送出發(fā)言到數(shù)據(jù)庫(kù)
mysql_close($link_ID);
}
?>
//輸入發(fā)言的表單
<form action=”speak.php” method=”post” target=” _self”>
<input type=”text” name=”words” cols=”20”>
<input type=”submit” value=”發(fā)言”>
</form>
</body>
</html>
完成以上工作后,一個(gè)簡(jiǎn)單的聊天室制作就完成了。當(dāng)然,設(shè)計(jì)者可以根據(jù)個(gè)人愛(ài)好做一些個(gè)性化設(shè)計(jì),如增加一個(gè)頁(yè)框,顯示當(dāng)前聊天室人員名單、增加發(fā)言表情、取得發(fā)言者IP、進(jìn)一步美化頁(yè)面等等。
1、總體設(shè)計(jì)
1.1 構(gòu)思與規(guī)劃:
聊天室的基本原理,就是把每個(gè)連上同一網(wǎng)頁(yè)的用戶傳送的發(fā)言數(shù)據(jù)儲(chǔ)存起來(lái),然后將所有的發(fā)言數(shù)據(jù)傳給每一用戶。也就是說(shuō),用數(shù)據(jù)庫(kù)匯集每個(gè)人的發(fā)言,并將數(shù)據(jù)庫(kù)中的數(shù)據(jù)傳給每一個(gè)人就實(shí)現(xiàn)了聊天室的功能。
1.2 表設(shè)計(jì)
首先使用MySQL建立表chat用來(lái)儲(chǔ)存用戶的發(fā)言:
復(fù)制代碼 代碼如下:
mysql> CREATE TABLE chat
-> (chtime DATATIME,
-> nick CHAR(10) NOT NULL,
->words CHAR(150));
表中只設(shè)定了三個(gè)域,chtime是發(fā)言的時(shí)間,nick為發(fā)言者的昵稱,words是發(fā)言的內(nèi)容,發(fā)言最多150個(gè)字符
1.3 網(wǎng)頁(yè)設(shè)計(jì)
一個(gè)最簡(jiǎn)單的聊天室通常需要兩個(gè)頁(yè)框:一個(gè)頁(yè)框是用戶輸入發(fā)言的表單,另一個(gè)用來(lái)顯示大家的發(fā)言。所以代碼段通常至少需要如下幾段:
建立頁(yè)框的結(jié)構(gòu)(main.php)
顯示大家發(fā)言的程序段(cdisplay.php)
傳送用戶發(fā)言的程序段(speak.php)
用戶登錄進(jìn)入聊天室程序段(login.php)
2、代碼設(shè)計(jì)
以上規(guī)劃完成后,就可以著手代碼設(shè)計(jì)了,采用php可以非常簡(jiǎn)明實(shí)現(xiàn)以上的功能。
2.1 用戶登錄login.php,本段代碼是一個(gè)完全HTML網(wǎng)頁(yè)
復(fù)制代碼 代碼如下:
<html>
<head>
<title>用戶登錄</title>
</head>
<body>請(qǐng)輸入您的昵稱<br>
<form action=”main.php” method=”post” target=”_self”>
<input type=”text” name=”nick” cols=”20”>
<input type=”submit” value=”登錄”>
</body>
</html>
用戶提交自己的昵稱后,就進(jìn)入到聊天室,以下的處理交由main.php處理。
2.2 頁(yè)框主體代碼段main.php:
復(fù)制代碼 代碼如下:
<?
setcookie(“nick”,$nick) //用cookie記錄用戶昵稱,是常用的傳遞變量方法
?>
<html>
<title>山西鋁廠聊天室試用版ver1.0</title>
<frameset rows=”80%,*”>
<frame src=” cdisplay.php” name=”chatdisplay”>
<frame src=”speak.php” name=”speak”>
</frameset>
</html>
2.3 顯示發(fā)言cdisplay.php
本代碼段的任務(wù)是將表chat中的數(shù)據(jù)取出,顯示在頁(yè)框中。每次刷新時(shí),取數(shù)據(jù)庫(kù)中最近的15條發(fā)言。同時(shí),為防止數(shù)據(jù)庫(kù)無(wú)限增大,需設(shè)計(jì)刪除陳舊數(shù)據(jù)的功能。代碼如下
復(fù)制代碼 代碼如下:
<html>
<head>
<title>顯示用戶發(fā)言</title>
<meta http-equiv=”refresh” content=”5;url=cdisplay.php”>
</head>
<body>
<?
$link_ID=mysql_connect(“main”,”root”);
//鏈接Mysql服務(wù)器 服務(wù)器名為main,管理員名為root
mysql_select_db(“abc”); //選擇數(shù)據(jù)庫(kù)
$str=”select * from chat ORDER BY chtime;” ; //查詢字符串
$result=mysql_query($str, $link_ID); //送出查詢
$rows=mysql_num_rows($result); //取得查詢結(jié)果的記錄筆數(shù)
//取得最后15筆發(fā)言,并顯示
@mysql_data_seek($resut,$rows-15); //移動(dòng)記錄指針到前15筆記錄
if ($rows<15) $l=$rows; else $l=15; //記錄總數(shù)小于15,則最多為該記錄數(shù)
for ($i=1;$i<=$l;$i++) {
list($chtime,$nick,$words)=mysql_fetch_row($result);
echo $chtime; echo “ “;echo $nick; echo”:” ; echo $words; echo “<BR>”;
}
//清除庫(kù)中過(guò)時(shí)的數(shù)據(jù)
@mysql_data_seek($result,$rows-20); //移動(dòng)記錄指針到前20筆記錄
list($limtime)=mysql_fetch_row($result);
$str=”DELETE FROM chat WHERE chtime<'$limtime' ;” ;
$result=mysql_query($str,$link_ID); //送出查詢字符串,庫(kù)中只留前20個(gè)記錄
mysql_close($link_ID);
?>
</body>
</html>
2.4 送出發(fā)言到數(shù)據(jù)庫(kù)speak.php
復(fù)制代碼 代碼如下:
<html>
<head>
<title>發(fā)言</title>
</head>
<body>
<?
If ($words)
{ $link_ID=mysql_connect(“main”,”root”);
mysql_select_db(“abc”); //數(shù)據(jù)庫(kù)名為abc
$time=date(y).date(m).date(d).date(h).date(i).(date(s); //取得當(dāng)前時(shí)間
$str=”INSERT INTO chat(chtime,nick,words) values
(‘$time','$nick','$words');” ;
mysql_query($str,$link_ID); //送出發(fā)言到數(shù)據(jù)庫(kù)
mysql_close($link_ID);
}
?>
//輸入發(fā)言的表單
<form action=”speak.php” method=”post” target=” _self”>
<input type=”text” name=”words” cols=”20”>
<input type=”submit” value=”發(fā)言”>
</form>
</body>
</html>
完成以上工作后,一個(gè)簡(jiǎn)單的聊天室制作就完成了。當(dāng)然,設(shè)計(jì)者可以根據(jù)個(gè)人愛(ài)好做一些個(gè)性化設(shè)計(jì),如增加一個(gè)頁(yè)框,顯示當(dāng)前聊天室人員名單、增加發(fā)言表情、取得發(fā)言者IP、進(jìn)一步美化頁(yè)面等等。
您可能感興趣的文章:
- php+websocket 實(shí)現(xiàn)的聊天室功能詳解
- php基于websocket搭建簡(jiǎn)易聊天室實(shí)踐
- 基于Swoole實(shí)現(xiàn)PHP與websocket聊天室
- php+html5基于websocket實(shí)現(xiàn)聊天室的方法
- php socket實(shí)現(xiàn)的聊天室代碼分享
- PHP實(shí)現(xiàn)簡(jiǎn)單聊天室(附源碼)
- php寫(xiě)的簡(jiǎn)易聊天室代碼
- 基于HTTP長(zhǎng)連接的"服務(wù)器推"技術(shù)的php 簡(jiǎn)易聊天室
- 如何用PHP websocket實(shí)現(xiàn)網(wǎng)頁(yè)實(shí)時(shí)聊天
相關(guān)文章
高性能PHP框架Symfony2經(jīng)典入門(mén)教程
這篇文章主要介紹了高性能PHP框架Symfony2的入門(mén)教程,對(duì)于學(xué)習(xí)Symfony2的朋友有很好的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下2014-07-07PHP+fiddler抓包采集微信文章閱讀數(shù)點(diǎn)贊數(shù)的思路詳解
這篇文章主要介紹了PHP+fiddler抓包采集微信文章閱讀數(shù)點(diǎn)贊數(shù)的思路,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12PHP長(zhǎng)網(wǎng)址與短網(wǎng)址的實(shí)現(xiàn)方法
這篇文章主要介紹了PHP長(zhǎng)網(wǎng)址與短網(wǎng)址的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-10-10PHP安裝threads多線程擴(kuò)展基礎(chǔ)教程
php5.3或以上,且為線程安全版本。apache和php使用的編譯器必須一致,通過(guò)phpinfo()查看Thread Safety為enabled則為線程安全版,通過(guò)phpinfo()查看Compiler項(xiàng)可以知道使用的編譯器,本文給大家介紹PHP安裝threads多線程擴(kuò)展基礎(chǔ)教程,需要的朋友參考下2015-11-11php實(shí)現(xiàn)HTML實(shí)體編號(hào)與非ASCII字符串相互轉(zhuǎn)換類實(shí)例
本篇文章主要介紹了"php實(shí)現(xiàn)HTML實(shí)體編號(hào)與非ASCII字符串相互轉(zhuǎn)換類實(shí)例",主要涉及到HTML實(shí)體編號(hào)與非ASCII字符串相互轉(zhuǎn)換類方面的內(nèi)容,感興趣的同學(xué)可以參考一下。2016-11-11