PHP/MySQL3日通-第3天(一)
發(fā)表時(shí)間:2024-06-05 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一、基本函數(shù) 歡迎來(lái)到本教程的第三課,也是最后一課。如果您已經(jīng)學(xué)過(guò)第一課和第二課,那么您已經(jīng)掌握了MySQL和PHP的安裝及編程的基本知識(shí)。下面我們要介紹PHP的一些其他函數(shù),這些函數(shù)可能會(huì)對(duì)您有用,使您的開發(fā)過(guò)程更加簡(jiǎn)單。首先我們來(lái)看看頭文件。 大家應(yīng)該知道頭文件的一些基本概念吧?頭文件...
一、基本函數(shù)
歡迎來(lái)到本教程的第三課,也是最后一課。如果您已經(jīng)學(xué)過(guò)第一課和第二課,那么您已經(jīng)掌握了MySQL和PHP的安裝及編程的基本知識(shí)。下面我們要介紹PHP的一些其他函數(shù),這些函數(shù)可能會(huì)對(duì)您有用,使您的開發(fā)過(guò)程更加簡(jiǎn)單。首先我們來(lái)看看頭文件。
大家應(yīng)該知道頭文件的一些基本概念吧?頭文件是一個(gè)外部文件,它的內(nèi)容被包含到主程序中。方法也十分簡(jiǎn)單:在程序文件中引用頭文件名,這個(gè)頭文件就會(huì)包含進(jìn)來(lái)了。在PHP中使用頭文件,會(huì)涉及兩個(gè)函數(shù):include()和require()。這兩個(gè)函數(shù)差別很小,卻很重要,所以我們要認(rèn)真研究一下。require()函數(shù)工作方式與XSSI相類似;不管在程序的哪個(gè)部分使用了這個(gè)函數(shù),只有程序一開始運(yùn)行,頭文件的內(nèi)容就被作為程序本身的一部分來(lái)處理。因此,如果您在一個(gè)條件判定語(yǔ)句中使用了require()函數(shù),那么即使這個(gè)條件即使不為真,頭文件也會(huì)被包含進(jìn)來(lái)。
而include()函數(shù)只是在執(zhí)行到這一條語(yǔ)句時(shí)才會(huì)把頭文件內(nèi)容包含進(jìn)來(lái)。如果程序沒運(yùn)行到這里,那PHP是不會(huì)管它的。這就意味著,您在條件判定部分使用include時(shí),它會(huì)完全按照您希望的那樣工作。
還有,如果您用了require()函數(shù),而您指定的頭文件并不存在,那么程序?qū)?huì)停止運(yùn)行并產(chǎn)生錯(cuò)誤。如果您用了include(),程序會(huì)產(chǎn)生一個(gè)警告信息,但是會(huì)繼續(xù)運(yùn)行。您可以親自試一下,運(yùn)行下面的程序,然后把include()換成require(),再比較兩個(gè)程序運(yùn)行的結(jié)果。
我喜歡把頭文件的后綴名起成.inc,這樣就可以把頭文件和一般的程序區(qū)分開來(lái)。如果您也這么做,那么請(qǐng)您修改Web服務(wù)器軟件的配置文件,使它能夠把.inc文件也當(dāng)作PHP文件來(lái)處理。否則,黑客們也許會(huì)猜到您的頭文件名,然后用瀏覽器把頭文件內(nèi)容以純文本格式顯示出來(lái)。此時(shí)如果您的頭文件中有些機(jī)密信息(如數(shù)據(jù)庫(kù)口令等)那就糟糕了。 <
那么,您用頭文件來(lái)做什么呢?很簡(jiǎn)單!把對(duì)所有程序都通用的那些內(nèi)容放到頭文件里。象HTML文件頭啦,腳注啦,數(shù)據(jù)庫(kù)連接代碼啦,還有您自己定義的一些函數(shù)什么的。把下面的文字拷貝到一個(gè)文件中,保存為header.inc。
| $#@60;?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
?$#@62;
$#@60;html$#@62;
$#@60;head$#@62;
$#@60;title$#@62;
$#@60;?php echo $title ?$#@62;
$#@60;/title$#@62;
$#@60;/head$#@62;
$#@60;body$#@62;
$#@60;center$#@62;$#@60;h2$#@62;$#@60;?php echo $title ?$#@62;$#@60;/h2$#@62;$#@60;/center$#@62;
|
然后再創(chuàng)建另外一個(gè)文件,名字是footer.txt,該文件可以包含一些程序結(jié)束時(shí)用到的一些文字和標(biāo)記。
現(xiàn)在,我們?cè)賮?lái)創(chuàng)建一個(gè)文件,這個(gè)文件里面是真正的PHP程序代碼。試一下下面的代碼,當(dāng)然,您要確認(rèn)MySQL數(shù)據(jù)庫(kù)服務(wù)器正在運(yùn)行。
| $#@60;?php
$title = "Hello World";
include("header.inc");
$result = mysql_query("SELECT * FROM employees",$db);
echo "$#@60;table border=1$#@62;\n";
echo "$#@60;tr$#@62;$#@60;td$#@62;名字$#@60;/td$#@62;$#@60;td$#@62;職位$#@60;/tr$#@62;\n";
while ($myrow = mysql_fetch_row($result)) {
printf("$#@60;tr$#@62;$#@60;td$#@62;%s %s$#@60;/td$#@62;$#@60;td$#@62;%s$#@60;/tr$#@62;\n", $myrow[1], $myrow[2], $myrow[3]);
}
echo "$#@60;/table$#@62;\n";
include("footer.inc");
?$#@62; |
看到發(fā)生了什么事了嗎?頭文件里的內(nèi)容被合并到程序中,PHP把所有的代碼都執(zhí)行了一遍。注意在包含header.inc頭文件之前$title是如何定義的。在header.inc中的代碼可以訪問(wèn)到它的值。這樣,網(wǎng)頁(yè)的標(biāo)題就被改掉了,F(xiàn)在,您可以在任何程序中使用header.inc頭文件了,您所要做的不過(guò)是在每個(gè)主程序中為$title變量取一個(gè)合適的值。
頭文件、HTML、條件判定語(yǔ)句,還有循環(huán)語(yǔ)句,這些東西加在一些,您就可以用最簡(jiǎn)練的代碼,寫出功能各異的各種復(fù)雜程序來(lái)。在與函數(shù)同時(shí)使用時(shí),頭文件更能發(fā)揮它的效力,我們后面就會(huì)看到。
接下去,我們會(huì)介紹精彩的部分:數(shù)據(jù)校驗(yàn)。
二、 數(shù)據(jù)校驗(yàn)
想象一下這樣的情形:我們把數(shù)據(jù)庫(kù)都設(shè)計(jì)妥當(dāng)了,現(xiàn)在請(qǐng)用戶輸入信息來(lái)寫到數(shù)據(jù)庫(kù)中去。假設(shè)您有一個(gè)字段是要求數(shù)字類型的信息,比如價(jià)格;而某個(gè)可愛的用戶,卻在這一欄里輸入了文字信息,使得您的應(yīng)用程序的執(zhí)行過(guò)程出現(xiàn)了故障。對(duì)您在SQL語(yǔ)句中提供的文字類型的數(shù)據(jù),MySQL數(shù)據(jù)庫(kù)拒不接受,并向您提出了“嚴(yán)正抗議”。
怎么辦呢?您要用數(shù)據(jù)校驗(yàn)來(lái)防止以上狀況發(fā)生。
簡(jiǎn)單地講,數(shù)據(jù)校驗(yàn)是指我們對(duì)數(shù)據(jù)(通常是用戶經(jīng)由HTML表格傳過(guò)來(lái)的)進(jìn)行檢查,看看它是否遵從一定的規(guī)則。規(guī)則可以是多種多樣的,比如某一數(shù)據(jù)元素不能為空,或者要求某一數(shù)據(jù)項(xiàng)的內(nèi)容必須滿足一定的要求(例如前面的例子中要求必須是數(shù)字而不是文字,或者要求電子郵件地址中一定要包含一個(gè)“@”字等等)。
數(shù)據(jù)校驗(yàn)既可以在服務(wù)器一端作,也可以在客戶端來(lái)作。PHP是用來(lái)作服務(wù)器一端的數(shù)據(jù)校驗(yàn)的,而JavaScript/" target="_blank">JavaScript或其他客戶端腳本編程語(yǔ)言則能夠提供客戶端的數(shù)據(jù)校驗(yàn)功能。本文說(shuō)的是PHP,所以我們?cè)谶@里著重介紹服務(wù)器端的校驗(yàn)。如果您想找一些現(xiàn)成的、在客戶端運(yùn)行的數(shù)據(jù)較驗(yàn)程序,那您可以去網(wǎng)猴程序庫(kù)看看。
暫時(shí)把數(shù)據(jù)庫(kù)放在一邊不談,我們先來(lái)說(shuō)說(shuō)PHP的數(shù)據(jù)校驗(yàn)方法。如果您愿意(或者說(shuō),您想記錄我們要校驗(yàn)的那些數(shù)據(jù)的話),您可以在前面所建的員工數(shù)據(jù)庫(kù)的里加入其他字段,很簡(jiǎn)單,用MySQL的ALTER 語(yǔ)句就行了。
有好幾個(gè)PHP功能都可以用來(lái)作數(shù)據(jù)校驗(yàn)的工作,有些很簡(jiǎn)單,有些則復(fù)雜一些。其中strlen()是比較簡(jiǎn)單的一個(gè)函數(shù),它能夠告訴我們一個(gè)變量的長(zhǎng)度。
更復(fù)雜一點(diǎn)兒的是ereg(),這個(gè)函數(shù)可以處理完整的常規(guī)表達(dá)式來(lái)進(jìn)行復(fù)雜的校驗(yàn)。我不想就常規(guī)表達(dá)式講得太深,因?yàn)樵S多書都是專門寫這個(gè)問(wèn)題的。不過(guò)我會(huì)在下一頁(yè)中給出一些簡(jiǎn)單的例子。
我們先從一個(gè)簡(jiǎn)單的例子開始吧。下面這個(gè)程序要檢查一個(gè)變量是否存在。
[page_break]
| $#@60;html$#@62;
$#@60;body$#@62;
$#@60;?php
if ($submit) {
if (!$first !$last) {
$error = "對(duì)不起,您必須填寫所有的欄目!"; } else {
// 處理表格輸入內(nèi)容
echo "謝謝!";
} }
if (!$submit $error) {
echo $error;
?$#@62;
$#@60;P$#@62;
$#@60;form method="post" action="$#@60;?php echo $PHP_SELF ?$#@62;"$#@62;
第一欄: $#@60;input type="text" name="名" value="$#@60;?php echo $first ?$#@62;"$#@62;$#@60;br$#@62;
第二欄: $#@60;input type="text" name="姓" value="$#@60;?php echo $last ?$#@62;"$#@62;$#@60;br$#@62;
$#@60;input type="Submit" name="submit" value="輸入信息"$#@62;
$#@60;/form$#@62;
$#@60;?php
} // if結(jié)束
?$#@62;
$#@60;/body$#@62;
$#@60;/html$#@62;
|
這段程序中關(guān)鍵的地方是嵌套的條件判定語(yǔ)句。第一層檢查用戶是否按了發(fā)送數(shù)據(jù)的按鈕。如果是,程序接著檢查$first和$last兩個(gè)變量是否都存在。那個(gè) 符號(hào)表示“或”,而 ! 符號(hào)表示“非”。那一句程序用一般語(yǔ)言描述就是“如果$first不存在或者$last不存在,那么就把 $error變量置成下面的值!
接下來(lái),我們?cè)龠M(jìn)一步,檢查一段文字的長(zhǎng)度。這對(duì)用戶口令的檢查是很有必要的,因?yàn)槟幌胱屇承⿷卸璧挠脩糨斎胫挥幸、兩個(gè)字的口令,可能會(huì)要求他們輸入六位長(zhǎng)的口令。
我們已經(jīng)講到strlen()這個(gè)函數(shù)了。它只是簡(jiǎn)單地返回一個(gè)數(shù)字,該數(shù)字等于被測(cè)變量中所包含的字符個(gè)數(shù)。這里,我修改一下上面的程序,檢查一下$first與$last的長(zhǎng)度。
| $#@60;html$#@62;
$#@60;body$#@62;
$#@60;?php
if ($submit) {
if (strlen($first) $#@60; 6 strlen($last) $#@60; 6) {
$error = "對(duì)不起,您必須填寫所有欄目!";
} else {
// 處理表格輸入內(nèi)容
echo "謝謝!";
}
}
if (!$submit $error) {
echo $error;
?$#@62;
$#@60;P$#@62;
$#@60;form method="post" action="$#@60;?php echo $PHP_SELF ?$#@62;"$#@62;
第一欄: $#@60;input type="text" name="名" value="$#@60;?php echo $first ?$#@62;"$#@62;$#@60;br$#@62;
第二欄: $#@60;input type="text" name="姓" value="$#@60;?php echo $last ?$#@62;"$#@62;$#@60;br$#@62;
$#@60;input type="Submit" name="submit" value="輸入信息"$#@62;
$#@60;/form$#@62;
$#@60;?php
} // if結(jié)束
?$#@62;
$#@60;/body$#@62;
$#@60;/html$#@62;
|
您可以執(zhí)行一下這段程序,輸入六個(gè)字或少于六個(gè)字的內(nèi)容。這種校驗(yàn)很簡(jiǎn)單,但很有效。