麻辣家族討論版版's Archiver

小誌 發表於 2011-4-24 15:03

13-2-1 寄送賀卡的程式

[color=DarkRed][size=4][b]13-2-1   寄送賀卡的程式[/b][/size][/color]填寫賀卡資料的index.htm網頁,都是一些基礎的HTML應用,在此就不多加說明了,賀卡資料在按下「預覽賀卡」按鈕後,先送交viewcard.php程式網頁,讓使用者先檢視賀卡的內容,而viewcard.php程式網頁的工作有兩個:
1.將賀卡資料與完整的賀卡圖片顯示出來。[code]<?
//接收來自表單的欄位資訊
$fromName=$_REQUEST["fromName"];
$fromEmail=$_REQUEST["fromEmail"];
$toName=$_REQUEST["toName"];
$toEmail=$_REQUEST["toEmail"];
$Message=$_REQUEST["message"];
$Card=$_REQUEST["card"];
//略…
<!--顯示賀卡的內容供使用者確認-->
        <div align=center>
                <table border=1 id=table1 style="font-size:10pt; border-collapse:collapse" bordercolor="#000080">
                        <tr>
                                <td>收件人:<B><?=$toName;?></B><Br>
                                收件信箱:<B><?=$toEmail;?></B></td>
                        </tr>
                        <tr>
                                <td><img src="<?=$Card;?>"></td>
                        </tr>
                        <tr>
                                <td bgcolor="#CCFFFF"><?=nl2br($Message);?></td>
                        </tr>
                </table>
        </div>
<!------------------------------>[/code]2.將賀卡資料存放於隱藏的表單欄位中,如果使用者覺得賀卡內容無誤而按下「寄出賀卡」按鈕後,必須把賀卡資料交由「ecard.php」程式網頁來將資料寫入資料庫,並透過「ecard.php」程式網頁寄出賀卡領取通知信給收件者:[code]<form method=POST action=ecard.php>
<p align=center>
<!--寄送賀卡用的隱藏欄位-->
<input type=hidden name=fromName value="<?=$fromName;?>">
<input type=hidden name=fromEmail value="<?=$fromEmail;?>">
<input type=hidden name=toName value="<?=$toName;?>">
<input type=hidden name=toEmail value="<?=$toEmail;?>">
<input type=hidden name=message value="<?=$Message;?>">
<input type=hidden name=card value="<?=$Card;?>">
<!---------------------------------------->
<input type=submit value=寄出卡片>
<input type=button value=修改賀卡 onclick='window.history.go(-1);'>
</p>        </form>[/code]

小誌 發表於 2011-4-24 15:06

[color=royalblue][size=3][b]賀卡資料的寫入[/b][/size][/color]
「ecard.php」程式網頁第一個首要的工作是將相關的賀卡資料寫入資料庫『ecard.mdb』,以便領取賀片時「getcard.php」能順利取得賀卡資料:[code]//連結MySQL Server
    $conn = mysql_connect("localhost", "root", "12345a");
//選擇資料庫
    mysql_select_db("ecard", $conn);
//指定提取資料的校對字元表
    mysql_query("set character set big5");
//將賀卡資料寫入資料庫
$SQL="Insert Into cardinfo (fromname,fromemail,toname,toemail,message,card) values(
'$fromName','$fromEmail','$toName','$toEmail','$Message','$Card')";
mysql_query($SQL);[/code]本範例的資料表結構如下:
[attach]5827[/attach]
圖13-11 資料表結構。
[table]
[tr][td=1,1,160][p=30, 2, center][b][size=2][font=細明體]欄位[/font][color=white][/color][/size][/b][/p][/td][td=1,1,197][p=30, 2, center][b][size=2][font=細明體]資料型態[/font][color=white][/color][/size][/b][/p][/td][td=1,1,197][p=30, 2, center][b][size=2][font=細明體]其他屬性[/font][color=white][/color][/size][/b][/p][/td][/tr]
[tr][td=1,1,160][p=30, 2, left][color=black][font=Courier New][size=2]CardID[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][size=2][color=black][font=Courier New]Int,[/font][/color][font=細明體]自動編號[/font][color=black][/color][/size][/p][/td][td=1,1,197][p=30, 2, left][size=2][font=細明體]索引欄位[/font][color=black][/color][/size][/p][/td][/tr]
[tr][td=1,1,160][p=30, 2, left][color=black][font=Courier New][size=2]Fromname[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][color=black][font=Courier New][size=2]Varchar[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][size=2][font=細明體]大小[/font][color=black][font=Courier New]50[/font][/color][/size][/p][/td][/tr]
[tr][td=1,1,160][p=30, 2, left][color=black][font=Courier New][size=2]Fromemail[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][color=black][font=Courier New][size=2]Varchar[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][size=2][font=細明體]大小[/font][font=Courier New][color=black]5[/color][font=全真中明體]0[/font][/font][font=細明體];必需有資料[/font][color=black][/color][/size][/p][/td][/tr]
[tr][td=1,1,160][p=30, 2, left][color=black][font=Courier New][size=2]Toname[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][color=black][font=Courier New][size=2]Varchar[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][size=2][font=細明體]大小[/font][color=black][font=Courier New]50[/font][/color][/size][/p][/td][/tr]
[tr][td=1,1,160][p=30, 2, left][color=black][font=Courier New][size=2]Toemail[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][color=black][font=Courier New][size=2]Varchar[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][size=2][font=細明體]大小[/font][font=Courier New][color=black]5[/color][font=全真中明體]0[/font][/font][font=細明體];必需有資料[/font][color=black][/color][/size][/p][/td][/tr]
[tr][td=1,1,160][p=30, 2, left][color=black][font=Courier New][size=2]Message[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][color=black][font=Courier New][size=2]text[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][color=black][font=Courier New][size=2] [/size][/font][/color][/p][/td][/tr]
[tr][td=1,1,160][p=30, 2, left][color=black][font=Courier New][size=2]Card[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][color=black][font=Courier New][size=2]Varchar[/size][/font][/color][/p][/td][td=1,1,197][p=30, 2, left][size=2][font=細明體]大小[/font][color=black][font=Courier New]10[/font][/color][/size][/p][/td][/tr]
[/table]


[color=Red]提示!![/color]
在範例光碟\DataBase目錄中有一個MySQL資料庫「ecard」,檔案名稱為「ECARD.sql」,請您將檔案複製到您的硬碟裡並使用phpMyAdmin將其載入到MySQL Server中,您可直接加以利用。
[attach]5828[/attach]

小誌 發表於 2011-4-24 15:08

[color=RoyalBlue][size=3][b]通知信的寄送[/b][/size][/color]
要寄送通知信,本範例此次依然使用CODNTS.NewMail物件寄送郵件,因為通知信中有一個領取賀卡的網址連結,而此網址的產生方式如下:[code]//設定來站取得卡片的網頁網址位置
$httpUrl=$_SERVER["SERVER_NAME"];
$basUrl=$_SERVER["PHP_SELF"];
$Pos=strrpos($basUrl,'/');
$basUrl=substr($basUrl,0,$Pos);
$CardID=mysql_insert_id($conn);
$CardUrl="http://" . $httpUrl . $basUrl ."/getcard.php?CardID=" . $CardID;[/code]其中:
[list]
[*]$_SERVER["SERVER_NAME"]:用以取得伺服器名稱。
[*]$_SERVER["PHP_SELF"]:取得網頁本身的網址。
[/list]

例如:ecard.php程式網頁位於「[url]http://www.twbts.com/ecard/ecard.php[/url]」,則$_SERVER["SERVER_NAME"]可取得『[url]www.twbts.com[/url]』,而$_SERVER["PHP_SELF"]取得『/ecard/ecard.php』。
領取賀卡的網址連結需要$_SERVER["SERVER_NAME"]取得『[url]www.twbts.com[/url]』,但$_SERVER["PHP_SELF"]取得的網頁位置『/ecard/ecard.php』,我們卻只需要其中的『/ecard/』,所以可利用strrpos()與substr()函數來擷取我們需要的部份。
由於通知信基本的信件大部分內容是固定的,只有寄件人資訊跟賀卡的讀取網址會變,所以信件的內容可以固定存放於一個檔案,例如本範例將信件內容存放於mail.htm網頁檔,其內容如下:[code]"{name}"({email})在 "麻辣學園" 選了一張卡片寄給你喔!

卡片領取辦法:
請點選以下網址前往收取(30天內有效)。
{url}

祝你收卡愉快!
麻辣學園賀卡小組 敬上[/code]其中「{name}」為寄件者、「{email}」為寄件者Email信箱、「{url}」為賀卡領取網址。

小誌 發表於 2011-4-24 15:11

若要進行檔案的存取動作必須先fopen()函數開啟特定的檔案,以便進行檔案的各項處理作用。當檔案被成功開啟之後,我們就可以利用filesize()函數得知檔案的大小,然後呼叫fread()方法來讀取完整的檔案內容:[code]//讀取卡片領取通知的網頁內容
$fs=fopen("mail.htm","r");
$body=fread($fs,filesize("mail.htm"));
fclose($fs);[/code]要置換特定關鍵字則可使用str_replace()函數,例如本範例置換「{name}」、「{email}」、「{url}」為寄件者、寄件者Email信箱、賀卡取網址:[code]//置換卡片領取通知信件的內容
$body=str_replace("{name}", $toName, $body);
$body=str_replace("{email}", $toEmail, $body);
$body=str_replace("{url}", $CardUrl, $body);[/code]特別注意到「{url}」的置換部份:[code]$CardUrl="http://" . $httpUrl . $basUrl ."/getcard.php?CardID=" . $CardID;[/code]Getcard.php為負責讀取賀卡的程式網頁,此程式網頁在執行時,必須傳遞一個「CardID」參數,此參數值即為賀卡記錄的編號,也就是領取賀卡的編號,例如某張賀卡紀錄寫入資料庫,該紀錄的「CardID」欄位值為3,則領取該賀卡的連結網址就如下所示:[code]http://localhost/ch13/ecard/getcard.php?CardID=3[/code][color=Red]  提示!![/color]PHP 函數mysql_insert_id(),可取得最後一次執行了新增查詢(INSERT)後,由AUTO_INCREMENT 定義的欄位值。

頁: [1]

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