PHP_MySQL教程-第二天while循環(huán)與數(shù)據(jù)庫(kù)操作
更新時(shí)間:2007年03月18日 00:00:00 作者:
同樣要注意$PATH_INFO的用法。就象我在第一課里講到的,您可以在HTML代碼中的任意位置使用PHP。您也會(huì)注意到,表格中的每一個(gè)元素都對(duì)應(yīng)著數(shù)據(jù)庫(kù)中的一個(gè)字段。這種對(duì)應(yīng)關(guān)系并不是必須的,這么做只是更直觀一些,便于您以后理解這些代碼。
還要注意的是,我在Submit按鈕中加入了name屬性。這樣我在程序中可以試探$submit變量是否存在。于是,當(dāng)網(wǎng)頁(yè)被再次調(diào)用時(shí),我就會(huì)知道調(diào)用頁(yè)面時(shí)是否已經(jīng)填寫(xiě)了表格。
我應(yīng)該指出,您不一定要把上面的網(wǎng)頁(yè)內(nèi)容寫(xiě)到PHP程序中,再返過(guò)來(lái)調(diào)用程序本身。您完全可以把顯示表格的網(wǎng)頁(yè)和處理表格的程序分開(kāi)放在兩個(gè)網(wǎng)頁(yè)、三個(gè)網(wǎng)頁(yè)甚至更多網(wǎng)頁(yè)中,悉聽(tīng)尊便。放在一個(gè)文件中只是可以使內(nèi)容更加緊湊而已。
那好,我們現(xiàn)在加入一些代碼,來(lái)檢查用戶(hù)在表格中輸入的內(nèi)容。我會(huì)把用$HTTP_POST_VARS把所有查詢(xún)參數(shù)變量都顯示出來(lái),這只不過(guò)是為了證明PHP確實(shí)把所有變量都傳給了程序。這種方法是一個(gè)很有用的調(diào)試手段。如果您要想看全部的變量,可以用$GLOBALS。
復(fù)制代碼 代碼如下:
<html>
<body>
<?php
if ($submit) {
// 處理表格輸入
while (list($name, $value) = each($HTTP_POST_VARS)) {
echo "$name = $value<br>n";
}
} else{
// 顯示表格
?>
<form method="post" action="<?php echo $PATH_INFO?>">
名:<input type="Text" name="first"><br>姓:<input type="Text" name="last"><br>住址:<input type="Text" name="address"><br>職位:<input type="Text" name="position"><br><input type="Submit" name="submit" value="輸入信息">
</form>
<?php
} // end if,if結(jié)束
?>
</body>
</html>
程序現(xiàn)在運(yùn)行正常,那我們現(xiàn)在就可以取到表格輸入的內(nèi)容,并把它們發(fā)送給數(shù)據(jù)庫(kù)。
<html>
<body>
<?php
if ($submit) {
// 處理表格輸入
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "INSERT INTO employees (first,last,address,position)
VALUES ('$first','$last','$address','$position')";
$result = mysql_query($sql);
echo "Thank you! Information entered.n";
} else{
// 顯示表格內(nèi)容
?>
<form method="post" action="<?php echo $PATH_INFO?>">
名:<input type="Text" name="first"><br> 姓:<input type="Text" name="last"><br>住址:<input type="Text" name="address"><br> 職位:<input type="Text" name="position"><br><input type="Submit" name="submit" value="輸入信息">
</form>
<?php
} // end if,if結(jié)束
?>
</body>
</html>
您現(xiàn)在已經(jīng)向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)了。不過(guò)還有很多完善的工作要做。如果用戶(hù)沒(méi)有填寫(xiě)某一欄怎么辦?在需要填入數(shù)字的地方填了文字怎么辦?或者填錯(cuò)了怎么辦?
別擔(dān)心。我們一步一步來(lái)。
第五頁(yè) 修改數(shù)據(jù)
在個(gè)教程中,我都把要執(zhí)行的SQL語(yǔ)句放到一個(gè)變量($sql)中,然后才用mysql_query()來(lái)執(zhí)行數(shù)據(jù)庫(kù)查詢(xún)。在調(diào)試時(shí)這是很有用的。如果程序出了什么問(wèn)題,您隨時(shí)可以把SQL語(yǔ)句的內(nèi)容顯示出來(lái),檢查其中的語(yǔ)法錯(cuò)誤。
我們已經(jīng)學(xué)習(xí)了如何把數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中?,F(xiàn)在我們來(lái)學(xué)習(xí)如何修改數(shù)據(jù)庫(kù)中已有的記錄。數(shù)據(jù)的編輯包括兩部分:數(shù)據(jù)顯示和通過(guò)表格輸入把數(shù)據(jù)返回給數(shù)據(jù)庫(kù),這兩部分我們前面都已經(jīng)講到了。然而,數(shù)據(jù)編輯還是有一點(diǎn)點(diǎn)不同,我們必須先在表格中顯示出相關(guān)的數(shù)據(jù)。
首先,我們回過(guò)頭再看看第一課的程序代碼,在網(wǎng)頁(yè)中顯示員工姓名。但是這次,我們要把數(shù)據(jù)顯示在表格中。程序看起來(lái)象下面這樣:
復(fù)制代碼 代碼如下:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
// 查詢(xún)數(shù)據(jù)庫(kù)
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form method="post" action="<?php echo $PATH_INFO?>">
<input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
名:<input type="Text" name="first" value="<?php echo
$myrow["first"] ?>"><br>姓:<input type="Text" name="last" value="<?php echo
$myrow["last"] ?>"><br>住址:<input type="Text" name="address" value="<?php echo
$myrow["address"] ?>"><br>職位:<input type="Text" name="position" value="<?php echo
$myrow["position"] ?>"><br><input type="Submit" name="submit" value="輸入信息">
</form>
<?php
} else {
// 顯示員工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href="%s?id=%s">%s %s</a><br>n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
}
}
?>
</body>
</html>
我們剛才是把字段內(nèi)容寫(xiě)入到相應(yīng)表格元素中的value屬性里,這是相應(yīng)簡(jiǎn)單的。我們?cè)偻斑M(jìn)一步,使程序可以把用戶(hù)修改過(guò)的內(nèi)容寫(xiě)回?cái)?shù)據(jù)庫(kù)去。同樣,我們通過(guò)Submit按鈕來(lái)判斷是否處理表格輸入內(nèi)容。還要注意,我們用的SQL語(yǔ)句稍稍有些不同。
復(fù)制代碼 代碼如下:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
if ($submit) {
$sql = "UPDATE employees SET first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";
$result = mysql_query($sql);
echo "謝謝!數(shù)據(jù)更改完成n";
} else {
// 查詢(xún)數(shù)據(jù)庫(kù)
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form method="post" action="<?php echo $PATH_INFO?>">
<input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
名:<input type="Text" name="first" value="<?php
echo $myrow["first"] ?>"><br> 姓:<input type="Text" name="last" value="<?php echo
$myrow["last"] ?>"><br> 住址:<input type="Text" name="address" value="<?php echo
$myrow["address"] ?>"><br> 職位:<input type="Text" name="position" value="<?php echo
$myrow["position"] ?>"><br> <input type="Submit" name="submit" value="輸入信息">
</form>
<?php
}
} else {
// 顯示員工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href="%s?id=%s">%s %s</a><br>n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
}
}
?>
</body>
</html>
就是這樣。在這個(gè)程序中已經(jīng)包含了我們學(xué)過(guò)所大多數(shù)特性。您也已經(jīng)看到,我們?cè)谝粋€(gè)if()條件判別語(yǔ)句中又加了一個(gè)if()語(yǔ)句,來(lái)檢查多重條件。
下面,我們要把所有東西全都加在一起,寫(xiě)出一個(gè)很好的程序來(lái)。
第六頁(yè) 完整的程序
在本課結(jié)束前,我們要把所有東西加入到一個(gè)程序中,使它具有增加、編輯修改、刪除記錄的功能。這是前面所有內(nèi)容的一個(gè)延伸,也可以作為極好的復(fù)習(xí)方法??纯聪旅娴某绦?。
復(fù)制代碼 代碼如下:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($submit) {
// 如果沒(méi)有ID,則我們是在增加記錄,否則我們是在修改記錄
if ($id) {
$sql = "UPDATE employees SET first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";
} else {
$sql = "INSERT INTO employees (first,last,address,position)
VALUES ('$first','$last','$address','$position')";
}
// 向數(shù)據(jù)庫(kù)發(fā)出SQL命令
$result = mysql_query($sql);
echo "記錄修改成功!<p>";
} elseif ($delete) {
// 刪除一條記錄
$sql = "DELETE FROM employees WHERE id=$id";
$result = mysql_query($sql);
echo "記錄刪除成功!<p>";
} else {
// 如果我們還沒(méi)有按submit按鈕,那么執(zhí)行下面這部分程序
if (!$id) {
// 如果不是修改狀態(tài),則顯示員工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href="%s?id=%s">%s %s</a> n",
$PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]);
printf("<a href="%s?id=%s&delete=yes">(DELETE)</a><
br>", $PATH_INFO, $myrow["id"]);
}
}
?>
<P>
<a href="<?php echo $PATH_INFO?>">ADD A RECORD</a>
<P>
<form method="post" action="<?php echo $PATH_INFO?>">
<?php
if ($id) {
// 我們是在編輯修改狀態(tài),因些選擇一條記錄
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow["id"];
$first = $myrow["first"];
$last = $myrow["last"];
$address = $myrow["address"];
$position = $myrow["position"];
// 顯示id,供用戶(hù)編輯修改
?>
<input type=hidden name="id" value="<?php echo $id ?>">
<?php
}
?>
名:<input type="Text" name="first" value="<?php echo $first ?>"><br>姓:<input type="Text" name="last" value="<?php echo $last ?>"><br>住址:<input type="Text" name="address" value="<?php echo $address ?>"><br>職位:<input type="Text" name="position" value="<?php echo $position ?>"><br><input type="Submit" name="submit" value="輸入信息">
</form>
<?php
}
?>
</body>
</html>
這段程序看起來(lái)很復(fù)雜,但實(shí)際上并不難。程序主要有三個(gè)部分。第一個(gè)if()語(yǔ)句檢查我們是否已經(jīng)按下了那個(gè)“輸入信息”的數(shù)據(jù)提交按鈕。如果是,程序再檢查$id是否存在。如果不存在,那我們就是在增加記錄狀態(tài),否則,我們是在修改記錄狀態(tài)。
接下來(lái)我們檢查變量$delete是否存在。如果存在,我們是要?jiǎng)h除記錄。注意,第一個(gè)if()語(yǔ)句檢查的是用POST方法發(fā)送來(lái)的變量,而這一次我們檢查的是GET方法中傳遞過(guò)來(lái)的變量。
最后,程序默認(rèn)的動(dòng)作是顯示員工列表和表格。同樣,我們要檢查變量$id是否存在。如果存在,我們就根據(jù)它的值檢索出相應(yīng)的記錄顯示出來(lái)。否則,我們會(huì)顯示一個(gè)空的表格。
現(xiàn)在,我們已經(jīng)把所學(xué)的東西全部都放在一個(gè)程序里頭了。我們用到了while()循環(huán),用到了if()語(yǔ)句,并且執(zhí)行了全部的SQL基本操作 - SELECT、INSERT、UPDATE以及DELETE。另外,我們也知道如何在不同的網(wǎng)頁(yè)之間通過(guò)URL和表格輸入來(lái)互相傳遞信息。
在第三課里,我們要學(xué)習(xí)如何為網(wǎng)頁(yè)增加智能化處理能力。
相關(guān)文章
如何將一個(gè)表單同時(shí)提交到兩個(gè)地方處理
如何將一個(gè)表單同時(shí)提交到兩個(gè)地方處理...2006-10-10php學(xué)習(xí)筆記 PHP面向?qū)ο蟮某绦蛟O(shè)計(jì)
php學(xué)習(xí)筆記 PHP面向?qū)ο蟮某绦蛟O(shè)計(jì) 對(duì)象比數(shù)組更強(qiáng)大,不僅可以存儲(chǔ)多個(gè)數(shù)據(jù),還可以將函數(shù)存在對(duì)象中2011-06-06在 PHP 中使用隨機(jī)數(shù)的三個(gè)步驟
在 PHP 中使用隨機(jī)數(shù)的三個(gè)步驟...2006-10-10PHP中time(),date(),mktime()區(qū)別介紹
PHP :time(),date(),mktime()日期與時(shí)間函數(shù)庫(kù),經(jīng)常會(huì)忘卻掉,這里收藏下, 方便需要的朋友2013-09-09數(shù)據(jù)庫(kù)相關(guān)問(wèn)題
數(shù)據(jù)庫(kù)相關(guān)問(wèn)題...2006-10-10