麻辣家族討論版版's Archiver

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

11-2-3 主題項目列表與新主題資料處理程式

[color=DarkRed][size=4][b]11-2-3   主題項目列表與新主題資料處理程式[/b][/size][/color]
討論項目列表程式網頁index.php是進入「討論區」的大門網頁,這個網頁包含兩大部分,一是全部討論項目的列表部分,進入此一程式網頁後,如果點選了某一個已存在的討論項目『主題』超連結,就可以連結進入該討論主題的對應討論網頁(join.php),如果想要發表新的討論項目,就可直接在程式網頁下方的發言表單中輸入資料來建立新的討論主題:
[attach]5783[/attach]
圖11-33  index.php。

因此,我們程式的設計就分為兩個部分,在全部討論項目的列表部分,我們只要開啟資料庫,然後將『主標題』資料表中的相關欄位資料取出來,並且加上相關的HTML表格標籤組合就可完成任務:[code]<?
//將資料錄轉換為欄位陣列集合
While (($fielddatas=mysql_fetch_array($datalist)))
{
?>
<TR Valign=TOP>
<TD NoWrap width="20%" bgcolor="#E8FFFF">
<p align="center"><font size="2">
<?=$fielddatas["發言日期"];?></font></TD>
<TD width="20%" bgcolor="#E8FFFF">
<p align="center"><font size="2">
<?=$fielddatas["姓名"];?></font></TD>
<TD width="50%" bgcolor="#E8FFFF">
<A HREF=join.php?ID=<?=$fielddatas["主編號"];?>>
<font size="2">
<?=$fielddatas["主題"];?></font></A></TD>
<TD width="10%" bgcolor="#E8FFFF">
<p align="center"><font size="2">
<?=$fielddatas["篇數"];?></font></TD>
</TR>
<?
}
?>[/code]利用While迴圈敘述將所有資料表中資料錄欄位的資料全部取出列表,迴圈敘述停止執行的條件為 mysql_fetch_array()函數傳回False值時,意思就是說動作中資料錄的位置若超過資料錄最後一筆資料時就停止迴圈敘述,當然,在迴圈中敘述執行讀取一筆資料錄資料後,mysql_fetch_array()函數會自動將作用中資料錄的位置移至下一筆資料上!
程式碼第14行與第16行:為了點選某一個已存在的討論項目「主題」超連結後,可以連結進入該討論主題的對應討論網頁(join.php),所以我們必須利用主標題資料表中『主編號』的欄位資料來建立超連結,當程式網頁執行後,我們檢視網頁的原始碼將獲得下列結果:[code]<TD width="50%" bgcolor="#E8FFFF"><A HREF=join.php?ID=1>
   <font size="2">
   測試</font></A></TD>[/code]為了讓較晚發表的討論主題在列表時能排在網頁的上方,因此,我們在開啟資料表的SQL敘述中,除了指定開啟的資料表為MainTitle(主標題)外,還加上了「Order By 發言日期 Desc」的排序語法敘述,也就是依照『發言日期』欄位的資料內容做遞減排序。[code]//建立查詢字串
$SQL="Select * From MainTitle Order By 發言日期 Desc";
//將回傳結果存放於變數中
$datalist=mysql_query($SQL);[/code]

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

index.php[code]<?
//連結MySQL Server
    $conn = mysql_connect("localhost", "root", "12345a");
//選擇資料庫
    mysql_select_db("BBS", $conn);
//指定提取資料的校對字元表
    mysql_query("set character set big5");
//建立查詢字串
$SQL="Select * From MainTitle Order By 發言日期 Desc";
//將回傳結果存放於變數中
$datalist=mysql_query($SQL);
?>

<HTML>
<head><title>PHP學習討論區</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
</head>
<BODY>
<h2 Align="Center"><img border="0" src="bbs.gif"></h2>
<TABLE Border=0 Cellspacing=5 width="100%">  
<TR BgColor=#00FFFF>  
<TD align="center" bgcolor="#0066FF" width="20%">
<font size="2" color="#FFFFFF">日期/時間</font></TD>
<TD NoWrapP align="center" bgcolor="#0066FF" width="20%">
<font size="2" color="#FFFFFF">討論發起人</font></TD>
<TD align="center" bgcolor="#0066FF" width="50%">
<font size="2" color="#FFFFFF">主題</font></TD>
<TD align="center" bgcolor="#0066FF" width="10%">
<font size="2" color="#FFFFFF">回應篇數</font></TD></TR>

<?
//將資料錄轉換為欄位陣列集合
While (($fielddatas=mysql_fetch_array($datalist)))
{
?>
<TR Valign=TOP>
<TD NoWrap width="20%" bgcolor="#E8FFFF">
<p align="center"><font size="2">
<?=$fielddatas["發言日期"];?></font></TD>
<TD width="20%" bgcolor="#E8FFFF">
<p align="center"><font size="2">
<?=$fielddatas["姓名"];?></font></TD>
<TD width="50%" bgcolor="#E8FFFF">
<A HREF=join.php?ID=<?=$fielddatas["主編號"];?>>
<font size="2">
<?=$fielddatas["主題"];?></font></A></TD>
<TD width="10%" bgcolor="#E8FFFF">
<p align="center"><font size="2">
<?=$fielddatas["篇數"];?></font></TD>
</TR>
<?
}
?>
</TABLE>

<TABLE Width="100%"><TR><TD Align=Center bgcolor=#000080>
<B><font color="#FFFFFF" size="2">我有新問題要討論</font></B>
</TD></TR></TABLE>
<CENTER>
<FORM Action=addnew.php Method=POST>
<TABLE Border="1" bgcolor="#FFCC66" bordercolor="#FF9933" cellspacing="0">
<TR><TD><font size="2">姓名:</font></TD>
<TD><font size="2"><INPUT Type="text" Size="30" Name="姓名"></font></TD></TR>
<TR><TD><font size="2">Email:</font></TD>
<TD><font size="2"><INPUT Type="text" Size="30" Name="Email">
  </font>
</TD></TR>
<TR><TD><font size="2">主題:</font></TD>
<TD><font size="2"><INPUT Type="text" Size="60" Name="主題">
  </font>
</TD></TR>
<TR><TD><font size="2">內容:</font></TD>
<TD><font size="2"><TEXTAREA Name="內容" Rows="8" Cols="60">
</TEXTAREA></font></TD></TR>
</TABLE>
<INPUT Type="submit" Value="送出討論主題">
</FORM>
</CENTER>
</BODY>
</HTML>[/code]

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

[color=RoyalBlue][size=3][b]新主題資料處理程式[/b][/size][/color]
之前談到:如果想要發表新的討論項目,可直接在程式網頁(index.php)下方的發言表單中輸入資料來建立新的討論主題,但是,index.php網頁程式並不負責處理新討論主題建立與寫入資料庫中的任務,而是將相關的資料於填寫完按下『送出討論主題』按鈕後交由addnew.php程式來處理。
[list=1]
[*]本新主題處理程式addnew.php新增資料錄是使用SQL語言的Insert Into命令敘述。
[*]完成新增資料錄寫入資料庫後,記得將網頁連結轉向回index.php程式網頁,否則瀏覽者所見到的將只是一個空白網頁。
[/list]

addnew.php[code]<?
//連結MySQL Server
    $conn = mysql_connect("localhost", "root", "12345a");
//選擇資料庫
    mysql_select_db("BBS", $conn);
//指定提取資料的校對字元表
    mysql_query("set character set big5");

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

//將資料寫入資料庫
$sql = "Insert Into maintitle (姓名, Email, 主題, 內容, 篇數, 發言日期) Values (";
$sql = $sql . chgStr($_REQUEST["姓名"]) . ",";
$sql = $sql . chgStr($_REQUEST["Email"]) . ",";
$sql = $sql . chgStr($_REQUEST["主題"]) . ",";
$sql = $sql . chgStr(nl2br($_REQUEST["內容"])) . ",";
$sql = $sql . 0 . ",'";
$sql = $sql . date("Y-m-j H:i:s") . "')";
mysql_query($sql);

header("Location: index.php");
?>[/code]

頁: [1]

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