羅德興老師的教學歷程檔案 - 111-2 三甲 ASP & DB - 註冊確認練習 (使用資料庫) |
|
|
註冊確認練習 (使用資料庫)註冊確認練習 (使用資料庫)0. 程式結構 <?php include "config.php"; $ccode=$_GET["ccode"]; $command=$_POST["command"]; if ($command=="" && ccode=="") { 顯示第一個頁面 display_first_page($conn); } elseif ($command=="註冊") { 顯示註冊頁面 display_register_page($conn); } elseif ($command=="" && ccode<>"") { 顯示確認頁面 display_confirm_page($conn); } ?> 1. 資料表 (*.sql) -- DROP DATABASE IF EXISTS mydb; -- CREATE DATABASE mydb DEFAULT CHARACTER SET utf8; -- USE mydb; CREATE TABLE stmd_a ( email VARCHAR(40) COMMENT '電子郵件', name VARCHAR(20) COMMENT '姓名', ccode VARCHAR(128) COMMENT '識別碼', valid CHAR(1) COMMENT 'Y-可用', primary key(email) ); 2. 註冊確認 (verify.php) <?php include "config.php"; $ccode=$_GET["ccode"]; $email=$_GET["email"]; $command=$_POST["command"]; if ($command=="" && $ccode=="") { display_first_page($conn); } elseif ($command=="註冊") { display_register_page($conn); } elseif ($command=="" && $ccode<>"") { display_confirm_page($conn); } mysqli_close($conn); function display_first_page($conn) { echo "<html><body><center> <font color='red'><h1> 註冊後系統會寄一封確認信至您的信箱,開啟信箱後直接點擊超連結確認成功才能啟用帳號<br> </h1></font><table border=1 bordercolor='black' width=100%> <form method='post' action=''> <tr><td bgcolor='#ccccff'>電子郵件帳號</td> <td><input type='text' name='email' size=50></td></tr> <tr><td bgcolor='#ccccff'>姓名</td> <td><input type='text' name='name' size=50></td></tr></table> <input type='submit' name='command' value='註冊'> </form></center></body></html>"; } function display_register_page($conn) { $email=$_POST["email"]; $name=$_POST["name"]; if ($email=="" || $name=="") { echo "電子郵件與姓名欄不能空白,請回前頁重新輸入"; die(); } // 儲存電子郵件帳號與密碼 $ccode=md5(uniqid(rand())); // 產生唯一的識別碼 $sql="insert into stmd_a values('$email','$name','$ccode','') on duplicate key update name='$name',ccode='$ccode' "; mysqli_query($conn,$sql); $filename=basename($_SERVER['PHP_SELF']); $message="$name 君您好<br><br>"; $message.=" 請直接點擊下列超連結來確認此註冊信<br><br>"; $message.="<a href='http://ling.byethost7.com/mydb/$filename?ccode=$ccode&email=$email' > http://ling.byethost7.com/mydb/$filename?ccode=$ccode&email=$email </a>"; $subject = "(標題) $name 君 註冊確認"; $ok=display_sendmail_page($email,$subject,$message); if (!$ok) { echo "系統無法發送確認信至您的Email信箱,請稍候再試"; die(); } echo "系統已經發送一封確認信至您的Email信箱<p>請立即開啟Email進行註冊確認"; } function display_confirm_page($conn) { echo "完成此程式作確認動作, 首先 get email 與 ccode<br> 再由 stmd_a 中查詢email並取出ccode與get出來的ccode比較<br> 如果ccode一樣則將valid設為Y表示註冊確認成功"; } function display_sendmail_page($email,$subject,$message){ require_once("../phpmailer/PHPMailerAutoload.php"); // 產生 Mailer 實體 $mail = new PHPMailer(); // 設定為 SMTP 方式寄信 $mail->IsSMTP(); // SMTP 伺服器的設定,以及驗證資訊 $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->SMTPAuth = true; $mail->SMTPSecure = 'ssl'; // 信件內容的編碼方式 $mail->CharSet = "utf-8"; // 信件處理的編碼方式 $mail->Encoding = "base64"; // SMTP 驗證的使用者資訊 $mail->Username = "xxxx@gmail.com"; //mail的帳號(需要完整的mail帳號,含@後都要填寫) $mail->Password = "yyyyyyyy"; //密碼 // 信件內容設定 $mail->From = "xxxx@gmail.com"; //需要與上述的使用者資訊相同mail $mail->FromName = "my-email 107XXXX"; //此顯示寄件者名稱,您的學號 $mail->Subject = "$subject"; //信件主旨 $mail->Body = "$message"; //信件內容 $mail->IsHTML(true); // 收件人 $mail->AddAddress("$email", "$name"); //此為收件者的電子信箱及顯示名稱 // 顯示訊息 if(!$mail->Send()) { echo "寄送郵件有誤!! Mail error: " . $mail->ErrorInfo; return false; } else { return true; echo "Mail sent. 謝謝 $name 君,您的確認信已寄出! "; } } ?> 兩點注意事項: 一、使用 PHPMailer 用 smtp 寄信 (資料來源:http://heavenchou.buddhason.org/node/326) SMTP 是簡單郵件傳輸協定(Simple Mail Transfer Protocol) ,這是在 Internet 上傳送 email 的一個協定,意思就是可以用它來寄信。 再度上網查詢,得知可以安裝一個套件 PHPMailer 就可以在 PHP 使用 smtp 寄信。問題來了,我不是主機的擁有者,無法直接安裝此套件。所幸後來找到有人有類似的問題,找到了只要複製幾個重要的檔案,就可以執行的方法了。 下載 PHPMailer PHPMailer 可在此下載 https://github.com/PHPMailer/PHPMailer/releases 因為我使用的是 PHP 5.3 ,所以選 PHPMailer 5.2.27 版。(當時以為 PHPMailer 6.X 是給 PHP 6.X 使用的) 解壓縮後,取出這四個檔案: class.phpmailer.php class.pop3.php class.smtp.php PHPMailerAutoload.php 在 php 程式碼的目錄中建一個子目錄,取名為 phpmailer,將這四個檔案放進去。 再去 撰寫由 GMail SMTP 寄信的程式 二、 要撰寫由網站主機寄信的程式時,有兩種方式: 1. 程式中使 用 gmail 的 smtp 主機寄信, 有一點要注意,若是要用 gmail 的主機寄信,即 gmail 要設定成「低安全性應用程式存取權」,可在登錄 Google 帳號後,瀏覽此頁說明。 https://myaccount.google.com/lesssecureapps 2. 寫程式由網站主機寄出信件 本練習是由 gmail smtp 寄信的測試,不過實際上還是希望由租用主機的 smtp 寄出,因此要修改一些資料。 首先要在租用的主機上建立一個信箱帳號, 如上面的練習並沒有建,是直接把信件轉到 gmail, 若是要要使用主機的 smtp,便要建帳號,設密碼,再參考網路上 自行撰寫 PHP 程式使用 smtp 寄信的程式。 EX. 請將前述程式完成後 送到 您申請的網路空間 下 執行 之後再改寫為一個寄信程式, 可以被呼叫 以 GET方式傳送
|
|
中華科技大學數位化學習歷程 - 意見反應 |