羅德興老師的教學歷程檔案 - 111-2 三甲 ASP & DB - 註冊確認練習 (使用資料庫)
 

企業資訊與管理系
助理教授/日導
羅德興


歷程檔案 Portfolio

    註冊確認練習 (使用資料庫)

    註冊確認練習 (使用資料庫)

    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方式傳送







    全部共 0則留言
    登入帳號密碼代表遵守學術網路規範


    文章分類 Labels


    最新文章 Top10

    中華科技大學數位化學習歷程 - 意見反應