六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

php與mysql3日通-第3天

[摘要]一、基本函數   歡迎來到本教程的第三課,也是最后一課。如果您已經學過第一課和第二課,那么您已經掌握了MySQL和PHP的安裝及編程的基本知識。下面我們要介紹PHP的一些其他函數,這些函數可能會對您...
一、基本函數

  歡迎來到本教程的第三課,也是最后一課。如果您已經學過第一課和第二課,那么您已經掌握了MySQL和PHP的安裝及編程的基本知識。下面我們要介紹PHP的一些其他函數,這些函數可能會對您有用,使您的開發過程更加簡單。首先我們來看看頭文件。

  大家應該知道頭文件的一些基本概念吧?頭文件是一個外部文件,它的內容被包含到主程序中。方法也十分簡單:在程序文件中引用頭文件名,這個頭文件就會包含進來了。在PHP中使用頭文件,會涉及兩個函數:include()和require()。這兩個函數差別很小,卻很重要,所以我們要認真研究一下。require()函數工作方式與XSSI相類似;不管在程序的哪個部分使用了這個函數,只有程序一開始運行,頭文件的內容就被作為程序本身的一部分來處理。因此,如果您在一個條件判定語句中使用了require()函數,那么即使這個條件即使不為真,頭文件也會被包含進來。

  而include()函數只是在執行到這一條語句時才會把頭文件內容包含進來。如果程序沒運行到這里,那PHP是不會管它的。這就意味著,您在條件判定部分使用include時,它會完全按照您希望的那樣工作。

  還有,如果您用了require()函數,而您指定的頭文件并不存在,那么程序將會停止運行并產生錯誤。如果您用了include(),程序會產生一個警告信息,但是會繼續運行。您可以親自試一下,運行下面的程序,然后把include()換成require(),再比較兩個程序運行的結果。

<html>
<body>
<?php
include("emptyfile.inc");
echo "Hello World";
?>
</body>
</html>

 
 我喜歡把頭文件的后綴名起成.inc,這樣就可以把頭文件和一般的程序區分開來。如果您也這么做,那么請您修改Web服務器軟件的配置文件,使它能夠把.inc文件也當作PHP文件來處理。否則,黑客們也許會猜到您的頭文件名,然后用瀏覽器把頭文件內容以純文本格式顯示出來。此時如果您的頭文件中有些機密信息(如數據庫口令等)那就糟糕了。

  那么,您用頭文件來做什么呢?很簡單!把對所有程序都通用的那些內容放到頭文件里。象HTML文件頭啦,腳注啦,數據庫連接代碼啦,還有您自己定義的一些函數什么的。把下面的文字拷貝到一個文件中,保存為header.inc。

<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
?>
<html>
<head>
<title>
<?php echo $title ?>
</title>
</head>
<body>
<center><h2><?php echo $title ?></h2></center>


  然后再創建另外一個文件,名字是footer.txt,該文件可以包含一些程序結束時用到的一些文字和標記。

  現在,我們再來創建一個文件,這個文件里面是真正的PHP程序代碼。試一下下面的代碼,當然,您要確認MySQL數據庫服務器正在運行。

<?php
$title = "Hello World";
include("header.inc");
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>\n";
echo "<tr><td>名字</td><td>職位</tr>\n";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s %s</td><td>%s</tr>\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(),這個函數可以處理完整的常規表達式來進行復雜的校驗。我不想就常規表達式講得太深,因為許多書都是專門寫這個問題的。不過我會在下一頁中給出一些簡單的例子。

  我們先從一個簡單的例子開始吧。下面這個程序要檢查一個變量是否存在。

<html>
<body>
<?php
if ($submit) {
if (!$first !$last) {
$error = "對不起,您必須填寫所有的欄目!";
} else {
// 處理表格輸入內容
echo "謝謝!";
}
}
if (!$submit $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
第一欄: <input type="text" name="名" value="<?php echo $first ?>"><br>
第二欄: <input type="text" name="姓" value="<?php echo $last ?>"><br>
<input type="Submit" name="submit" value="輸入信息">
</form>
<?php
} // if結束
?>
</body>
</html>


  這段程序中關鍵的地方是嵌套的條件判定語句。第一層檢查用戶是否按了發送數據的按鈕。如果是,程序接著檢查$first和$last兩個變量是否都存在。那個 符號表示“或”,而 ! 符號表示“非”。那一句程序用一般語言描述就是“如果$first不存在或者$last不存在,那么就把 $error變量置成下面的值。”

  接下來,我們再進一步,檢查一段文字的長度。這對用戶口令的檢查是很有必要的,因為您不想讓某些懶惰的用戶輸入只有一、兩個字的口令,可能會要求他們輸入六位長的口令。

  我們已經講到strlen()這個函數了。它只是簡單地返回一個數字,該數字等于被測變量中所包含的字符個數。這里,我修改一下上面的程序,檢查一下$first與$last的長度。

<html>
<body>
<?php
if ($submit) {
if (strlen($first) < 6 strlen($last) < 6) {
$error = "對不起,您必須填寫所有欄目!";
} else {
// 處理表格輸入內容
echo "謝謝!";
}
}
if (!$submit $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
第一欄: <input type="text" name="名" value="<?php echo $first ?>"><br>
第二欄: <input type="text" name="姓" value="<?php echo $last ?>"><br>
<input type="Submit" name="submit" value="輸入信息">
</form>
<?php
} // if結束
?>
</body>
</html>


  您可以執行一下這段程序,輸入六個字或少于六個字的內容。這種校驗很簡單,但很有效?>

三、 處理常規表達式

  我們稍微講講用ereg()和eregi()兩個函數處理常規表達式。前面我已經提過,這些函數有的很簡單,有的很復雜,看您的實際需要而定。

  使用常規表達式,您可以對一個字符串進行檢查,搜索其中的一些結構模式,判定這些模式是否滿足您的規定。最普遍的用法包括檢查電子郵件地址是否有效(當然,即使這種辦法判定有效,也不能保證郵件地址真的存在)。

  我們在這里不細究常規表達式的復雜細節了,僅僅給出幾個實例。您可以使用上一頁中用過的表格 - 把相應的程序代碼復制過來,添加到下面的代碼段中,就可以看到它是怎樣工作的。

  首先,我們要確保表格中各欄只能輸入字母。下面的常規表達式在用戶輸入一個或多個小寫字母時判定為真,而輸入數字是不允許的:

if (!ereg("[a-Z]", $first) !ereg("[a-Z]", $last)) {

現在我們更進一步,檢查字符串的長度是否是四到六位字符長。用[[:alpha:]]是檢查字符是不是字母的簡單方式。大括號內的數字檢查字符個數。還要說明的是,^ 和 $ 分別代表字符串的開始和結束。

if (!ereg("^[[:alpha:]]{4,6}$", $first) !ereg("^[[:alpha:]]{4,6}$", $last)) {

最后,我們來構造一個常規表達式,來檢驗電子郵件地址的有效性。這種檢驗方式的效果已經引發了相當多的討論。沒有什么東西是十全十美的,不過我下面給出的這段程序還是十分奏效的。

  我這段寶貝程序是從PHP郵件討論組上得來的。那可是個好去處 - 常去看看吧。不錯,這段程序看起來是有點亂糟糟的。

if (!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{ }~]+'.'@'.'[-!#$%&\'*+\/0-9=?A-Z^_`a-z{ }~]+\.'.
'[-!#$%&\'*+\./0-9=?A-Z^_`a-z{ }~]+$', $last)) {


別花太多時間來細究這段代碼了,還是先到下一頁內容吧。

四、 簡便方法

  前面的常規表達式怎么樣?很有意思,是吧?要是在每個需要檢查電子郵件地址的程序里都寫上這么一段程序,那才真叫有意思呢?!想想看吧,得寫那么亂七八糟的一段程序,還得寫上那么多遍!...不過,當然了,還有更簡便的方法。

  還記得前面我們學過的頭文件嗎?它能讓我們寫一段程序,象是這個電子郵件地址的檢查程序,然后把這段程序包含進多個程序里面去。這樣,我們要改寫這段程序時,只須改動一處就行了,不用修改多個文件。

  但是,要做到這一點,我們必須用到函數。

  我們已經用過很多次函數了。每次我們查詢數據庫或檢查字符串長度時,我們都是用函數來做的。這些函數是PHP自帶的。如果您是位熱心的程序員,您可以用自己編寫的函數來擴充PHP本身的功能。但對本教程而言,這部分內容是太過高深了一點。我們要創建的函數不是那一種,而是寫在PHP腳本程序內部的函數。

  函數就是一段程序代碼,我們可以把一個或多個值傳給這段代碼,然后這段代碼會處理我們傳給它的數據并返回一個值。根據實際需要,函數可以很簡單,也可以十分復雜。但是只要我們傳進去一個數,然后能得到一個數,您管它里面有是復雜還是簡單呢!這就是函數的可愛之處。

  PHP里的函數與C語言里的函數表現差不多。當我們定義函數時,必須指明函數需要接收什么樣的數據。一開始好象不太好理解為什么它要接收數據進去,不過這樣可以防止發生一些怪異的問題。函數之所以能做到這一點,是因為函數里面的變量都是私有變量,也就是說,它只在該函數內部存在。例如,您在程序中有一個變量叫$myname,如果您創建了一個函數,想讓這個函數也使用那個$myname變量(值也相同),那是不行的。您可以在函數內部創建一個變量,名字也叫$myname,這兩個變量可以各平相處,而各自取不同的值。不過我可不建議您這么做!您如果真的這么做了,等半年后您再來修改這樣的程序時,您可能就會被弄糊涂了。

  那我們現在就來創建一個函數,先來個簡單的。我們要給它取個名字,指定它要接收什么的變量。在調用這個函數之前,我們還得定義這個函數。  

<html>
<body>
<?php
function addnum($first, $second) {
$newnum = $first + $second;
return $newnum;
}
echo addnum(4,5);
?>
</body>
</html>


這就行了!首先,我們創建了第一個自己的函數。我們定義了兩個新變量,$first和$second,注意它們是怎樣被定義的。在調用這個函數時,要給這兩個變量按它們出現的順序賦好值 - 4賦給$first,5賦給$second。然后我們簡單地把這兩個數加在一起,返回結果。“返回”在這里的意思是把結果送回去。在程序最后部分我們把數字9顯示出來。

  我們再來創建一個函數,讓它對我們的數據庫應用有點幫助。一個能妥善處理錯誤的函數怎么樣?試試下面的程序:

<html>
<body>
<?php
function do_error($error) {
echo "噢,好象有點兒問題...<br>";
echo "系統報告的錯誤是:$error.\n<br>";
echo "最好是暫時關閉網站并通知系統管理員。";
die;
}
if (!$db = @mysql_connect("localhost","user", "password")) {
$db_error = "無法連接到MySQL數據庫";
do_error($db_error);
}
?>
</body>
</html>


  在運行程序之前,試試關閉MySQL數據庫,或使用錯誤的用戶名或口令。您會看到友好的、有用的錯誤信息 。細心的朋友會注意到在mysql_connect()函數之前的那個@符號。它會抑制系統錯誤信息,使得程序只能從do_error()函數那里得到有關的錯誤信息。您還會注意到,我們可以把一個在別處定義的變量作為參數傳給函數,而不是在調用時直接賦一個值。

  還記得我過函數使用的是私有變量吧?這話說得不完全對。事實上,您可以讓函數訪問到函數外面的變量。您可能要寫一個函數,用它來查詢數據庫,然后把結果顯示在多個網頁中。您不想每次都把數據庫連接標識都傳給函數。在這種情況下,您可以把連接標識定義成一個全局的變量。例如:

<html>
<body>
<?php
function db_query($sql) {
global $db;
$result = mysql_query($sql,$db);
return $result;
}
$sql = "SELECT * FROM mytable";
$result = db_query($sql);
?>
</body>
</html>

 
 這是個很簡單的函數,但重要的是,您在調用這個函數時,不必傳遞$db變量 - 您可以通過 global這個字使得函數可以訪問到該變量。在這條語句中您可以定義多個全局變量,各個全局變量之間用逗號隔開。

  最后,您可以使用可選參數,這樣看起來您已經是真正的專家了。這里面關鍵的一點是,在函數中定義參數時要給它指定一個缺省值。然后您在調用這個函數時,如果不為該參數變量指定其他值,那么函數會自動把缺省值賦給這個變量。如果您指定了其他值,那么缺省值就不起作用了。

  不太明白?比方說,您在連接數據庫時,幾乎總是連接到相同的服務器,并且使用相同的用戶名和口令。不過有時候,您也需要連接到其他的服務器。看看下面的程序:

<html>
<body>
<?php
function db_connect($host = "localhost", $user="username", $pass="graeme") {
$db = mysql_connect($host, $username, $password);
return $db;
}
$old_db = db_connect();
$new_host = "site.com";
$new_db = db_connect($new_host);
?>
</body>
</html>


  很“酷”是不是?在定義函數時,函數內部用到的變量也定義好了。第一次調用這個函數時,全部參數變量都是用的缺省值。第二次調用時,服務器名變了,而用戶名和口令沒有變。真是太棒了!

  想想您在什么地方還能用到函數。您可以用函數來作數據校驗,來完成常用的功能,等等。在對Web網頁上顯示的文字作處理時,我用到了很多函數。我可以一次完成對文字的檢查、解析和修改,來加入換行符和HTML標記等。

  現在,剩下的就是我要給您的一些忠告了。

五、進階技巧

  談起數據庫開發,我們有很多東西要學。如果您還沒有學習過怎樣進行數據庫設計,和怎樣在不同的平臺上可靠地運行數據庫,那么請您趕快去找本這方面的好書來讀一讀。這方面的能力會帶給您無法估量的好處,從長遠的眼光看,它會為您節省大量的時間與精力。還有,認真學學MySQL。這是一個復雜而有趣的數據庫,有很多不錯的文檔。學學數據庫的表結構、數據類型,還有SQL。如果您真正掌握了SQL,您可以完成相當多的實際工作。

  最后,還有PHP。您想要的一切幾乎都可以在PHP的網站上找到,包括全面的文檔、郵件討論組的討論內容、程序代碼庫,等等。學習PHP的一個絕好的辦法是研究用戶手冊中給出的實例,并查閱網上的代碼。網友們發表的代碼包括許多函數和類,您可以在自己的程序中直接使用,而不必自己從頭來過。另外,如果您遇到問題,郵件討論組是一個非常值得利用的資源。PHP的開發人員自己也會參加郵件討論組,還有許多經驗豐富的高手們,他們都可以幫助您解決問題。




主站蜘蛛池模板: 特黄特色的大片观看免费视频 | 亚洲好看站 | 婷婷综合久久中文字幕 | 一级一级女人真片 | 五月婷婷一区二区 | 日韩精品魔镜号系列在线观看 | 亚洲日本在线观看网址 | 亚洲一区在线免费观看 | 四虎精品成人免费观看 | 伊人色在线观看 | 人人爽天天碰天天躁夜夜躁 | 中文国产| 亚洲乱码一二三四区国产 | 综合激情婷婷 | 色综合九九 | 日本福利视频一区 | 青青草免费公开视频 | 青青青手机在线视频 | 四虎永久免费地址在线观看 | 色视频在线观看免费 | 伊人二区 | 欧美在线资源 | 四虎永久在线日韩精品观看 | 天天草综合网 | 色综合久久婷婷天天 | 亚洲天堂在线观看完整版 | 色偷偷亚洲第一成人综合网址 | 欧美在线播放视频 | 日韩久操| 日韩 欧美 中文字幕 不卡 | 日韩三级在线观看视频 | 亚洲一区二区成人 | 婷婷六月激情 | 网站在线观看高清免费 | 日本韩国欧美在线观看 | 日本强不卡在线观看 | 夜色99| 一级做a免费观看大全 | 色呦呦在线免费观看 | 欧美一区二区三区久久综合 | 在线不欧美 |