來源:互聯網
上載者:User
關鍵字
第三
函數
程式
我們
檔案
可以
一個
變數
echo
一、基本函數
歡迎來到本教程的第三課,也是最後一課。如果您已經學過第一課和第二課,那麼您已經掌握了MySQL和PHP的安裝及編程的基本知識。下面我們要介紹PHP的一些其他函數,這些函數可能會對您有用,使您的開發過程更加簡單。首先我們來看看標頭檔。
大家應該知道標頭檔的一些基本概念吧?標頭檔是一個外部檔案,它的內容被包含到主程式中。方法也十分簡單:在程式檔案中引用標頭檔名,這個標頭檔就會包含進來了。在PHP中使用標頭檔,會涉及兩個函數:include()和require()。這兩個函數差別很小,卻很重要,所以我們要認真研究一下。require()函數工作方式與XSSI相類似;不管在程式的哪個部分使用了這個函數,只有程式一開始運行,標頭檔的內容就被作為程式本身的一部分來處理。因此,如果您在一個條件判定語句中使用了require()函數,那麼即使這個條件即使不為真,標頭檔也會被包含進來。
而include()函數只是在執行到這一條語句時才會把標頭檔內容包含進來。如果程式沒運行到這裡,那PHP是不會管它的。這就意味著,您在條件判定部分使用include時,它會完全按照您希望的那樣工作。
還有,如果您用了require()函數,而您指定的標頭檔並不存在,那麼程式將會停止運行併產生錯誤。如果您用了include(),程式會產生一個警告資訊,但是會繼續運行。您可以親自試一下,運行下面的程式,然後把include()換成require(),再比較兩個程式啟動並執行結果。
include(\"emptyfile.inc\");
echo \"Hello World\";
?>
我喜歡把標頭檔的尾碼名起成.inc,這樣就可以把標頭檔和一般的程式區分開來。如果您也這麼做,那麼請您修改Web伺服器軟體的設定檔,使它能夠把.inc檔案也當作PHP檔案來處理。否則,駭客們也許會猜到您的標頭檔名,然後用瀏覽器把標頭檔內容以純文字格式顯示出來。此時如果您的標頭檔中有些機密資訊(如資料庫口令等)那就糟糕了。
那麼,您用標頭檔來做什麼呢?很簡單!把對所有程式都通用的那些內容放到標頭檔裡。象HTML檔案頭啦,腳註啦,資料庫連接代碼啦,還有您自己定義的一些函數什麼的。把下面的文字拷貝到一個檔案中,儲存為header.inc。
$db = mysql_connect(\"localhost\", \"root\");
mysql_select_db(\"mydb\",$db);
?>
<br /><?php echo $title ?><br />
然後再建立另外一個檔案,名字是footer.txt,該檔案可以包含一些程式結束時用到的一些文字和標記。
現在,我們再來建立一個檔案,這個檔案裡面是真正的PHP程式碼。試一下下面的代碼,當然,您要確認MySQL資料庫伺服器正在運行。
$title = \"Hello World\";
include(\"header.inc\");
$result = mysql_query(\"SELECT * FROM employees\",$db);
echo \"
\n\";echo \"
名字 |
職位 |
\n\";while ($myrow = mysql_fetch_row($result)) {printf(\"
%s %s |
%s |
\n\", $myrow[1], $myrow[2], $myrow[3]);}echo \"
\n\";
include(\"footer.inc\");
?>
看到發生了什麼事了嗎?標頭檔裡的內容被合并到程式中,PHP把所有的代碼都執行了一遍。注意在包含header.inc標頭檔之前$title是如何定義的。在header.inc中的代碼可以訪問到它的值。這樣,網頁的標題就被改掉了。現在,您可以在任何程式中使用header.inc標頭檔了,您所要做的不過是在每個主程式中為$title變數取一個合適的值。
標頭檔、HTML、條件判定語句,還有迴圈語句,這些東西加在一些,您就可以用最簡練的代碼,寫出功能各異的各種複雜程式來。在與函數同時使用時,標頭檔更能發揮它的效力,我們後面就會看到。
接下去,我們會介紹精彩的部分:資料校正。>>
二、 資料校正
想象一下這樣的情形:我們把資料庫都設計妥當了,現在請使用者輸入資訊來寫到資料庫中去。假設您有一個欄位是要求數字類型的資訊,比如價格;而某個可愛的使用者,卻在這一欄裡輸入了文字資訊,使得您的應用程式的執行過程出現了故障。對您在SQL語句中提供的文字類型的資料,MySQL資料庫拒不接受,並向您提出了“嚴正抗議”。
怎麼辦呢?您要用資料校正來防止以上狀況發生。
簡單地講,資料校正是指我們對資料(通常是使用者經由HTML表格傳過來的)進行檢查,看看它是否遵從一定的規則。規則可以是多種多樣的,比如某一資料元素不可為空,或者要求某一資料項目的內容必須滿足一定的要求(例如前面的例子中要求必須是數字而不是文字,或者要求電子郵件地址中一定要包含一個“@”字等等)。
資料校正既可以在伺服器一端作,也可以在用戶端來作。PHP是用來作伺服器一端的資料校正的,而JavaScript或其他用戶端指令碼程式設計語言則能夠提供用戶端的資料校正功能。本文說的是PHP,所以我們在這裡著重介紹伺服器端的校正。如果您想找一些現成的、在用戶端啟動並執行資料較驗程式,那您可以去網猴程式庫看看。
暫時把資料庫放在一邊不談,我們先來說說PHP的資料校正方法。如果您願意(或者說,您想記錄我們要校正的那些資料的話),您可以在前面所建的員工資料庫的裡加入其他欄位,很簡單,用MySQL的ALTER 語句就行了。
有好幾個PHP功能都可以用來作資料校正的工作,有些很簡單,有些則複雜一些。其中strlen()是比較簡單的一個函數,它能夠告訴我們一個變數的長度。
更複雜一點兒的是ereg(),這個函數可以處理完整的常規運算式來進行複雜的校正。我不想就常規運算式講得太深,因為許多書都是專門寫這個問題的。不過我會在下一頁中給出一些簡單的例子。
我們先從一個簡單的例子開始吧。下面這個程式要檢查一個變數是否存在。
if ($submit) {
if (!$first || !$last) {
$error = \"對不起,您必須填寫所有的欄目!\";
} else {
// 處理表格輸入內容
echo \"謝謝!\";
}
}
if (!$submit || $error) {
echo $error;
?>
} // if結束
?>
這段程式中關鍵的地方是嵌套的條件判定語句。第一層檢查使用者是否按了發送資料的按鈕。如果是,程式接著檢查$first和$last兩個變數是否都存在。那個 || 符號表示“或”,而 ! 符號表示“非”。那一句程式用一般語言描述就是“如果$first不存在或者$last不存在,那麼就把 $error變數置成下面的值。”
接下來,我們再進一步,檢查一段文字的長度。這對使用者口令的檢查是很有必要的,因為您不想讓某些懶惰的使用者輸入只有一、兩個字的口令,可能會要求他們輸入六位長的口令。
我們已經講到strlen()這個函數了。它只是簡單地返回一個數字,該數字等於被測變數中所包含的字元個數。這裡,我修改一下上面的程式,檢查一下$first與$last的長度。