HTML 與 PHP 、MySQL 的互動
為什麼要用到資料庫?
World Wide Web (WWW) 不只是一個提供資訊的地方。如果你有什麼東西,作一個網站,同樣可以和全世界的人一起分享。但是,這並不是一件很容易的事。當網站越做越大時,你可能會遇到這樣的問題:
網站包含了太多的東西,使得訪客無法很快得得到他們想要的東西。這個問題在某種程度上對一個網站而言是致命的。
訪客想要向你提供信息,而且這些資訊必須保存下來以備後用。
上面的兩個問題,都可以透過資料庫來解決!
在 WWW 的世界中,資料庫無所不在。大如 Yahoo! , Amazon , eBay ,小到一個簡單的留言板,都可以看到資料庫的用途。甚至可以說,資料庫是一切進階應用的基礎。
為什麼要用 PHP 和 MYSQL
就我所知,幾乎所有的主要的商業網站資料庫都是基於 SQL 的。其中最受歡迎的可能得算 Oracle 了。它很有威力,當然,也價格不菲。 SQL 不是一個應用程序,而是一種語言,它是 Structured Query Language (結構化查詢語言)的簡寫,用來對資料庫進行操作和查詢的。
在最近的幾年中,一些公司開發出了「開放程式碼」的 SQL 應用程序,其中最著名的可能算得上 MySQL 了。它不僅僅是免費的,對於一般的中小型資料庫應用,它的表現並不比 Oracle 遜色。
要在一個網站上執行 MySQL ,你需要一種腳本語言來和資料庫互動。在過去, Perl 是最受歡迎的。但現在看起來 PHP 似乎比較出色。不要問我他們之間有什麼區別 ?? 過去我用 Perl ,它也工作的很好,但是現在好像每個人都喜歡用 PHP 了。它的流行當然有它的道理。
需要的軟體
這部分的內容, ChinaByte 網路學院前些時候的文章中已有介紹。讀者可以參考《為 win98 設定本地 PHP 開發》一文。這兒不再詳細介紹。
HTML 和 PHP
作 者 : 揚眉 編譯 本文點擊次數:398
我們來看看 PHP 是如何運作的。看看下面的這段程式碼:
print "Hello, world.";
?>
當請求這個頁面的時候,它將在瀏覽器中顯示「 Hello , world 」。
可以看到, PHP 腳本是嵌入在 HTML 檔案中的。它以“ ”結束。不僅如此,我們甚至可以把HTML 標籤也嵌入在PHP 腳本中:
print "";
print " ";
print "Hello, world.";
print "";
print "";
?>
兩種方法殊途同歸,效果是一樣的。但是在一些特別的情況下,選擇其中的一種要比較方便。
PHP 的prints 語句
作者: 揚眉編譯本文點擊次數:398
PHP 與HTML 最簡單的互動是透過print 語句來實現的:
?
print "Hello, world.";
?>
print 是最為簡單也使用的最多的函數,用來把一些文字顯示在瀏覽器視窗中, echo 函數和print 相類似,但你可以用“,”號來分隔多個要顯示得內容,這在混合字串常數和變數的顯示時要方便一些。
還有一個 printf 函數,用來格式化數字的輸出。可以把一個數當作整數,或是用科學計數法顯示出來。
在這幾個函數中,圓括號的使用與否是不同的:
echo 一定不能帶有圓括號
printf 卻一定要有
print 可有可無
要顯示一個字串或一個數字很簡單,只要把變數名或常數跟在print 語句後面就可以了。但是,如果要顯示一個數組,是不是也是寫成這樣呢:
print $myarray;
它輸出的結果將是“ Array ”, PHP 告訴你 $myarray 是一個數組。這在你拿不准一個變數是否是數組時會有一些用處,但是現在我們希望看到的是數組的內容。
你可以用 implode 函數來把一個陣列轉換成字串。它包含兩個參數,第一個是數組變數名,第二個是數組內容的分隔符號。當轉換完成之後,陣列的內容被分隔符號連結起來形成一個字串:
$implodedarray = implode ($myarray, ", ");
print $implodedarray;
也可以用array_walk 函數來實現陣列的顯示。這個函數對數組的每個內容執行同一個函數運算。例如:
function printelement ($element)
{
print ("$element");
}
array_walk($myarray, "printelement");
PHP 如何向MySQL 發送資料
作者: 揚眉編譯本文點擊次數:398
你應該對HTML 表單比較了解了,下面的一段程式碼是一個很簡單的HTML 表單:
姓:
名:
㟎>你輸入當你數據,並按下submit 按鈕後,這個表單將把數據傳送到submitform.php3 。再由這個PHP 腳本來處理收到的數據,以下就是submitform.php3 的程式碼:
mysql_connect (localhost, username, password);
mysql_select_db (dbname);
mysql_query ("INSERT INTO tablename,fir>
VALUES ('$first_name', '$last_name')
");
print ($first_name);
print (" ")
;
print ($last_name);
print ("");
print (" 感謝填寫登錄"); ?> 在程式碼的第三行中的"username" 和"password" 分別代表你登陸MySQL 資料庫的帳號和密碼。在第五行中的 "dbname" 表示 MySQL 資料庫的名稱。在第十三行的 "tablename" 是資料庫中的一個資料表的名稱。 當你按下 submit 之後,可以看到你輸入的名字被顯示在一個新的頁面中。再看瀏覽器的URL 欄,它的內容應該是像這樣的: … /submitform.php3?first_name=Fred&last_name=Flintstone 因為我們用到的是表單GET方法,因此資料是透過URL 傳送到submitform.php3 的。顯然, GET 方法是有限制的,當要傳遞的內容很多時,就不能用 GET 了,只能用 POST 方法。但不管用什麼方法,當資料傳送完成後, PHP 自動的為每個表單中的欄位建立一個和他們的名字(表單的 name 屬性)相同的變數。
PHP 變數都已用一個美元符號開頭的,這樣,在submitform.php3 腳本處理的過程中,就會有$first_name 和$last_name 這兩個變數了,變數的內容就是你輸入的內容。
我們來檢查一下你輸入的名字是否真的被輸入到資料庫中了。啟動MySQL, 在mysql> 提示下輸入:
mysql> select * from tablename;
你應該可以得到一個表,內容就是你剛才輸入的了:
------------ ------------
| first_name | last_name |
-------- ---- ------------
| 柳| 如風
------------ ----- -------
1 rows in set (0.00 sec)
我們再來分析submitform.php3 是如何運作的:
腳本的開始兩行是:
mysql_connect (localhost, username, password);
mysql_select_db (dbname);My
下面的一行是執行一個SQL 語句:
mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUEUES ('$first_name'name'name)'
");
mysql_query 函數就是用來對選取的資料庫執行一個SQL 查詢。你可以在 mysql_query 函數中執行任何的 SQL 語句。被執行的 SQL 語句必須當作一個字串用雙引號括起來,在其中的變數要用單引號括起來。
有一個要注意的事情: MySQL 的語句要用一個分號 (;) 結束,一行 PHP 程式碼同樣也是這樣,但是在 PHP 腳本中的 MySQL 語句是不能有分號的。也就是說,當你在mysql> 的提示下輸入MySQL 指令,你應該要加上分號:
INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name' , '$last_name');
但是如果這個指令出現在PHP 腳本中,就要去掉那個分號了。之所以這樣做,是因為有的語句,如 SELECT 和 INSERT ,有沒有分號都可以工作。但還有一些語句,如 UPDATE ,加上分號就不行了。為了避免麻煩,記住這條規則就好了。
PHP 如何從MySQL 中提取資料
現在我們建立另一個HTML 表單來執行這個任務:
請輸入您的查詢內容:
姓氏:
名:
同樣,還要有一個php 腳本來處理這個表單,我們再建立一個searchform.php3 檔案:
mysql_connect (localhost, username, password);
mysql_select_db (dbname);
if (==first_name =="==" 🎜>{$first_name = '%';}
if ($last_name == "")
{$last_name = '%';}
$result = mysql_query ("SELECT * FROM tablename
WHERE first_name LIKE '$first_name%'
AND last_name LIKE '$last_name%'
AND last_name LIKE '$last_name%'
");
do {
print $row["first_name"];
print (" ");
print $row["last_name"];
print ("");
} while($row = mysql_fetch_array($result));
} else {print " 對不起,再我們的資料庫中,沒有找到符合的紀錄。 ";}
?>
當你在表單中輸入了要檢索的內容,再按下SUBMIT 按鈕後,就會進入一個新的頁面,其中列出了所有匹配的搜尋結果。和上面講到的一樣,先是建立資料庫連接,然後選定資料庫和資料表,這些是每個資料庫應用所必需的。 "")
{$first_name = '%';}
if ($last_name == "")
{$last_name = '%';}
這幾行用來檢查表單的各字段是否為空。號是賦值號,兩個等號才代表邏輯等於。另外要注意的是:當 IF 後條件為真時,後面要執行的語句是放在「 { 」和「 } 」中的,並且其中的每一語句後面都要加上分號表示語句結束。
百分號 % 是 SQL 語言的通配符,理解了之一點後,就該知道這兩行的意思了:如果「 FIRST_NAME 」欄位為空,那麼將列出所有的 FIRST_NAME 。後面的兩句話也是同樣的意思。
$result = mysql_query ("SELECT * FROM tablename
WHERE first_name LIKE '$first_name%'
AND last_name LIKE '$last_name%' >");
這一行完成了搜尋的大部分工作。當mysql_query 函數完成一個查詢後,它會傳回一個整數標誌。
查詢從所有的記錄中選出那些first_name欄位和$first_name 變數相同,且last_name 欄位和$last_name 變數值也相同的記錄,放到暫存的記錄集中,並用傳回的整數作為這個記錄集的標誌。 mysql_fetch_array($result)) {
do {
print $row["first_name"];
print (" ");
print $ row["last_name"];
print ("");
} while($row = mysql_fetch_array($result));
} else { print " 對不起,再我們的資料庫中,沒有找到符合的紀錄。 ";}
這是最後的一步,就是顯示部分了。mysql_fetch_array 函數先提取出查詢結果的第一行的內容,在用PRINT 語句顯示出來。這個函數的參數就是mysql_query 函數傳回的整數標誌。查詢的結果欄位來填充,陣列的每一個分量對應於查詢結果的每一個欄位。的語句:
do {
print $row["first_name"];
print (" ");
print $row["last_name "];
print ("");
} while($row = mysql_fetch_array($result));
這是一個do … while 迴圈。到的是do … while 而不是while 循環了。 : 揚眉編譯本文點擊次數:398
現在我們建立另外一個HTML 表單來執行這個任務:
請輸入您的查詢內容:
姓:
名:
一個php 腳本來處理這個表單,我們再建立一個searchform.php3 檔案:
mysql_connect (localhost, username, password);
mysql_select_db (dbname);
if ($first_name == "")
if ($first_name == "")
if ($first_name == "")
= '%';}
if ($last_name == "")
{$last_name = '%';}
$result = mysql_query ("SELECT * FROM tablename
WHERE first_name LIKE '$first_name%'
AND last_name LIKE '$last_name%'
");
do {
print $row["first_name"];
print (" ");
print $ row["last_name"];
print ("");
} while($row = mysql_fetch_array($result));
} else { print " 對不起,再我們的資料庫中,沒有找到符合的紀錄。 ";}
?>
當你在表單中輸入了要檢索的內容,再按下SUBMIT 按鈕後,就會進入一個新的頁面,其中列出了所有匹配的搜尋結果。和上面講到的一樣,先是建立資料庫連接,然後選定資料庫和資料表,這些是每個資料庫應用所必需的。然後有這樣的幾個語句:
if ($first_name == "")
{$first_name = '%';}
if ($last_name == "")
{$last_name = '%';}
這幾行用來檢查表單的各欄位是否為空。要注意的是那兩個等號,因為 PHP 的語法大多源自於 C 語言,這兒等號的用法也和 C 一樣:一個等號是賦值號,兩個等號才代表邏輯等於。另外要注意的是:當 IF 後條件為真時,後面要執行的語句是放在「 { 」和「 } 」中的,並且其中的每一語句後面都要加上分號表示語句結束。
百分號 % 是 SQL 語言的通配符,理解了之一點後,就該知道這兩行的意思了:如果「 FIRST_NAME 」欄位為空,那麼將列出所有的 FIRST_NAME 。後面的兩句話也是同樣的意思。
$result = mysql_query ("SELECT * FROM tablename
WHERE first_name LIKE '$first_name%'
AND last_name LIKE '$last_name%' >");
這一行完成了搜尋的大部分工作。當mysql_query 函數完成一個查詢後,它會傳回一個整數標誌。
查詢從所有的記錄中選出那些first_name欄位和$first_name 變數相同,且last_name 欄位和$last_name 變數值也相同的記錄,放到暫存的記錄集中,並用傳回的整數作為這個記錄集的標誌。 mysql_fetch_array($result)) {
do {
print $row["first_name"];
print (" ");
print $ row["last_name"];
print ("");
} while($row = mysql_fetch_array($result));
} else { print " 對不起,再我們的資料庫中,沒有找到符合的紀錄。 ";}
這是最後的一步,就是顯示部分了。mysql_fetch_array 函數先提取出查詢結果的第一行的內容,在用PRINT 語句顯示出來。這個函數的參數就是mysql_query 函數傳回的整數標誌。查詢的結果欄位來填充,陣列的每一個分量對應於查詢結果的每一個欄位。的語句:
do {
print $row["first_name"];
print (" ");
print $row["last_name "];
print ("");
} while($row = mysql_fetch_array($result));
這是一個do … while 迴圈。到的是do … while 而不是while 迴圈了。 ;
print $row["last_name"];
print ("");
然後就是檢查while 條件是否滿足。 ,來得到目前紀錄的內容。傳回的數組,不僅可以用字段名來調用,也可以像一般的數組那樣,用下標來引用數組的各個分量。 0];
print (" ");
print $row[1];
print ("");
我們也可以用echo 函數來把這四條語句寫的緊湊一些:
echo $row[0], " ", $row[1], "";
當沒有任何符合的紀錄被找到時,在$row 中就不會有任何內容,這時就會調用if 語句的else 子句了:
else {print " 對不起,再我們的資料庫中,沒有找到符合的紀錄。 ";}
檢查查詢是否正常運作
作者: 揚眉編譯本文點擊次數:398
你的那些SELECT , DELETE 或者其它的查詢是否能夠正常工作呢?這是必須要搞清楚的,並且,千萬不要輕易的就下結論。
檢查一個INSERT 查詢相對的簡單一些:
$result = mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name','$ ' last_name')
");
if(!$result)
{
echo "INSERT 查詢失敗: ", mysql_error();
exit;
}
但是這個檢查的方法對於SELECT 查詢是行不通的,這時,應該行不通這樣作:
$selectresult = mysql_query ("SELECT * FROM tablename
WHERE first_name = '$first_name'
AND last_name = '$first_name'
AND last_name = '$ >");
if (mysql_num_rows($selectresult) == 1)
{
print "SELECT 查詢成功。 🎜>
elseif (mysql_num_rows($selectresult) == 0)
{
print "SELECT 查詢失敗。";
ex; >}
而對於DELETE 查詢,就應該是這樣了:
$deleteresult = mysql_query ("DELETE FROM tablename
WHERE first_name = '$
AND last_name = '$last_name'
");
if (mysql_affected_rows($deleteresult) == 1)
{ 🎜>
print "DELETE 查詢成功";
}
elseif (mysql_affected_rows($deleteresult) != 1)
{
"DELETE 查詢失敗";
exit;
}
http://www.bkjia.com/PHPjc/315134.html
www.bkjia.com
true
http: //www.bkjia.com/PHPjc/315134.html