  
- 積分
- 7435
- 經驗值
- 7929 EXP
- 家電幣
- 673822 法拉
- H值
- 8384 汁
- 熱血
- 6000 度
- 嘴砲
- 3266 值
         
|
PHP教學 第七回
好!繼續課程! 撰寫資料庫網頁程式:
摘要: 在之前課程中,我們討論了使用 SQL 的語法,來管理資料庫裡面的資料。從這個單元開始,我們將實作留言版的專案,分別使用各種開發方式,來開發同樣的專案。讓學習者能學習各種不同的開發方式,藉由實地開發產生不同的體認。在這個單元中,我們將應用 SQL 語法,整合在 PHP網頁的程式之中。在這個課程中的每一頁 PHP 程式,都包含了完整的資料庫命令,專注在於每個資料庫作業的程式撰寫。等熟悉了資料庫網頁的撰寫方式之後,在以後單元中,將學習如何撰寫函式,將類似的功能分離出來,獨立成為個別的函式,並整合在函式庫中,供其他 PHP 程式使用。在之後的課程中,將介紹如何使用物件導向的方式,來重新改寫原本的程式。
留言版專案功能規範
說明:
為了教學上的目的,我們刻意忽略了一些實務上的功能需求,專注於學習資料庫程式的撰寫,以提高學習的效果。
留言版的功能規範如下:
1. 簡單的權限控管:使用$PHP_AUTH_USER,$PHP_AUTH_PW全域變數
2. 一個留言版列表的網頁:控管更新與刪除連結的呈現
3. 一個新增留言的網頁
4. 一個更新留言的網頁:存取控制
5. 一個刪除留言的網頁:存取控制
在這個課程中,我們先專注於資料庫網頁的撰寫。在下一個課程中,再加入網頁存取控制的功能。
留言版的列表、新增、更新、以及刪除
一、準備工作
說明:
我們沿用之前的做法,把相關的網頁,放在同一個目錄之下。
實作:
1. 使用putty連線到伺服主機。
2. 輸入以下的命令,進入 public_html 目錄:
cd public_html
3. 輸入以下的命令,產生 guestbook 目錄:
mkdir guestbook
4. 輸入以下的命令,產生網頁程式的檔案:
touch index.php add.php update.php delete.php
二、留言版列表
說明:
在這個部分,我們使用 SQL 的 SELECT 語法,取出 Guestbook 的所有資料,將每一筆記錄,以個別的表格呈現出來。
程式碼:
QUOTE:
<?php
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = 'SELECT * FROM Guestbook ORDER BY post_time DESC';
// 開始執行查詢
$result = mysql_query($sql);
/* 處理查詢結果 */
$output = '';
while($record = mysql_fetch_array($result)){
$record[email] = strlen(trim($record[email])) > 0?'<a href=mailto:'.$record[email].'><img src=email.gif border=0></a>':' ';
$record[web] = strlen(trim($record[web])) > 0?'<a href=http://'.$record[web].' target=_blank><img src=home.gif border=0></a>' :' ';
$record[content] = nl2br($record[content]);
$table=<<<EOF
<table width="600" border="1" cellpadding="0" cellspacing="0" bordercolor="#9999FF" align="center">
<tr bgcolor="#9999FF">
<td width="35%"><font color="#FFFFFF">$record[name]:</font></td>
<td width="12%"><div align="center"><font color="#FFFFFF">$record[email]</font></div></td>
<td width="11%"><div align="center"><font color="#FFFFFF">$record[web]</font></div></td>
<td width="42%"><div align="right"><font color="#FFFFFF">$record[post_time]</font></div></td>
</tr>
<tr valign="top">
<td height="120" colspan="4">$record[content]</td>
</tr>
<tr>
<td colspan=2><div align="center"><a href="delete.php?id=$record[id]">刪除</a></div></td>
<td colspan=2><div align="center"><a href="update.php?id=$record[id]">更新</a></div></td>
</tr>
</table>
<hr width=600 size=1 />
EOF;
$output .= $table;
}
/* 列印輸出 */
echo <<<EOF
<center>
<hr width=600 size=1 />留言版<hr width=600 size=1 />
<a href="add.php">我要留言<a><hr width=600 size=1 />
</center>
$output
EOF;
?>
三、新增留言
說明:
使用資料庫網頁,要新增一筆記錄時,使用 INSERT 語法,將使用者填入表單的資料,新增到資料庫中。
程式碼:
QUOTE:
<?php
/* 檢查使用者是否按下送出的按鈕
如果是的話,執行以下的程式;
否則,顯示以下的表單。 */
if(isset($_POST[Submit])){
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = "INSERT INTO Guestbook(name, email, web, content, post_time) VALUES('$_POST[name]', '$_POST[email]', '$_POST[web]', '$_POST[content]', NOW())";
// 開始執行查詢
mysql_query($sql) || die('無法執行查詢: '.$sql);
// 查詢執行成功,重導網頁位址到 index.php
header('Location: index.php');
exit;
}
?>
<form name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#9999FF">
<tr bgcolor="#9999FF">
<td colspan="2"><font color="#FFFFFF">新增留言</font></td>
</tr>
<tr>
<td width="23%"><div align="right">姓名:</div></td>
<td width="77%"><input name="name" type="text" id="name"></td>
</tr>
<tr>
<td><p align="right">電子郵件信箱:</p></td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td><div align="right">網站:</div></td>
<td><input name="web" type="text" id="web"></td>
</tr>
<tr>
<td valign="top"><div align="right">內容:</div></td>
<td><textarea name="content" cols="48" rows="5" id="content"></textarea></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="送 出">
</div></td>
</tr>
</table>
</form>
四、更新留言
說明:
首先,必須先取得使用者所要更新資料的流水號。然後,使用 UPDATE 語法,將使用者填入表單的資料,更新到資料庫中。
程式碼:
QUOTE:
<?php
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 檢查使用者是否按下送出的按鈕
如果是的話,執行更新查詢;
否則,取出使用者所要更新的留言資料。 */
if(isset($_POST[Submit])){
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = "UPDATE Guestbook SET name='$_POST[name]', email='$_POST[email]', web='$_POST[web]', content='$_POST[content]' WHERE id=$_GET[id]";
// 開始執行查詢
mysql_query($sql) || die('無法執行查詢: '.$sql);
// 查詢執行成功,重導網頁位址到 index.php
header('Location: index.php');
exit;
}else{
$sql = 'SELECT * FROM Guestbook WHERE id='.$_GET[id];
$result = mysql_query($sql);
$result || die('無法執行查詢: '.$sql);
$record = mysql_fetch_array($result);
}
?>
<form name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#9999FF">
<tr bgcolor="#9999FF">
<td colspan="2"><font color="#FFFFFF">更新留言</font></td>
</tr>
<tr>
<td width="23%"><div align="right">姓名:</div></td>
<td width="77%"><input name="name" type="text" id="name" value=<?php echo $record[name];?>></td>
</tr>
<tr>
<td><p align="right">電子郵件信箱:</p></td>
<td><input name="email" type="text" id="email" value=<?php echo $record[email];?>></td>
</tr>
<tr>
<td><div align="right">網站:</div></td>
<td><input name="web" type="text" id="web" value=<?php echo $record[web];?>></td>
</tr>
<tr>
<td valign="top"><div align="right">內容:</div></td>
<td><textarea name="content" cols="48" rows="5" id="content"><?php echo $record[content];?></textarea></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="送 出">
</div></td>
</tr>
</table>
</form>
五、刪除留言
說明:
首先,必須先取得使用者所要更新資料的流水號。然後,使用 DELETE 語法,將使用者選取的留言,從資料庫中刪除。
程式碼:
QUOTE:
<?php
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 檢查使用者是否按下送出的按鈕
如果是的話,執行更新查詢;
否則,取出使用者所要更新的留言資料。 */
if(isset($_POST[Submit])){
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = "DELETE FROM Guestbook WHERE id=$_GET[id]";
// 開始執行查詢
mysql_query($sql) || die('無法執行查詢: '.$sql);
// 查詢執行成功,重導網頁位址到 index.php
header('Location: index.php');
exit;
}else{
$sql = 'SELECT * FROM Guestbook WHERE id='.$_GET[id];
$result = mysql_query($sql);
$result || die('無法執行查詢: '.$sql);
$record = mysql_fetch_array($result);
}
?>
<form name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#9999FF">
<tr bgcolor="#9999FF">
<td colspan="2"><font color="#FFFFFF">更新留言</font></td>
</tr>
<tr>
<td width="23%"><div align="right">姓名:</div></td>
<td width="77%"><?php echo $record[name];?></td>
</tr>
<tr>
<td><p align="right">電子郵件信箱:</p></td>
<td><?php echo $record[email];?></td>
</tr>
<tr>
<td><div align="right">網站:</div></td>
<td><?php echo $record[web];?></td>
</tr>
<tr>
<td valign="top"><div align="right">內容:</div></td>
<td><?php echo $record[content];?></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="刪 除">
</div></td>
</tr>
</table>
</form>
好,又一課了。快去第八課吧! 好!繼續課程! 撰寫資料庫網頁程式:
摘要: 在之前課程中,我們討論了使用 SQL 的語法,來管理資料庫裡面的資料。從這個單元開始,我們將實作留言版的專案,分別使用各種開發方式,來開發同樣的專案。讓學習者能學習各種不同的開發方式,藉由實地開發產生不同的體認。在這個單元中,我們將應用 SQL 語法,整合在 PHP網頁的程式之中。在這個課程中的每一頁 PHP 程式,都包含了完整的資料庫命令,專注在於每個資料庫作業的程式撰寫。等熟悉了資料庫網頁的撰寫方式之後,在以後單元中,將學習如何撰寫函式,將類似的功能分離出來,獨立成為個別的函式,並整合在函式庫中,供其他 PHP 程式使用。在之後的課程中,將介紹如何使用物件導向的方式,來重新改寫原本的程式。
留言版專案功能規範
說明:
為了教學上的目的,我們刻意忽略了一些實務上的功能需求,專注於學習資料庫程式的撰寫,以提高學習的效果。
留言版的功能規範如下:
1. 簡單的權限控管:使用$PHP_AUTH_USER,$PHP_AUTH_PW全域變數
2. 一個留言版列表的網頁:控管更新與刪除連結的呈現
3. 一個新增留言的網頁
4. 一個更新留言的網頁:存取控制
5. 一個刪除留言的網頁:存取控制
在這個課程中,我們先專注於資料庫網頁的撰寫。在下一個課程中,再加入網頁存取控制的功能。
留言版的列表、新增、更新、以及刪除
一、準備工作
說明:
我們沿用之前的做法,把相關的網頁,放在同一個目錄之下。
實作:
1. 使用putty連線到伺服主機。
2. 輸入以下的命令,進入 public_html 目錄:
cd public_html
3. 輸入以下的命令,產生 guestbook 目錄:
mkdir guestbook
4. 輸入以下的命令,產生網頁程式的檔案:
touch index.php add.php update.php delete.php
二、留言版列表
說明:
在這個部分,我們使用 SQL 的 SELECT 語法,取出 Guestbook 的所有資料,將每一筆記錄,以個別的表格呈現出來。
程式碼:
QUOTE:
<?php
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = 'SELECT * FROM Guestbook ORDER BY post_time DESC';
// 開始執行查詢
$result = mysql_query($sql);
/* 處理查詢結果 */
$output = '';
while($record = mysql_fetch_array($result)){
$record[email] = strlen(trim($record[email])) > 0?'<a href=mailto:'.$record[email].'><img src=email.gif border=0></a>':' ';
$record[web] = strlen(trim($record[web])) > 0?'<a href=http://'.$record[web].' target=_blank><img src=home.gif border=0></a>' :' ';
$record[content] = nl2br($record[content]);
$table=<<<EOF
<table width="600" border="1" cellpadding="0" cellspacing="0" bordercolor="#9999FF" align="center">
<tr bgcolor="#9999FF">
<td width="35%"><font color="#FFFFFF">$record[name]:</font></td>
<td width="12%"><div align="center"><font color="#FFFFFF">$record[email]</font></div></td>
<td width="11%"><div align="center"><font color="#FFFFFF">$record[web]</font></div></td>
<td width="42%"><div align="right"><font color="#FFFFFF">$record[post_time]</font></div></td>
</tr>
<tr valign="top">
<td height="120" colspan="4">$record[content]</td>
</tr>
<tr>
<td colspan=2><div align="center"><a href="delete.php?id=$record[id]">刪除</a></div></td>
<td colspan=2><div align="center"><a href="update.php?id=$record[id]">更新</a></div></td>
</tr>
</table>
<hr width=600 size=1 />
EOF;
$output .= $table;
}
/* 列印輸出 */
echo <<<EOF
<center>
<hr width=600 size=1 />留言版<hr width=600 size=1 />
<a href="add.php">我要留言<a><hr width=600 size=1 />
</center>
$output
EOF;
?>
三、新增留言
說明:
使用資料庫網頁,要新增一筆記錄時,使用 INSERT 語法,將使用者填入表單的資料,新增到資料庫中。
程式碼:
QUOTE:
<?php
/* 檢查使用者是否按下送出的按鈕
如果是的話,執行以下的程式;
否則,顯示以下的表單。 */
if(isset($_POST[Submit])){
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = "INSERT INTO Guestbook(name, email, web, content, post_time) VALUES('$_POST[name]', '$_POST[email]', '$_POST[web]', '$_POST[content]', NOW())";
// 開始執行查詢
mysql_query($sql) || die('無法執行查詢: '.$sql);
// 查詢執行成功,重導網頁位址到 index.php
header('Location: index.php');
exit;
}
?>
<form name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#9999FF">
<tr bgcolor="#9999FF">
<td colspan="2"><font color="#FFFFFF">新增留言</font></td>
</tr>
<tr>
<td width="23%"><div align="right">姓名:</div></td>
<td width="77%"><input name="name" type="text" id="name"></td>
</tr>
<tr>
<td><p align="right">電子郵件信箱:</p></td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td><div align="right">網站:</div></td>
<td><input name="web" type="text" id="web"></td>
</tr>
<tr>
<td valign="top"><div align="right">內容:</div></td>
<td><textarea name="content" cols="48" rows="5" id="content"></textarea></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="送 出">
</div></td>
</tr>
</table>
</form>
四、更新留言
說明:
首先,必須先取得使用者所要更新資料的流水號。然後,使用 UPDATE 語法,將使用者填入表單的資料,更新到資料庫中。
程式碼:
QUOTE:
<?php
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 檢查使用者是否按下送出的按鈕
如果是的話,執行更新查詢;
否則,取出使用者所要更新的留言資料。 */
if(isset($_POST[Submit])){
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = "UPDATE Guestbook SET name='$_POST[name]', email='$_POST[email]', web='$_POST[web]', content='$_POST[content]' WHERE id=$_GET[id]";
// 開始執行查詢
mysql_query($sql) || die('無法執行查詢: '.$sql);
// 查詢執行成功,重導網頁位址到 index.php
header('Location: index.php');
exit;
}else{
$sql = 'SELECT * FROM Guestbook WHERE id='.$_GET[id];
$result = mysql_query($sql);
$result || die('無法執行查詢: '.$sql);
$record = mysql_fetch_array($result);
}
?>
<form name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#9999FF">
<tr bgcolor="#9999FF">
<td colspan="2"><font color="#FFFFFF">更新留言</font></td>
</tr>
<tr>
<td width="23%"><div align="right">姓名:</div></td>
<td width="77%"><input name="name" type="text" id="name" value=<?php echo $record[name];?>></td>
</tr>
<tr>
<td><p align="right">電子郵件信箱:</p></td>
<td><input name="email" type="text" id="email" value=<?php echo $record[email];?>></td>
</tr>
<tr>
<td><div align="right">網站:</div></td>
<td><input name="web" type="text" id="web" value=<?php echo $record[web];?>></td>
</tr>
<tr>
<td valign="top"><div align="right">內容:</div></td>
<td><textarea name="content" cols="48" rows="5" id="content"><?php echo $record[content];?></textarea></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="送 出">
</div></td>
</tr>
</table>
</form>
五、刪除留言
說明:
首先,必須先取得使用者所要更新資料的流水號。然後,使用 DELETE 語法,將使用者選取的留言,從資料庫中刪除。
程式碼:
QUOTE:
<?php
/* 定義連接資料庫的有關參數 */
define('DB_USER', 'lib13');
define('DB_PASSWORD', 'mypassword');
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'lib13');
/* 連接資料庫 */
$link = mysql_pconnect(DB_HOST, DB_USER, DB_PASSWORD)
or die('無法連接到資料庫:'.mysql_error());
/* 選用資料庫 */
mysql_select_db(DB_DATABASE)
or die('無法選擇資料庫['.DB_DATABASE.']:'.mysql_error());
/* 檢查使用者是否按下送出的按鈕
如果是的話,執行更新查詢;
否則,取出使用者所要更新的留言資料。 */
if(isset($_POST[Submit])){
/* 執行查詢 */
// 定義 SQL 命令的字串變數
$sql = "DELETE FROM Guestbook WHERE id=$_GET[id]";
// 開始執行查詢
mysql_query($sql) || die('無法執行查詢: '.$sql);
// 查詢執行成功,重導網頁位址到 index.php
header('Location: index.php');
exit;
}else{
$sql = 'SELECT * FROM Guestbook WHERE id='.$_GET[id];
$result = mysql_query($sql);
$result || die('無法執行查詢: '.$sql);
$record = mysql_fetch_array($result);
}
?>
<form name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#9999FF">
<tr bgcolor="#9999FF">
<td colspan="2"><font color="#FFFFFF">更新留言</font></td>
</tr>
<tr>
<td width="23%"><div align="right">姓名:</div></td>
<td width="77%"><?php echo $record[name];?></td>
</tr>
<tr>
<td><p align="right">電子郵件信箱:</p></td>
<td><?php echo $record[email];?></td>
</tr>
<tr>
<td><div align="right">網站:</div></td>
<td><?php echo $record[web];?></td>
</tr>
<tr>
<td valign="top"><div align="right">內容:</div></td>
<td><?php echo $record[content];?></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="刪 除">
</div></td>
</tr>
</table>
</form>
好,又一課了。快去第八課吧! |
|