基於PHP+MySQL的聊天室設計

  MySQL(和PHP搭配之最佳組合)並發能力強、響應速度快,是性能優異的數據庫軟件;php(做為現在的主流開發語言)是功能強大的服務器端腳本語言。筆者在網站開發中,采用php(做為現在的主流開發語言)4.0+MySQL(和PHP搭配之最佳組合)3.23.38建立瞭多種應用。下面,以一個簡單的聊天室設計為例,介紹php(做為現在的主流開發語言)+MySQL(和PHP搭配之最佳組合)在網頁開發中的應用。

  1、總體設計

  1. 1 構思與規劃:

  聊天室的基本原理,就是把每個連上同一網頁的用戶傳送的發言數據儲存起來,然後將所有的發言數據傳給每一用戶。也就是說,用數據庫匯集每個人的發言,並將數據庫中的數據傳給每一個人就實現瞭聊天室的功能。

  1.2 表設計

  首先使用MySQL(和PHP搭配之最佳組合)建立表chat用來儲存用戶的發言:

MySQL(和PHP搭配之最佳組合)> CREATE TABLE chat
-> (chtime DATATIME,
-> nick CHAR(10) NOT NULL,
->words CHAR(150));

  表中隻設定瞭三個域,chtime是發言的時間,nick為發言者的昵稱,words是發言的內容,發言最多150個字符

  1.3 網頁設計

  一個最簡單的聊天室通常需要兩個頁框:一個頁框是用戶輸入發言的表單,另一個用來顯示大傢的發言。所以代碼段通常至少需要如下幾段:

  建立頁框的結構(main.php(做為現在的主流開發語言)

  顯示大傢發言的程序段(cdisplay.php(做為現在的主流開發語言)

  傳送用戶發言的程序段(speak.php(做為現在的主流開發語言)

  用戶登錄進入聊天室程序段(login.php(做為現在的主流開發語言)

  2 、代碼設計

  以上規劃完成後,就可以著手代碼設計瞭,采用php(做為現在的主流開發語言)可以非常簡明實現以上的功能。

  2.1 用戶登錄login.php(做為現在的主流開發語言),本段代碼是一個完全HTML網頁

<html>
<head>
<title>用戶登錄</title>
</head>
<body>請輸入您的昵稱<br>
<form action=”main.php(做為現在的主流開發語言)” method=”post” target=”_self”>
<input type=”text” name=”nick” cols=”20″>
<input type=”submit” value=”登錄”>
</body>
</html>

  用戶提交自己的昵稱後,就進入到聊天室,以下的處理交由main.php(做為現在的主流開發語言)處理。

  2.2 頁框主體代碼段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 顯示發言cdisplay.php(做為現在的主流開發語言)

  本代碼段的任務是將表chat中的數據取出,顯示在頁框中。每次刷新時,取數據庫中最近的15條發言。同時,為防止數據庫無限增大,需設計刪除陳舊數據的功能。代碼如下

<html>
<head>
<title>顯示用戶發言</title>
<meta http-equiv=”refresh” content=”5;url=cdisplay.php(做為現在的主流開發語言)“>
</head>
<body>
<?
$link_ID=MySQL(和PHP搭配之最佳組合)_connect(“main”,”root”);
//鏈接MySQL(和PHP搭配之最佳組合)服務器 服務器名為main,管理員名為root
MySQL(和PHP搭配之最佳組合)_select_db(“abc”); //選擇數據庫
$str=”select * from chat ORDER BY chtime;” ; //查詢字符串
$result=MySQL(和PHP搭配之最佳組合)_query($str, $link_ID); //送出查詢
$rows=MySQL(和PHP搭配之最佳組合)_num_rows($result); //取得查詢結果的記錄筆數
//取得最後15筆發言,並顯示
@MySQL(和PHP搭配之最佳組合)_data_seek($resut,$rows-15); //移動記錄指針到前15筆記錄
if ($rows<15) $l=$rows; else $l=15; //記錄總數小於15,則最多為該記錄數
for ($i=1;$i<=$l;$i++) {
list($chtime,$nick,$words)=MySQL(和PHP搭配之最佳組合)_fetch_row($result);
echo $chtime; echo ” “;echo $nick; echo”:” ; echo $words; echo “<BR>”;
}
//清除庫中過時的數據
@MySQL(和PHP搭配之最佳組合)_data_seek($result,$rows-20); //移動記錄指針到前20筆記錄
list($limtime)=MySQL(和PHP搭配之最佳組合)_fetch_row($result);
$str=”DELETE FROM chat WHERE chtime<$limtime ;” ;
$result=MySQL(和PHP搭配之最佳組合)_query($str,$link_ID); //送出查詢字符串,庫中隻留前20個記錄

發佈留言