chapter - 碁峰資訊epaper.gotop.com.tw/pdf/acl029200.pdfchapter 5 註冊及登入驗證模組 5-5...
Post on 16-Feb-2020
0 Views
Preview:
TRANSCRIPT
Chapter註冊及登入驗證模組
範例程式位置:光碟\mr\05\
從動態網站開始之初,登入註冊模組就成為了網站必不可少的組成部分,因
為功能單一,實現簡單而成為入門級的模組。隨著 Web 2.0的發展,人機互動成
為主流趨勢,登入註冊模組也順應了時代的發展,變得更加有『親和力』。像過
去那種花了許久時間填寫註冊表單,提交後發現資訊填寫錯誤,需要重新填寫的
慘痛經歷愈來愈少。隨著 Ajax 技術的興起,這種情況就更少發生了。本章將開
發一個功能齊全並有良好互動性的登入註冊模組。透過本章的學習,讀者能夠學
到以下內容。
註冊資訊即時提示 E-mail啟動技術
GD2驗證碼 更換驗證碼
Ajax無刷新驗證技術 找回密碼
防 SQL隱碼技術
PHP案例模組開發講座
5-2
5.1 註冊及登入驗證模組概觀 登入及註冊驗證模組的功能比較單一,除了要有效驗證使用者資訊和一些必
要的安全設定外,更要提高使用者操作程式的便利性。登入及註冊驗證模組由使
用者註冊、使用者登入和找回密碼三部分組成。
5.1.1 使用者註冊流程 使用者註冊的資訊可分成必填資料及非必填資料。必填資料預設是可見的,
而非必填資料預設是隱藏的,在必填資料不完整的時候,『註冊』按鈕不能使用。
對於非必填資料,使用者可以選擇填寫或不填寫,如果填寫了,就需要對資訊的正
確性進行檢驗。當使用者註冊成功後,系統會向使用者所填寫的 E-mail 傳送一封啟動郵
件,使用者只有啟動後,才可使用該帳號進行登入。使用者註冊的流程圖如圖
5.1所示。
圖 5.1 使用者註冊流程圖
5.1.2 使用者登入流程 使用者登入時,除了使用者名稱和密碼外,還需要填寫隨機產生的驗證碼。
當驗證碼顯示不清楚時,可以透過超連結進行更換,無需重新刷新版面。登入處
理對登入進行了一些限制。例如,輸入三次無效的使用者名稱後,將使用 Cookie
技術禁止該使用者繼續登入;當使用者輸入錯誤密碼連續三次後,該帳號將被凍
結。使用者登入流程圖如圖 5.2所示。
Chapter 5 註冊及登入驗證模組
5-3
圖 5.2 使用者登入流程圖
5.1.3 找回密碼流程 當使用者因為個別原因忘記密碼時,可以透過密碼保護問題及答案來找回密
碼。如果使用者輸入正確,那麼系統將密碼透過電子郵件的形式傳送到使用者註
冊的電子信箱中。如果沒有填寫密碼保護的問題及答案或者回答錯誤,則無法找
回。找回密碼的流程圖如圖 5.3所示。
圖 5.3 找回密碼流程圖
PHP案例模組開發講座
5-4
5.2 熱門關鍵技術
5.2.1 防範 SQL隱碼技術 SQL 隱碼,是指一些精通 SQL 陳述式的使用者,透過在表單或瀏覽器位址
欄中輸入 SQL陳述式來繞過系統檢驗的一種技術。一般防範 SQL隱碼的手段是
過濾敏感字元,例如引號等。
PHP相對於 ASP來說,要安全得多。但這不代表 PHP網站就不會出現 SQL
隱碼的情況。幸運的是,在 PHP上防範 SQL隱碼,要比 ASP簡單、方便,不須
要寫一大段的轉換陳述式,只要幾個函式就可以。
在 PHP中,還可以透過對 php.ini檔案的修改來達到這個目的。這裡對程式碼
部分進行介紹。
1. intval()函式
intval()函式的作用是傳回變數的整數值,函式語法如下: int intval ( mixed var [, int base] )
2. addslashes()函式
addslashes()函式就是在運算資料庫時,對其中的特殊字元進行自動轉譯,
即在特殊字元前加上反斜(\),包括單引號( ')、雙引號(")、NULL,
但是不包括『%』和『_』。函式語法如下: string addslashes ( string str )
此外,還可以使用 mysql_real_escape_string()來進行轉譯,效果和 addslashes()
函式是一樣的。
5.2.2 Ajax技術實作無重新整理驗證 Ajax(Asynchronous JavaScript and XML,非同步 JavaScript和 XML),是
時下最流行的技術。Ajax 不是新的技術,而是原有技術的集合,這從它的名字
上就能夠看出來。
Ajax 的核心技術是 xmlHttpRequest。透過 xmlHttpRequest 中的 open 方法和
send 方法,可以在不重新整理目前頁面的情況下,向處理頁面傳送資料;透過
xmlHttpRequest中的 responseText屬性和 responseXML屬性,可以得到處理頁面
的輸出結果。
Ajax能夠流行的原因,是因為它能為使用者提供良好的互動性,這個特性在
本模組中被充分的發揮出來。使用者註冊無需經過『漫長』的等待就可以知道輸
Chapter 5 註冊及登入驗證模組
5-5
入的帳號是否可用,使用者登入也不必擔心因為輸錯登入資訊而得重新整理整個
頁面。
使用 Ajax,一般分為下面幾步:
1. 首先要建立 xmlHttpRequest 物件。不同的瀏覽器,建立 xmlHttpRequest 物
件及使用的方法有一些差別,這裡只針對 IE瀏覽器進行建立。程式碼如下:
範例程式 01 程式碼位置:光碟 \mr\05\01\js\xmlhttprequest.js
var xmlhttp = false; //初始化變數 //如果 ActiveXObject存在,說明是 IE 5.0以上的版本,否則使用 XMLHttpRequest建立 if(window.ActiveXObject){ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }else if(window.XMLHttpReuqest){ xmlhttp = new XMLHttpRequest(); }
2. 物件建立成功後,就可以使用物件中 open()的方法建立新的請求。方法格
式如下: xmlhttp.open(rmethod,rurl,isAsync);
rmethod參數指定請求的方法,如 get()或 post()。
rurl參數指定請求的版面。可以是絕對位址,也可以是相對位址。
isAsync參數指明請求是否為非同步。預設為 True,即非同步。
3. 如 果 isAsync 等 於 True , 那 麼 當 請 求 的 狀 態 改 變 時 , 將 呼 叫
onreadystatechange屬性,該屬性指定了一個回呼函式。格式如下: xmlhttp.onreadystatechange = reabackfunc;
或者
xmlhttp.onreadystatechange = function(){…}
4. 在回呼函式中,首先需要判斷 http 的請求狀態和 http 狀態碼。這是透過
readyState屬性和 status屬性來判斷的。readyState屬性有五種狀態值,常用的是
4,表示資料接收完畢。status屬性的值比較多,常用的是 200,表示請求成功。
一般這兩個屬性一起來判斷。格式如下: xmlhttp.onreadystatechange = function(){ if(readysate == 4 and statues == 200){ … } }
5. 當回應頁面處理結束後,即滿足了『readystate==4 and status == 200』這個
條件,就可以使用 xmlhttprequest物件的屬性取得回應頁面的值了。常用的
有 responseText、responesXML、responseStream 等,這裡以 responseText
為例進行介紹。
PHP案例模組開發講座
5-6
responesText屬性是將回應頁面的輸出資訊做為字串傳回。格式如下: str = xmlhttp.responseText;
不同的屬性取得不同回應頁面的值。例如 responseText 屬性可以取得 HTML
頁面的內容,responseXML屬性可以取得 XML檔案的內容,兩者不可混用。
6. 最後使用 send()方法來接收回應。send()方法可以傳遞資料,但這取決於
open()方法中的 rmethod參數,當參數為 get時,資料是附在 URL中進行傳
遞的。當參數為 post時,資料只能使用 send()方法進行傳遞。Send()方法的
語法如下: xmlhttp.send([rdate]);
關於 Ajax功能的具體實現,請看本章的第 5.3.3節和第 5.3.4節。
5.2.3 驗證碼技術 驗證碼技術,是為了防止使用者名稱和密碼被破解,在登入頁面上產生一組
亂數,每次重新整理版面時,亂數都會改變。一般是四位,也有更多位的。
取得驗證碼
PHP中的驗證碼可以透過 rand()函式產生亂數的方式得到。rand()函式可以取
得指定範圍內的亂數。該函式語法如下:
int rand([int min, int max])
如果省略兩個參數,那麼將傳回 0到 RAND_MAX之間的隨機整數。否則,
傳回 min 和 max 之間的整數。例如本例中要取得四位十六進位的整數,程式碼
如下:
<?php for($i=0;$i<4;$i++){ $num .= dechex(rand(0,15)); //產生亂數 } … ?>
函式 dechex()可以將參數轉為十六進位表示。
不同的平台,RAND_MAX 的值也不相同,Windows 系統上的值是 32 768。
如果想指定更大的值,就需要使用參數了。
使用 JavaScript也可以產生十六進位亂數,但是稍微複雜。JavaScript中不能
直接將十進位數字轉為十六進位,需要手動進行轉換。首先使用 Math.random()
函式產生 0~15 之間的亂數,然後使用Math.ceil()函式將亂數取整,接下來就要逐次
Chapter 5 註冊及登入驗證模組
5-7
判斷該數值,如果該數值大於 9,那麼將 10~15 的數一一對應轉換為 a、b…,一直
到 f。轉換完成後,將數值累加,最後傳給 valcode.php頁。
使用 JavaScript產生十六進位亂數的完整程式碼如下:
範例程式 02 程式碼位置:光碟 \mr\05\01\js\login.js
//產生亂數 function showval(){ num = ''; for(i=0;i<4;i++){ //迴圈輸出四位驗證碼 tmp = Math.ceil((Math.random() * 15)); //取得一位元十六進位的整數 if(tmp > 9){ //依次判斷亂數 switch(tmp){ case(10): //如果亂數等於 10,換為a num += 'a'; break; case(11): num += 'b'; //如果亂數等於 11,換為 b break; case(12): num += 'c'; //如果亂數等於 12,換為 c break; case(13): //如果亂數等於 13,換為 d num += 'd'; break; case(14): //如果亂數等於 14,換為 e num += 'e'; break; case(15): //如果亂數等於 15,換為 f num += 'f'; break; } }else{ num += tmp; } } $('chkid').src='valcode.php?num='+num; //將產生的亂數傳給圖像產生頁面 $('chknm').value = num; //將亂數的值儲存到頁面的隱藏域中 }
顯示亂數圖片
顯示亂數的方式很多,將亂數寫入一個圖片中再顯示是目前常用的方法。在
PHP中,可以使用 GD函式庫來實現。使用到的函式主要有 imagecreate()函式、
imagecolorallocate()函式、imagestring()函式、imagesetpixel()函式、imagepng()函
式和 imagedestroy()函式。
1. imagecreate()函式
imagecreate()函式用來建立一個基於調色板的空白圖像源,這是產生圖片的
第一步。函式語法如下: resource imagecreate ( int width, int height )
PHP案例模組開發講座
5-8
參數 width和 height分別指定了圖像的寬和高。
2. imagecolorallocate()函式
imagecolorallocate()函式可以為建立後的圖像分配色彩。函式語法如下: int imagecolorallocate ( resource image, int red, int green, int blue )
參數 image是一個圖像來源。
參數 red、green 和 blue 表示紅、綠、藍三元素的成分。每種色彩的取值範
圍在 1~255之間。
3. imagestring()函式
圖像建立完成後,就可以使用 imagestring()函式來加入圖像文字了。該函式
的語法如下: bool imagestring ( resource image, int font, int x, int y, string s, int col )
參數 image是一個圖像來源。
參數 font可以設定字型,如果使用系統預設字型,可以使用 1~5的數字。
參數 x 和 y 分別表示文字相對於整幅圖像的 x 軸和 y 軸座標,即所輸入的字串左上角座標。
參數 s是要顯示的字串。
參數 col為字型色彩,也是使用 imagecolorallocate()函式來分配。
4. imagesetpixel()函式
使用 imagecolorallocate()建立的是一個單一背景色的圖像,如果希望在圖像
中加入干擾碼,可以使用 imagesetpixel()函式,該函式的作用是畫一個圖元
點。函式語法如下: bool imagesetpixel ( resource image, int x, int y, int color )
參數說明和 imagestring()函式相似,這裡不再贅述。
5. imagepng()函式
該函式將建立完成的圖片以 png的格式輸出。函式語法如下: bool imagepng ( resource image [, string filename] )
參數 image是要儲存的圖像來源。
參數 filename是要儲存的圖像名稱。如果省略,則直接輸出到瀏覽器。
如果希望直接在瀏覽器中顯示,那麼需要在檔案的開頭設定型態。如果輸出
的是 png格式的圖片,那麼開頭應該加入如下陳述式:
header("Content-type: image/png");
gif、jpg等其他格式的圖片,也要做對應設定。如果是在<img>頁籤中引入的,
則可以省略該陳述式。
Chapter 5 註冊及登入驗證模組
5-9
6. imagedestroy()函式
圖像儲存完畢後,使用 imagedestroy()函式來釋放記憶體。函式語法如下: bool imagedestroy ( resource image )
關於驗證碼實作的完整程式碼,請閱讀本章第 5.3.5節。
5.2.4 E-mail啟動技術 為了防止惡意註冊,現在很多網站採用了 E-mail啟動技術。當使用者註冊成
功後,並不是馬上就可以使用,而是需要先登入信箱。透過系統發出 E-mail中的連結
進行啟動,只有啟動後,帳號才可以使用。對於找回密碼的使用者,系統會將新
密碼傳送到信箱中,這在一定程度上提高了安全性。
本模組使用 imap函式庫中的 imap_mail_compose()和 imap_mail()函式來傳送
郵件。要使用 imap 函式庫,必需要先載入 imap,否則在 PHP 中不支援 imap 函
式庫。該函式庫是 PHP本身自帶的,只是預設的情況下沒有載入。載入 imap的
方法是:找到 PHP的組態檔案 php.ihni,一般該檔案在系統磁碟下的 windows目錄
中,如果使用的是 xampp,則在 xampp目錄下的 apache/bin目錄中。找到該檔案後,
將前面的『;』去掉,再重新啟動 Apache伺服器即可。
;extension=php_imap.dll
在這裡,使用者只要按照書中的程式碼,就可以完成傳送郵件的基本功能。
關於 imap函式庫的使用,請參見本書的第二十章電子郵件模組,該章節會對 imap
函式庫進行詳細的介紹。
5.2.5 應用鍵盤回應事件驗證資訊是否合法 新使用者註冊時,隨著資訊輸入,系統即時顯示資訊的正確性;使用者登入
時,無需使用滑鼠來選取文字方塊,只要按下<Enter>鍵,游標就自動下移……
這些功能,都是透過 JavaScript 指令碼中的鍵盤回應事件來實作的。隨著 Ajax
技術的流行,JavaScript 已經成為一個開發人員必需要掌握的技術。以下就來簡
單瞭解一下鍵盤事件。
使用者透過 onkeydown和 onkeyup事件來觸發回應事件。使用方法和 onclick
事件類似。onkeydown表示當鍵盤上的鍵被按下時觸發,onkeyup和它正好相反,
當鍵盤上的鍵被按下又抬起時觸發。在頁面中載入事件的方式有多種,這裡介紹
兩種最常用的方式。
1. 將事件直接加入到頁面元素中。
這種方法最直接、簡單。格式如下: <script type="text/javascript"> … function refer(){ …
PHP案例模組開發講座
5-10
} </script> <input type="text" onkeydown="refer()" />
當該使用者輸入完資訊後,單擊任意鍵,onkeydown 事件被觸發,並呼叫
refer()函式。
2. 透過 window.onload載入。當頁面載入時,事件也被載入。格式如下: <script> window.onload = function(){ document.getElementById('lgname').onkeydown = function(){ … }` } </script> … <input id="lgname" type="text" /> …
使用第二種方法時,如果在版面中找不到 id="lgname"的元素,js將回報錯誤。
當使用者輸入資訊時,每輸入一個字母,都將觸發該事件,在該事件呼叫的
函式中,對使用者輸入資訊進行判斷。例如使用者名稱必需大於等於 2,密碼最
短 6位,E-mail必需合法等。以下是一種驗證使用者名稱的程式碼:
範例程式 03 程式碼位置:光碟 \mr\05\01\js\register.js
//驗證使用者名稱 //為 id等於 regname的版面元素加入 onkeyup事件 //使用者按鍵每按一次鍵,都會呼叫一次該函式 $('regname').onkeyup = function (){ name = $('regname').value; //取得輸入內容 cname2 = ''; if(name.match(/^[a-zA-Z_]*/) == ''){ //判斷輸入字元是否在有效範圍之內 $('namediv').innerHTML = '<font color=red>必需以字母或底線開頭</font>'; cname1 = ''; }else if(name.length < 2){ //判斷輸入的字元的長度 $('namediv').innerHTML = '<font color=red>註冊名稱必需大於等於 2位</font>'; cname1 = ''; }else{ $('namediv').innerHTML = '<font color=green>註冊名稱符合標準</font>'; cname1 = 'yes'; } chkreg(); } …
該段程式碼的執行結果如圖 5.4所示。
Chapter 5 註冊及登入驗證模組
5-11
圖 5.4 驗證資訊合法性
使用 onkeydown 事件還可以實現對特定鍵的控制,包括<Enter>鍵、<Ctrl>
鍵、<Alt>鍵等所有的按鍵,這是透過在 onkeydown 事件中使用 keyCode 屬性來
實現的。keyCode屬性能夠知道使用者按下的是哪個鍵,例如<Enter>鍵等於 13,
空白鍵等於 32等等。使用 keyCode屬性的一般格式如下:
<script> window.onload = function(){ document.getElementById('lgname') = function(){ if(event.keyCode == 13){ //判斷使用者是否按下了<Enter>鍵 … } }` } </script>
在本模組中,實現了游標自動下移功能。當使用者按下<Enter>鍵時,頁面
的游標自動移到下一個文字方塊中。實現後的效果如圖 5.5所示。
圖 5.5 游標自動下移的執行效果
關於驗證資訊和游標自動下移的完整程式碼,將會在本章中的第 5.3.3 節做
詳細介紹。
5.2.6 應用 Cookie技術實現自動登入 Cookie的作用是當使用者第一次存取某伺服器時,伺服器將一些資訊儲存到
使用者端電腦內。之後,在一段時間內當使用者再次存取這個伺服器時,伺服器
透過 Cookie 資訊,就能夠識別該使用者。有很長一段時間,Cookie 都被當作一
個不安全的因素,而很少被使用,轉而使用 Session。但是,Cookie 的功能確實
很方便。自動登入、網站統計等等,都要比其他的實現方式要簡單、快捷得多。
Cookie只是一個文字文件,不能存取本機硬碟,無法傳播病毒木馬程式。唯一要
注意的地方是:Cookie只能識別電腦,無法識別不同使用者。
PHP案例模組開發講座
5-12
PHP中操作 Cookie
在 PHP 中操作 Cookie 使用 setcookie()函式和$_COOKIE 預定義變數。
setcookie()函式的語法格式如下:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
參數 name設定了 Cookie的名字。
參數 value是 Cookie的值,即參數 name的值。
參數 expire 用來設定 Cookie 的過期時間。該參數以時間戳記的形式存在。
一般設定 Cookie 過期時間的時候,透過 time()+秒數來實現。如 time()+60×10,
表示 Cookie 將在 10 分鐘後失效。設定 Cookie 馬上失效,可以將時間設為目前
日期之前,如:time()−1,那麼 Cookie會立即失效。
參數 path表示 Cookie在伺服器伺服端的有效範圍。如果 path設為『/』,那
麼 Cookie在整個伺服器內都有效,如果 Cookie為/05/,那麼 Cookie只在伺服器
下的 05目錄有效。
參數 domain 指定了 Cookie 有效的功能變數名稱範圍。以 www.mrbccd.com
為例,如果 domain設為『.mrbccd.com』,那麼 Cookie在該網域的所有子網域都
有效;如果 domain為『www.mrbccd.com』,那麼 Cookie只在 www.mrbccd.com
網域內有效。
參數 secure 表明是否在 https 傳送。如果是 True,Cookie 僅在 https 連結中
被設定,預設是 False。
如果要在 Cookie中儲存 True值和 False值,那麼應該使用 1和 0來表示。因
為當 Cookie的值為 False時,用戶端會將 Cookie刪除。
在 JavaScript中操作 Cookie
在 JavaScript 中可以透過 document 物件中的 Cookie 屬性對 Cookie 進行建
立、讀取、刪除等操作。先來看一下建立 Cookie 的格式(程式碼中加粗的部分
是需要使用者設定的)。
documen.cookie = "Name=Value; expires=time; path=URL; domain= Domain"
其中各個參數的含義和 PHP中的基本相同,這裡不再介紹了。
在 JavaScript中讀取 Cookie有一點複雜。在 JavaScript看來,Cookie就是一
個字串。例如一個名字為『Count』、值是『10』的 Cookie,在 JavaScript 中的
格式是:
count=10
Chapter 5 註冊及登入驗證模組
5-13
如果有多個 Cookie,那麼它的格式如下:
count=10; name=mr; …
而真正需要的值,其實只有 10而已。所以,要取得 Cookie的值,就要使用
split()函式將 Cookie進行切割。取得 count值的程式碼為:
<script> if(document.cookie==''){ //Cookie等於空時 document.write('no cookie'); }else{ cookiearr = document.cookie.split('; '); //以分號為分隔符號,對 Cookie進行分割 leng = cookiearr.length; //取得陣列長度 for(i=0; i<leng; i++){ if(cookiearr[i].split('=')[0] == 'count'){ //判斷哪一個 cookie等於 count document.write(cookiearr[i].split('=')[1]); //輸出 count的值 } } } </script>
實現自動登入
自動登入的原理是:當使用者開啟登入頁面時,登入頁面首先判斷使用者用
戶端機器中的 Cookie值。如果該值不存在,說明使用者沒有登入,或 Cookie已
失效,這時,將顯示登入表單;如果 Cookie值存在,則直接使用 Cookie中所儲
存的使用者名稱進行登入。
本例中,使用者首先開啟的是 index.php頁,該頁判斷 Cookie值,如果沒有,
則跳轉到 login.PHP 進行登入;如果 Cookie 有值,則將 Cookie 中的使用者名稱
儲存到 Session,直接進入主版面。實作程式碼如下。
範例程式 04 程式碼位置:光碟 \mr\05\01\index.php
<?php session_start(); //開啟 Session支援 header('Content-Type:text/html;charset=gb2312'); //設定頁面編碼 if(!empty($_COOKIE['name']) and !is_null($_COOKIE['name'])){ //判斷 Cookie是否為空 $_SESSION['name'] = $_COOKIE['name']; //將 Cookie儲存到 Session中 header('location:http://localhost/model/05/01/main.php'); //跳轉到 main.php頁面 }else{ //Cookie為空,說明沒有登入 header('location:http://localhost/model/05/01/login.php'); //跳轉到 login.php頁面 } ?>
這裡$_COOKIE['name']的值是在登入成功時設定的,相關程式碼如下:
範例程式 05 程式碼位置:光碟 \mr\05\01\login_chk.php
<?php … //如果登入成功 setcookie('name',$name,time()+60*10); //儲存$name的同時設定時間
PHP案例模組開發講座
5-14
… ?>
5.3 註冊及登入驗證模組
5.3.1 資料庫設計 註冊及登入驗證模組使用的資料庫是 db_reglog,其中包含資料表
tb_member。該表中有十二個欄位。tb_member表結構及說明如圖 5.6所示。
圖 5.6 tb_member資料表結構及說明
5.3.2 資料庫類別 為了便於維護,減少程式碼冗餘,本模組使用了一個簡單的自訂資料庫類
別。以下提供類別中主要的程式碼。
首先列出的是類別中的成員變數,其中$host、$name、$pwd 和$dBase 變數
是類別初始化時所使用的,有預設值,其他變數都是相關的資料資訊。程式碼如
下:
範例程式 06 程式碼位置:光碟 \mr\05\01\conn\conn.php
<?php class opmysql{ private $host = 'localhost'; //伺服器位址 private $name = 'root'; //登入帳號 private $pwd = 'root'; //登入密碼 private $dBase = 'db_reglog'; //資料庫名稱 private $conn = ''; //資料庫連結資源 private $result = ''; //結果集 private $msg = ''; //傳回結果 private $fields; //傳回欄位 private $fieldsNum = 0; //傳回欄位數 private $rowsNum = 0; //傳回結果數
Chapter 5 註冊及登入驗證模組
5-15
private $rowsRst = ''; //傳回單筆記錄的欄位陣列 private $filesArray = array(); //傳回欄位陣列 private $rowsArray = array(); //傳回結果陣列
接下來列出的是構造函式。該構造函式有四個參數,這四個參數都可以省略
而使用預設值。參數處理後,呼叫 init_conn()函式。程式碼如下:
function __construct($host='',$name='',$pwd='',$dBase=''){ if($host != '') $this->host = $host; if($name != '') $this->name = $name; if($pwd != '') $this->pwd = $pwd; if($dBase != '') $this->dBase = $dBase; $this->init_conn(); }
init_conn()函式根據成員變數中的值來建立資料庫連接源。程式碼如下:
//連接資料庫 function init_conn(){ $this->conn=@mysql_connect($this->host,$this->name,$this->pwd); @mysql_select_db($this->dBase,$this->conn); mysql_query("set names gb2312"); //設定編碼 }
下面開始就是類別中的操作函式了。先來看查詢函式。查詢函式根據回傳的 SQL
陳述式進行查詢,並將查詢結果儲存到成員變數$result 中。符號『@』的作用是
遮罩錯誤資訊。程式碼如下:
//查詢結果 function mysql_query_rst($sql){ if($this->conn == ''){ $this->init_conn(); } $this->result = @mysql_query($sql,$this->conn); }
傳回查詢記錄數函式。根據查詢結果,回傳記錄數。程式碼如下:
function getRowsN5um($sql){ $this->mysql_query_rst($sql); if(mysql_errno() == 0){ return @mysql_num_rows($this->result); }else{ return ''; } }
取得記錄陣列函式。將查詢結果輸出成一個陣列並回傳。該函式處理的是單
筆記錄。程式碼如下:
function getRowsRst($sql){ $this->mysql_query_rst($sql);
top related