Board logo

標題: 13-2-1 寄送賀卡的程式 [打印本頁]

作者: 小誌    時間: 2011-4-24 15:03     標題: 13-2-1 寄送賀卡的程式

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

作者: 小誌    時間: 2011-4-24 15:06

賀卡資料的寫入
「ecard.php」程式網頁第一個首要的工作是將相關的賀卡資料寫入資料庫『ecard.mdb』,以便領取賀片時「getcard.php」能順利取得賀卡資料:
  1. //連結MySQL Server
  2.     $conn = mysql_connect("localhost", "root", "12345a");
  3. //選擇資料庫
  4.     mysql_select_db("ecard", $conn);
  5. //指定提取資料的校對字元表
  6.     mysql_query("set character set big5");
  7. //將賀卡資料寫入資料庫
  8. $SQL="Insert Into cardinfo (fromname,fromemail,toname,toemail,message,card) values(
  9. '$fromName','$fromEmail','$toName','$toEmail','$Message','$Card')";
  10. mysql_query($SQL);
複製代碼
本範例的資料表結構如下:
[attach]5827[/attach]
圖13-11 資料表結構。

欄位

資料型態

其他屬性

CardID

Int,自動編號

索引欄位

Fromname

Varchar

大小50

Fromemail

Varchar

大小50;必需有資料

Toname

Varchar

大小50

Toemail

Varchar

大小50;必需有資料

Message

text

Card

Varchar

大小10




提示!!
在範例光碟\DataBase目錄中有一個MySQL資料庫「ecard」,檔案名稱為「ECARD.sql」,請您將檔案複製到您的硬碟裡並使用phpMyAdmin將其載入到MySQL Server中,您可直接加以利用。
[attach]5828[/attach]
作者: 小誌    時間: 2011-4-24 15:08

通知信的寄送
要寄送通知信,本範例此次依然使用CODNTS.NewMail物件寄送郵件,因為通知信中有一個領取賀卡的網址連結,而此網址的產生方式如下:
  1. //設定來站取得卡片的網頁網址位置
  2. $httpUrl=$_SERVER["SERVER_NAME"];
  3. $basUrl=$_SERVER["PHP_SELF"];
  4. $Pos=strrpos($basUrl,'/');
  5. $basUrl=substr($basUrl,0,$Pos);
  6. $CardID=mysql_insert_id($conn);
  7. $CardUrl="http://" . $httpUrl . $basUrl ."/getcard.php?CardID=" . $CardID;
複製代碼
其中:


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

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

  5. 祝你收卡愉快!
  6. 麻辣學園賀卡小組 敬上
複製代碼
其中「{name}」為寄件者、「{email}」為寄件者Email信箱、「{url}」為賀卡領取網址。
作者: 小誌    時間: 2011-4-24 15:11

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




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)