麻辣家族討論版版's Archiver

小誌 發表於 2011-4-23 23:08

11-1-2 留言網頁與留言儲存

[color=darkred][size=4][b]11-1-2   留言網頁與留言儲存[/b][/size][/color]
當我們要在網頁中提供一個可以讓網友發表意見或反映的留言板時,必須先設計一個『意見發表表單(addmsg.php)』,讓網友可以在上面發表意見,並且要能將這些意見資料送給我們處理留言資料的PHP程式『add.php』來記錄以及處理這些意見資料。
  現在請打開addmsg.php網頁,來了解一下如何製作一個可以讓網友在上面發表意見的表單:
[attach]5751[/attach]
圖11-5  addmsg.php網頁。
[table]
[tr][td=1,1,62][p=30, 2, center][b][size=2]編號[/size][/b][/p][/td][td=1,1,117][p=30, 2, center][b][size=2]欄位[/size][/b][/p][/td][td=1,1,103][p=30, 2, center][b][size=2]欄位名稱[/size][/b][/p][/td][td=1,1,178][p=30, 2, center][b][size=2]表單元件[/size][/b][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]1[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]留言主題[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]subject
[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]單行文字方塊[/color][/size][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]2[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]您的大名[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]parent[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]單行文字方塊[/color][/size][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]3[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]E-Mail[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]email[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]單行文字方塊[/color][/size][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]4[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]代表圖形[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]pic[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]選擇鈕[/color][/size][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]5[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]留言性質[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]personal[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]下拉式功能表[/color][/size][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]6[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]留言內容[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]memo[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]多行文字方塊[/color][/size][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]7[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]送出意見[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]Submit[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]按鈕[/color][/size][/p][/td][/tr]
[tr][td=1,1,62][p=30, 2, center][b][size=2][color=#000000]8[/color][/size][/b][/p][/td][td=1,1,117][p=30, 2, left][size=2][color=#000000]清除重寫[/color][/size][/p][/td][td=1,1,103][p=30, 2, left][size=2][color=#000000]/[/color][/size][/p][/td][td=1,1,178][p=30, 2, left][size=2][color=#000000]按鈕[/color][/size][/p][/td][/tr]
[/table]

『留言主題』網頁敘述標籤[code]<input type="text" name="subject" size="50" maxlength="20">[/code]『您的大名』網頁敘述標籤[code]<input type="text" name="parent" size="20" maxlength="20">[/code]『E-Mail』網頁敘述標籤[code]<input type="text" name="email" size="35" maxlength="40">[/code]『代表圖形』網頁敘述標籤[code]<input type="radio" name="pic" value="1" checked >
<img src="1.gif">
<input type="radio" name="pic" value="2"><img src="2.gif">
<input type="radio" name="pic" value="3"><img src="3.gif">
<input type="radio" name="pic" value="4"><img src="4.gif">
<input type="radio" name="pic" value="5"><img src="5.gif">
<input type="radio" name="pic" value="6"><img src="6.gif">
<input type="radio" name="pic" value="7"><img src="7.gif">
<input type="radio" name="pic" value="8"><img src="8.gif">
<input type="radio" name="pic" value="9"><img src="9.gif">
<input type="radio" name="pic" value="10"><img src="10.gif">[/code]『留言性質』網頁敘述標籤[code]<select name="personal" size="1">  
  <option value="0" selected>大家來討論</option>
  <option value="1">只給板主看</option>
</select>[/code]『留言內容』網頁敘述標籤[code]<textarea name="memo" cols="50" rows="4" ></textarea>[/code]

小誌 發表於 2011-4-23 23:09

[color=Red]請特別注意:[/color]我們表單的名稱為『Addmsg』,而表單內容資料的傳送方式為『Post』,處理意見資料的PHP程式是『add.php』.[code]<form name="addmsg" method="POST" action="add.php">[/code]完整網頁內容列表如下:
addmsg.php[code]<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>麻辣家族留言板</title>
</head>
<body>
<div align="center">
<p align="center">
<font size="2">
<img src="title.gif">
</font>
<br>
<font size="2"><a href="guest.php">
<img border="0" src="team2.gif" align="absmiddle">
看看網友們的意見<img border="0" src="team2.gif" align="absmiddle">
</a></font> </div>
<form name="addmsg" method="POST" action="add.php">
<div align="center">
<table border="1" cellspacing="0" style="border-collapse: collapse"
bordercolor="#FFFFFF" cellpadding="0">
<tr><td bgcolor="#339933" align="center" valign="middle" width="147">
<font color="#FFFFFF" size="2">留言主題</font></td>
<td height="25" bgcolor="#E8FFE8"><font size="2">
<input type="text" name="subject" size="50" value maxlength="20">
</font></td></tr> <tr>
<td bgcolor="#339933" align="center" valign="middle" width="147">
<font color="#FFFFFF" size="2">您的大名</font></td>
<td height="25" bgcolor="#E8FFE8"><font size="2">
<input type="text" name="name" size="20" maxlength="20"></font></td>
</tr>
<tr>
<td bgcolor="#339933" align="center" valign="middle" width="147">
<font color="#FFFFFF" size="2">E-Mail</font></td>
<td height="25" bgcolor="#E8FFE8"><font size="2">
<input type="text" name="email" size="35" maxlength="40"></font></td>
</tr>
<tr>
<td bgcolor="#339933" align="center" height="27" valign="middle" width="147">
<font size="2" color="#FFFFFF">代表圖形</font></td>
<td height="27" bgcolor="#E8FFE8">
<font size="2">
<input type="radio" name="pic" value="1" checked ><img src="1.gif">
<input type="radio" name="pic" value="2"><img src="2.gif">
<input type="radio" name="pic" value="3"><img src="3.gif">
<input type="radio" name="pic" value="4"><img src="4.gif">
<input type="radio" name="pic" value="5"><img src="5.gif">
<input type="radio" name="pic" value="6"><img src="6.gif">
<input type="radio" name="pic" value="7"><img src="7.gif">
<input type="radio" name="pic" value="8"><img src="8.gif">
<input type="radio" name="pic" value="9"><img src="9.gif">
<input type="radio" name="pic" value="10"><img src="10.gif">
</font>
</td>
</tr>
<!--私人留言或公開-->
<tr>
<td bgcolor="#339933" align="center" width="147">
<font color="#FFFFFF" size="2">留言性質</font></td>
<td bgcolor="#E8FFE8">
<font size="2">
<select name="personal" size="1">
<option value="0" selected>大家來討論</option>
<option value="1">只給板主看</option>
</select>
</font>
</td>
</tr>
<!--留言內容欄位-->
<tr>
<td bgcolor="#339933" align="Center" height="98" valign="middle" width="147">
<font color="#FFFFFF" size="2">留言內容:</font>
</td>
<td height="98" valign="middle" bgcolor="#E8FFE8">
<font size="2">
<textarea name="memo" cols="50" rows="4" ></textarea>
</font>
</td></tr><tr><td align="Center" colspan="2">
<font size="2"><input type="submit"value="送出意見">
<input type="reset" value="重填資料"></font></td>
</tr></table></div>
</form></center>
</body></html>[/code]

小誌 發表於 2011-4-23 23:11

[color=RoyalBlue][size=3][b]留言處理程式[/b][/size][/color]
當網友在「意見發表表單」中填寫好相關資料,然後按下「送出意見」按鈕,表單中的資料內容就會以『POST』的方式由SEVER端讀取,因為我們在表單傳送的Action參數指定Server端處理此一表單資料內容的程式為『add.php』,因此我們就必須來撰寫能夠處理這些意見資料的PHP程式『add.php』。
在這個處理意見資料的PHP程式,我們可分為下列幾個部分:

[b]1.接收來自『意見發表表單』中的各欄位資料[/b]
要將網友發言資料作後續處理及將這些資料內容存入資料庫之前,我們必須先把各個欄位的資料承接下來:[code]//接收addmsg.php傳來的資訊
$subject=$_REQUEST["subject"];
$name = $_REQUEST["name"];
$email = $_REQUEST["email"];
$pic=$_REQUEST["pic"];
$memo=nl2br($_REQUEST["memo"]);
$personal = $_REQUEST["personal"];[/code]其中比較特別的是留言內容「memo」的資料處理,留言內容欄位是多行文字輸入元件,當我們將輸入於多行文字輸入元件的資料顯示出來時,會有一個斷行的問題,輸入資料時,在多行文字輸入元件中按下「Enter」會有換行的效果,雖然在表面上看不到任何的換行字元,但實際上卻真實存在著一個換行字元「\r\n」,這個換行字元在我們輸出到瀏覽器時並不會有換行的效果,因此,輸出時應先使用「str_replace()」函數將這個換行字元「\r\n」替換成「<Br>」的HTML標籤符號。

[b]2.建立chgStr函數 [/b]
由於網友發言的資料必須以單引號括起來的的型式與Insert Into指令結合在一起,如果網友發言的資料內容原本就使用了單引號,將會使程式產生錯誤,因此我們就先自行建立一個chgStr函數,將網友發言的資料內容先經過chgStr函數過濾,若資料內容含有單引號則將單引號轉換為雙引號:[code]//將單引號置換為雙引號
Function chgStr($data)
{
   $chgStr = "'" . str_replace("'", "''", $data) . "'";
   return $chgStr;
}[/code][b]3.建立與資料庫的連結[/b]
要將承接下來的各個欄位的資料寫入資料庫之前,必須先建立與資料庫的連結,mysql_connect()與mysql_select_db()函數的使用,之前我們已經談過不在贅言:[code]//連結SQL Server
    $conn = mysql_connect("127.0.0.1", "sa", "12345");
//選擇資料庫
    mysql_select_db("Message", $conn);
//指定提取資料的校對字元表
    mysql_query("set character set big5");[/code]

小誌 發表於 2011-4-23 23:14

[b]4.建立新增資料錄的Insert Into指令[/b]
Insert Into指令敘述格式:[code]Insert Into  資料表名  (欄位名) values (欄位值)[/code]這種插入新資料錄的格式又可分為兩種形式:
逐一將欄位值設定給相對應的欄位,然後再新增至資料表中,例如:
[attach]5752[/attach]
另一種方式與上一種格式雷同,但是省略了欄位名稱:
[attach]5753[/attach]
建議儘量避免使用第二種方式,因為少了欄位對應很容易發生資料誤填的情況!

建立與資料庫的連結後,我們首先組合將新增資料錄的Instert Into指令,然後再寫入資料庫檔案中:[code]//將資料寫入資料庫
$sql = "Insert Into allmessage (網友姓名, 留言主題, 聯絡信箱, 留言內容, 私人公開, 圖形, 留言時間) Values (";
$sql = $sql . chgStr($name) . ",";
$sql = $sql . chgStr($subject) . ",";
$sql = $sql . chgStr($email) . ",";
$sql = $sql . chgStr($memo) . ",";
$sql = $sql . chgStr($personal) . ",";
$sql = $sql . $pic . ",'";
$sql = $sql . date("Y-m-j H:i:s") . "')";
mysql_query($sql);[/code][b]5、轉向至顯示留言意見的網頁guest.php [/b]
    當網友發言的資料內容處理完畢並儲存至資料庫檔案中後,我們則必須將網頁轉向至顯示留言意見的網頁guest.php,如此一來,發言的網友就可看見他的發言是否已經順利的登錄:[code]//將網頁轉向至顯示留言意見的網頁guest.php
header("Location: guest.php");[/code]add.php[code]<?
//接收addmsg.php傳來的資訊
$subject=$_REQUEST["subject"];
$name = $_REQUEST["name"];
$email = $_REQUEST["email"];
$pic=$_REQUEST["pic"];
$memo=nl2br($_REQUEST["memo"]);
$personal = $_REQUEST["personal"];

//連結MySQL Server
    $conn = mysql_connect("localhost", "root", "12345a");
//選擇資料庫
    mysql_select_db("Message", $conn);
//指定提取資料的校對字元表
    mysql_query("set character set big5");   

//將單引號置換為雙引號
Function chgStr($data)
{
   $chgStr = "'" . str_replace("'", "''", $data) . "'";
   return $chgStr;
}

//將資料寫入資料庫
$sql = "Insert Into allmessage (網友姓名, 留言主題, 聯絡信箱, 留言內容, 私人公開, 圖形, 留言時間) Values (";
$sql = $sql . chgStr($name) . ",";
$sql = $sql . chgStr($subject) . ",";
$sql = $sql . chgStr($email) . ",";
$sql = $sql . chgStr($memo) . ",";
$sql = $sql . chgStr($personal) . ",";
$sql = $sql . $pic . ",'";
$sql = $sql . date("Y-m-j H:i:s") . "')";
mysql_query($sql);

//將網頁轉向至顯示留言意見的網頁guest.php
header("Location: guest.php");
?>[/code]

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供