天天看點

PHP 學習筆記 賬号登入系統

剛接觸PHP,那麼就從基本的學起。

為了更好的學習,決定慢慢做一個網站demo。

第一步,要做一個登入系統。

登陸之前需要注冊,注冊需要用到資料庫,這裡就用MySQL來存好了,正好嘗試MySQL操作。

  • mysql操作:
mysqli_query($link,"INSERT INTO `user` (`user`, `password`) VALUES ('".$_POST['name']."', '".md5($_POST['password'])."')");
           

因為使用了新版PHP ,是以是mysqli。

  • form 中action 中填本檔案位址

使用$_SERVER["PHP_SELF"] 超全局變量,它傳回目前執行腳本的檔案名。

  • htmlspecialchars() 函數

htmlspecialchars() 函數把特殊字元轉換為 HTML 實體。這意味着 < 和 > 之類的 HTML 字元會被替換為 < 和 > 。這樣可防止攻擊者通過在表單中注入 HTML 或JavaScript 代碼(跨站點腳本攻擊)對代碼進行利用。

  • PHP Filter 

可以用來做過濾: 來自表單的輸入資料; Cookies; 伺服器變量; 資料庫查詢結果

比如驗證郵箱格式:filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)、

  • 跳轉

注冊成功後,需要跳轉到登陸界面;

echo "<meta http-equiv='refresh' content='2;URL=./login.php'>";

注冊需要郵箱驗證,是以需要伺服器配置mail。

正好之前有自己弄的企業郵箱。用admin賬戶發激活連結比較正式。

是以這裡用到了PHPmailer,下載下傳下來的PHPMailer解壓後進行瘦身,僅需要class.phpmailer.php、class.smtp.php以及PHPMailerAutoload.php三個檔案。

require_once '../phpmailer/PHPMailerAutoload.php';
                //示例化PHPMailer核心類
                $mail = new PHPMailer();

                //是否啟用smtp的debug進行調試 開發環境建議開啟 生産環境注釋掉即可 預設關閉debug調試模式
                $mail->SMTPDebug = 0;

                //使用smtp鑒權方式發送郵件,當然你可以選擇pop方式 sendmail方式等 本文不做詳解
                //可以參考http://phpmailer.github.io/PHPMailer/當中的詳細介紹
                $mail->isSMTP();
                //smtp需要鑒權 這個必須是true
                $mail->SMTPAuth=true;
                //連結qq域名郵箱的伺服器位址
                $mail->Host = 'smtp.exmail.qq.com';
                //設定使用ssl加密方式登入鑒權
                $mail->SMTPSecure = 'ssl';
                //設定ssl連接配接smtp伺服器的遠端伺服器端口号 可選465或587
                $mail->Port = 465;
                //設定smtp的helo消息頭 這個可有可無 内容任意
                $mail->Helo = 'Hello smtp.qq.com Server';
                //設定發件人的主機域 可有可無 預設為localhost 内容任意,建議使用你的域名
                $mail->Hostname = 'fuguoyin.com';
                //設定發送的郵件的編碼 可選GB2312 我喜歡utf-8 據說utf8在某些用戶端收信下會亂碼
                $mail->CharSet = 'UTF-8';
                //設定發件人姓名(昵稱) 任意内容,顯示在收件人郵件的發件人郵箱位址前的發件人姓名
                $mail->FromName = '管理者';
                //smtp登入的賬号 這裡填入字元串格式的qq号即可
                $mail->Username ='[email protected]';
                //smtp登入的密碼 這裡填入“獨立密碼” 若為設定“獨立密碼”則填入登入qq的密碼 建議設定“獨立密碼”
                $mail->Password = '********';
                //設定發件人郵箱位址 這裡填入上述提到的“發件人郵箱”
                $mail->From = '[email protected]';
                //郵件正文是否為html編碼 注意此處是一個方法 不再是屬性 true或false
                $mail->isHTML(true);
                //設定收件人郵箱位址 該方法有兩個參數 第一個參數為收件人郵箱位址 第二參數為給該位址設定的昵稱 不同的郵箱系統會自動進行處理變動 這裡第二個參數的意義不大
                $mail->addAddress($email,$user);
                //添加多個收件人 則多次調用方法即可
                #$mail->addAddress('','');
                //添加該郵件的主題
                $mail->Subject = '激活賬戶';
                //添加郵件正文 上方将isHTML設定成了true,則可以是完整的html字元串 如:使用file_get_contents函數讀取本地的html檔案
                $mail->Body = "<a href=".$uri." target="_blank" rel="external nofollow" >請點選連結激活賬戶</a>";
                //為該郵件添加附件 該方法也有兩個參數 第一個參數為附件存放的目錄(相對目錄、或絕對目錄均可) 第二參數為在郵件附件中該附件的名稱
                #$mail->addAttachment('./d.jpg','mm.jpg');
                //同樣該方法可以多次調用 上傳多個附件
                #$mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');


                //發送指令 傳回布爾值 
                //PS:經過測試,要是收件人不存在,若不出現錯誤依然傳回true 也就是說在發送之前 自己需要些方法實作檢測該郵箱是否真實有效
                $status = $mail->send();

                //簡單的判斷與提示資訊
                if($status) {
                 echo '發送郵件成功';
                }else{
                 echo '發送郵件失敗,錯誤資訊未:'.$mail->ErrorInfo;
                }
           

登入注冊需要安全,是以這裡需要給伺服器配置tls。這裡用的是nginx-fpm,是以直接在nginx上配置htps就可以了。

源碼在github上。

php