MySQL並發能力強、響應速度快,是效能優異的資料庫軟體;PHP是功能強大的伺服器端指令碼語言。筆者在山西鋁廠網站開發中,採用 PHP4.0+MySQL3.23.38建立了多種應用。下面,以一個簡單的聊天室設計為例,介紹PHP+MySQL在網頁開發中的應用。
1、總體設計
1.1 構思與規劃:
聊天室的基本原理,就是把每個連上同一網頁的使用者傳送的發言資料儲存起來,然後將所有的發言資料傳給每一使用者。也就是說,用資料庫彙集每個人的發言,並將資料庫中的資料傳給每一個人就實現了聊天室的功能。
1.2 表設計
首先使用MySQL建立表chat用來儲存使用者的發言:
mysql> 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_connect(“main”,”root”); //連結Mysql伺服器 伺服器名為main,管理員名為root mysql_select_db(“abc”); //選擇資料庫 $str=”select * from chat ORDER BY chtime;” ; //查詢字串 $result=mysql_query($str, $link_ID); //送出查詢 $rows=mysql_num_rows($result); //取得查詢結果的記錄筆數 //取得最後15筆發言,並顯示 @mysql_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_fetch_row($result); echo $chtime; echo “ “;echo $nick; echo”:” ; echo $words; echo “<BR>”; } //清除庫中過時的資料 @mysql_data_seek($result,$rows-20); //移動記錄指標到前20筆記錄 list($limtime)=mysql_fetch_row($result); $str=”DELETE FROM chat WHERE chtime<’$limtime’ ;” ; $result=mysql_query($str,$link_ID); //送出查詢字串,庫中只留前20個記錄 mysql_close($link_ID); ?> </body> </html> |
2.4 送出發言到資料庫speak.php
<html> <head> <title>發言</title> </head> <body> <? If ($words) { $link_ID=mysql_connect(“main”,”root”); mysql_select_db(“abc”); //資料庫名為abc $time=date(y).date(m).date(d).date(h).date(i).(date(s); //取得目前時間 $str=”INSERT INTO chat(chtime,nick,words) values (‘$time’,’$nick’,’$words’);” ; mysql_query($str,$link_ID); //送出發言到資料庫 mysql_close($link_ID); } ?>//輸入發言的表單 <form action=”speak.php” method=”post” target=” _self”> <input type=”text” name=”words” cols=”20”> <input type=”submit” value=”發言”> </form> </body> </html> |
完成以上工作後,一個簡單的聊天室製作就完成了。當然,設計者可以根據個人愛好做一些個人化設計,如增加一個頁框,顯示當前聊天室人員名單、增加發言表情、取得發言者IP、進一步美化頁面等等。