|
< html>
< body>
< form action=submitform.php3 method=GET>
姓 : < input type=text name=first_name size=25 maxlength=25>
名 : < input type=text name=last_name size=25 maxlength=25>
< p>
< input type=submit>
< /form>
< /body>
< /html>
當你輸入數(shù)據(jù),并按下 submit 按鈕后,這個表單將把數(shù)據(jù)發(fā)送到 submitform.php3 。再由這個 php 腳本來處理收到的數(shù)據(jù),下面就是 submitform.php3 的代碼:
< html>
< body>
< ?php
mysql_connect (localhost, username, password);
mysql_select_db (dbname);
mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name')
");
print ($first_name);
print (" ");
print ($last_name);
print ("< p>");
print (" 感謝填寫注冊表 ");
?>
< /body>
< /html>
在代碼的第三行中的 "username" 和 "password" 分別代表你登陸 MySQL 數(shù)據(jù)庫的賬號和密碼。在第五行中的 "dbname" 表示 MySQL 數(shù)據(jù)庫的名稱。在第十三行中的 "tablename" 是數(shù)據(jù)庫中的一個數(shù)據(jù)表的名稱。
當你按下 submit 之后,可以看到你輸入的名字被顯示在一個新的頁面中。再看一看瀏覽器的 URL 欄,它的內(nèi)容應(yīng)該是像這樣的:
… /submitform.php3?first_name=Fred&last_name=Flintstone
因為我們用到的是表單 GET 方法,因此數(shù)據(jù)是通過 URL 來傳送到 submitform.php3 的。顯然, GET 方法是有局限性的,當要傳遞的內(nèi)容很多時,就不能用 GET 了,只能用 POST 方法。但不管用什么方法,當數(shù)據(jù)傳送完成后, php 自動的為每一個表單中的字段建立一個和他們的名字(表單的 name 屬性)相同的變量。
php 變量都已用一個美元符號開頭的,這樣,在 submitform.php3 腳本處理的過程中,就會有 $first_name 和 $last_name 這兩個變量了,變量的內(nèi)容就是你輸入的內(nèi)容。
我們來檢查一下你輸入的名字是否真的被輸入到數(shù)據(jù)庫中了。啟動 MySQL, 在 mysql> 提示符下輸入:
mysql> select * from tablename;
你應(yīng)該可以得到一個表,內(nèi)容就是你剛才輸入的了:
+------------+------------+
| first_name | last_name |
+------------+------------+
| 柳 | 如風
+------------+------------+
1 rows in set (0.00 sec)
我們再來分析一下 submitform.php3 是如何工作的:
腳本的開始兩行是:
mysql_connect (localhost, username, password);
mysql_select_db (dbname);
這兩個函數(shù)調(diào)用用來打開 MySQL 數(shù)據(jù)庫,具體的參數(shù)的含義剛才已經(jīng)說過了。
下面的一行是執(zhí)行一個 SQL 語句 :
mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name')
");
mysql_query 函數(shù)就是用來對選定的數(shù)據(jù)庫執(zhí)行一個 SQL 查詢。你可以在 mysql_query 函數(shù)中執(zhí)行任何的 SQL 語句。被執(zhí)行的 SQL 語句必須作為一個字符串用雙引號括起來,在其中的變量要用單引號括起來。
有一個要注意的事情: MySQL 的語句要用一個分號 (;) 結(jié)束,一行 php 代碼同樣也是這樣,但是在 php 腳本中的 MySQL 語句是不能有分號的。也就是說,當你在 mysql> 的提示符下輸入 MySQL 命令,你應(yīng)該加上分號:
INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name');
但是如果這個命令出現(xiàn)在 php 腳本中,就要去掉那個分號了。之所以這樣做,是因為有的語句,如 SELECT 和 INSERT ,有沒有分號都可以工作。但是還有一些語句,如 UPDATE ,加上分號就不行了。為了避免麻煩,記住這條規(guī)則就好了。
php 如何從 MySQL 中提取數(shù)據(jù)
現(xiàn)在我們建立另外一個 HTML 表單來執(zhí)行這個任務(wù):
< html>
< body>
< form action=searchform.php3 method=GET>
請輸入您的查詢內(nèi)容 :
< p>
姓: < input type=text name=first_name size=25 maxlength=25>
< p>
名 : < input type=text name=last_name size=25 maxlength=25>
< p>
< input type=submit>
< /form>
< /body>
< /html>
同樣,還要有一個 php 腳本來處理這個表單,我們再建立一個 searchform.php3 文件:
< html>
< body>
< ?php
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%'
");
if ($row = mysql_fetch_array($result)) {
do {
print $row["first_name"];
print (" ");
print $row["last_name"];
print ("< p>");
} while($row = mysql_fetch_array($result));
} else {print " 對不起,再我們的數(shù)據(jù)庫中,沒有找到符合的紀錄。 ";}
?>
< /body>
< /html>
當你在表單中輸入了要檢索的內(nèi)容,再按下 SUBMIT 按鈕后,就會進入一個新的頁面,其中列出了所有匹配的搜索結(jié)果。下面再來看看這段腳本到底是怎樣完成搜索任務(wù)的。
前面的幾條語句和上面講到的一樣,先是建立數(shù)據(jù)庫連接,然后選定數(shù)據(jù)庫和數(shù)據(jù)表,這些是每個數(shù)據(jù)庫應(yīng)用所必需的。然后有這樣的幾條語句:
if ($first_name == "")
{$first_name = '%';}
if ($last_name == "")
{$last_name = '%';}
這幾行用來檢查表單的各字段是否為空。要注意的是那兩個等號,因為 php 的語法大多源于 C 語言,這兒等號的用法也同 C 一樣:一個等號是賦值號,兩個等號才代表邏輯等于。還應(yīng)該注意的是:當 IF 后條件為真時,后面要執(zhí)行的語句是放在“ { ”和“ } ”中的,并且其中的每一條語句后面都要加上分號表示語句結(jié)束。
百分號 % 是 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 函數(shù)完成一個查詢后,它返回一個整數(shù)標志。
查詢從所有的記錄中選出那些 first_name 列和 $first_name 變量相同,并且 last_name 列和 $last_name 變量值也相同的記錄,放到暫存的記錄集中,并用返回的整數(shù)作為這個記錄集的標志。
if ($row = mysql_fetch_array($result)) {
do {
print $row["first_name"];
print (" ");
print $row["last_name"];
print ("< p>");
} while($row = mysql_fetch_array($result));
} else {print " 對不起,再我們的數(shù)據(jù)庫中,沒有找到符合的紀錄。 ";}
這是最后的一步,就是顯示部分了。 mysql_fetch_array 函數(shù)先提取出查詢結(jié)果的第一行的內(nèi)容,在用 PRINT 語句顯示出來。這個函數(shù)的參數(shù)就是 mysql_query 函數(shù)返回的整數(shù)標志。而 mysql_fetch_array 執(zhí)行成功后,記錄集指針會自動下移,這樣當再一次執(zhí)行 mysql_fetch_array 時,得到的就是下一行紀錄的內(nèi)容了。
數(shù)組變量 $row 被 mysql_fetch_array 函數(shù)建立并用查詢的結(jié)果字段來填充,數(shù)組的每一個分量對應(yīng)于查詢結(jié)果的每一個字段。
如果有符合的紀錄被找到,變量 $row 不會空,這時就會執(zhí)行花括號中的語句:
do {
print $row["first_name"];
print (" ");
print $row["last_name"];
print ("< p>");
} while($row = mysql_fetch_array($result));
這是一個 do … while 循環(huán)。與 while 循環(huán)不同的是,它是先執(zhí)行一遍循環(huán)循環(huán)體,然后在檢查循環(huán)條件是否滿足。由于已經(jīng)知道在紀錄集不為空的情況下,肯定至少要把循環(huán)體執(zhí)行一遍,所以應(yīng)該用到的是 do … while 而不是 while 循環(huán)了。在花括號中的就是要執(zhí)行的循環(huán)體:
print $row["first_name"];
print (" ");
print $row["last_name"];
print ("< p>");
然后就是檢查 while 條件是否滿足。 Mysql_fetch_array 函數(shù)再次被調(diào)用,來得到當前紀錄的內(nèi)容。這個過程一直循環(huán),當沒有下一條紀錄存在時, mysql_fetch_array 返回 false ,循環(huán)結(jié)束,紀錄集也就被完全的遍歷了一次。
mysql_fetch_array($result) 返回的數(shù)組,不僅可以用字段名來調(diào)用,也可以像一般的數(shù)組那樣,用下標來引用數(shù)組的各個分量。這樣,上面的代碼還可以寫成這樣:
print $row[0];
print (" ");
print $row[1];
print ("< p>");
我們還可以用 echo 函數(shù)來把這四條語句寫的緊湊一些:
echo $row[0], " ", $row[1], "< p>";
當沒有任何匹配的紀錄被找到時,在 $row 中就不會有任何內(nèi)容,這時就會調(diào)用 if 語句的 else 子句了:
else {print " 對不起,再我們的數(shù)據(jù)庫中,沒有找到符合的紀錄。 ";}
php技術(shù):PHP 如何向 MySQL 發(fā)送數(shù)據(jù),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。