国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP 實(shí)現(xiàn)用戶注冊(cè)登錄功能

crelaber / 623人閱讀

摘要:本項(xiàng)目發(fā)布在實(shí)驗(yàn)樓,分為四部分內(nèi)容前端頁(yè)面制作,驗(yàn)證碼制作,實(shí)現(xiàn)注冊(cè)登陸,功能完善。全部章節(jié)及代碼詳解可以在實(shí)驗(yàn)樓中在線完成實(shí)現(xiàn)用戶注冊(cè)登錄功能驗(yàn)證碼制作一實(shí)驗(yàn)簡(jiǎn)介本次實(shí)驗(yàn)將會(huì)帶領(lǐng)大家使用面向?qū)ο蟮乃枷敕庋b一個(gè)驗(yàn)證碼類。

項(xiàng)目簡(jiǎn)介:本課程通過使用 PHP 及 Web 前端技術(shù)實(shí)現(xiàn)一個(gè)網(wǎng)站注冊(cè)登錄入口頁(yè)面,學(xué)習(xí)并實(shí)踐 PHP 編程,GD庫(kù),MySQL 擴(kuò)展,Bootstrap 響應(yīng)式布局,Cookie/Session 及 Ajax 等知識(shí)點(diǎn)。
本項(xiàng)目發(fā)布在實(shí)驗(yàn)樓,分為四部分內(nèi)容:1前端頁(yè)面制作,2驗(yàn)證碼制作,3實(shí)現(xiàn)注冊(cè)登陸,4功能完善。本節(jié)實(shí)驗(yàn)內(nèi)容為第二部分驗(yàn)證碼制作部分。

全部章節(jié)及代碼詳解可以在實(shí)驗(yàn)樓中在線完成:PHP 實(shí)現(xiàn)用戶注冊(cè)登錄功能

驗(yàn)證碼制作 一、實(shí)驗(yàn)簡(jiǎn)介

本次實(shí)驗(yàn)將會(huì)帶領(lǐng)大家使用面向?qū)ο蟮乃枷敕庋b一個(gè)驗(yàn)證碼類。并在注冊(cè)和登陸界面展示使用。通過本次實(shí)驗(yàn)的學(xué)習(xí),你將會(huì)領(lǐng)悟到 PHP 的 OOP 思想,以及 GD 庫(kù)的使用,驗(yàn)證碼生成。

1.1 涉及到的知識(shí)點(diǎn)

PHP

GD庫(kù)

OOP編程

1.2 開發(fā)工具

sublime,一個(gè)方便快速的文本編輯器。點(diǎn)擊桌面左下角: 應(yīng)用程序菜單/開發(fā)/sublime

1.3 效果圖

二、封裝驗(yàn)證碼類 2.1 建立目錄以及準(zhǔn)備字體

在 web 目錄下建立一個(gè) admin 目錄作為我們的后臺(tái)目錄,存放后臺(tái)代碼文件。在 admin 下建立一個(gè) fonts 目錄,用于存放制作驗(yàn)證碼所需字體。

在 admin 下新建一個(gè) Captcha.php 文件,這就是我們需要編輯的驗(yàn)證碼類文件。

當(dāng)前目錄層次結(jié)構(gòu):

編輯 Captcha.php 文件:


添加該類的私有屬性和構(gòu)造方法:

string = "qwertyupmkjnhbgvfcdsxa123456789";    //去除一些相近的字符
        $this->codeNum = $codeNum;
        $this->height = $height;
        $this->width = $width;
        $this->lineFlag = $lineFlag;
        $this->piexFlag = $piexFlag;
        $this->font = dirname(__FILE__)."/fonts/consola.ttf";
        $this->fontSize = $fontSize;
    }
}

字體文件可通過以下命令下載到 fonts 目錄:

$ wget http://labfile.oss.aliyuncs.com/courses/587/consola.ttf

接下來(lái)開始編寫具體的方法:

創(chuàng)建圖像資源句柄

//創(chuàng)建圖像資源    
public function createImage(){
        $this->img = imagecreate($this->width, $this->height);    //創(chuàng)建圖像資源
        imagecolorallocate($this->img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));    //填充圖像背景(使用淺色)
    }

用到的相關(guān)函數(shù)

imagecreate:新建一個(gè)基于調(diào)色板的圖像

imagecolorallocate:為一幅圖像分配顏色

mt_rand:生成更好的隨機(jī)數(shù)

創(chuàng)建驗(yàn)證碼字符串并輸出到圖像

//創(chuàng)建驗(yàn)證碼    
public function createCode(){
        $strlen = strlen($this->string)-1;
        for ($i=0; $i < $this->codeNum; $i++) { 
            $this->code .= $this->string[mt_rand(0,$strlen)];    //從字符集中隨機(jī)取出四個(gè)字符拼接
        }
          $_SESSION["code"] = $this->code;    //加入 session 中
    
      //計(jì)算每個(gè)字符間距
        $diff = $this->width/$this->codeNum;
        for ($i=0; $i < $this->codeNum; $i++) { 
                    //為每個(gè)字符生成顏色(使用深色)
          $txtColor = imagecolorallocate($this->img,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
          //寫入圖像
            imagettftext($this->img, $this->fontSize, mt_rand(-30,30), $diff*$i+mt_rand(3,8), mt_rand(20,$this->height-10), $txtColor, $this->font, $this->code[$i]);
        }
    }

用到的相關(guān)函數(shù):

imagettftext:用 TrueType 字體向圖像寫入文本

創(chuàng)建干擾線條

//創(chuàng)建干擾線條(默認(rèn)四條)
public function createLines(){
        for ($i=0; $i < 4; $i++) { 
            $color = imagecolorallocate($this->img,mt_rand(0,155),mt_rand(0,155),mt_rand(0,155));    //使用淺色
            imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color); 
        }
    }

用到的相關(guān)函數(shù):

imageline:畫一條線段

創(chuàng)建干擾點(diǎn)

//創(chuàng)建干擾點(diǎn)    (默認(rèn)一百個(gè)點(diǎn))
public function createPiex(){
        for ($i=0; $i < 100; $i++) { 
            $color = imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
            imagesetpixel($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
        }
    }

使用的相關(guān)函數(shù):

imagesetpixel:畫一個(gè)單一像素

對(duì)外輸出圖像:

    public function show()
    {
        $this->createImage();
        $this->createCode();
        if ($this->lineFlag) {    //是否創(chuàng)建干擾線條
            $this->createLines();
        }
        if ($this->piexFlag) {    //是否創(chuàng)建干擾點(diǎn)
            $this->createPiex();
        }
        header("Content-type:image/png");    //請(qǐng)求頁(yè)面的內(nèi)容是png格式的圖像
        imagepng($this->img);    //以png格式輸出圖像
        imagedestroy($this->img);    //清除圖像資源,釋放內(nèi)存
    }

用到的相關(guān)函數(shù):

imagepng:以 PNG 格式將圖像輸出到瀏覽器或文件

imagedestroy:銷毀一圖像

對(duì)外提供驗(yàn)證碼:

public function getCode(){
        return $this->code;
    }

完整代碼如下:

string = "qwertyupmkjnhbgvfcdsxa123456789";
        $this->codeNum = $codeNum;
        $this->height = $height;
        $this->width = $width;
        $this->lineFlag = $lineFlag;
        $this->piexFlag = $piexFlag;
        $this->font = dirname(__FILE__)."/fonts/consola.ttf";
        $this->fontSize = $fontSize;
    }

    public function createImage(){
        $this->img = imagecreate($this->width, $this->height);
        imagecolorallocate($this->img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
    }

    public function createCode(){
        $strlen = strlen($this->string)-1;
        for ($i=0; $i < $this->codeNum; $i++) { 
            $this->code .= $this->string[mt_rand(0,$strlen)];
        }
        $_SESSION["code"] = $this->code;
        $diff = $this->width/$this->codeNum;
        for ($i=0; $i < $this->codeNum; $i++) { 
            $txtColor = imagecolorallocate($this->img,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
            imagettftext($this->img, $this->fontSize, mt_rand(-30,30), $diff*$i+mt_rand(3,8), mt_rand(20,$this->height-10), $txtColor, $this->font, $this->code[$i]);
        }
    }

    public function createLines(){
        for ($i=0; $i < 4; $i++) { 
            $color = imagecolorallocate($this->img,mt_rand(0,155),mt_rand(0,155),mt_rand(0,155));
            imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color); 
        }
    }

    public function createPiexs(){
        for ($i=0; $i < 100; $i++) { 
            $color = imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
            imagesetpixel($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
        }
    }

    public function show()
    {
        $this->createImage();
        $this->createCode();
        if ($this->lineFlag) {
            $this->createLines();
        }
        if ($this->piexFlag) {
            $this->createPiexs();
        }
        header("Content-type:image/png");
        imagepng($this->img);
        imagedestroy($this->img);
    }

    public function getCode(){
        return $this->code;
    }
}

以上就是驗(yàn)證碼類的全部代碼。看起來(lái)確實(shí)挺簡(jiǎn)單的,不過用的圖像處理函數(shù)比較多,上面相關(guān)的函數(shù)我也做了必要的鏈接和用途說明。這些函數(shù)也不用死記硬背,遇到不清楚的,隨時(shí)查閱 PHP 官方文檔,最重要的是還有中文文檔。

2.2 使用驗(yàn)證碼

既然已經(jīng)封裝完畢,那就可以開始使用了。這里為了方便,直接在 Captcha 類的下方調(diào)用該類:

session_start(); //開啟session
$captcha = new Captcha();    //實(shí)例化驗(yàn)證碼類(可自定義參數(shù))
$captcha->show();    //調(diào)用輸出
三、前端展示

后端已經(jīng)準(zhǔn)備好了驗(yàn)證碼,前端界面就可以展示了,修改 index.php 中的注冊(cè)與登陸表單的驗(yàn)證碼部分:

Click to Switch

img 標(biāo)簽添加了點(diǎn)擊事件的 js 代碼,這樣就可以實(shí)現(xiàn)點(diǎn)擊更換驗(yàn)證碼的功能!

效果圖:

四、完善

到目前為止,我們的驗(yàn)證碼模塊基本就完成了。學(xué)習(xí)到這里,大家應(yīng)該對(duì)面向?qū)ο缶幊逃辛诉M(jìn)一步的理解。也領(lǐng)悟到了一絲 OOP 思想。OOP 的三大特征:封裝,繼承,多態(tài)。我們這里只用到了一點(diǎn)封裝的思想。大家可以繼續(xù)完善和改進(jìn)這個(gè)驗(yàn)證碼類,設(shè)計(jì)出更加完美的類。這個(gè)實(shí)驗(yàn)也告訴我們,PHP 的函數(shù)很多,不要死記硬背,多看官方文檔。

本項(xiàng)目完整教程和代碼詳解可以在實(shí)驗(yàn)樓查看。
更多PHP經(jīng)典項(xiàng)目:PHP全部-課程

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30356.html

相關(guān)文章

  • php+mysql開發(fā)賬號(hào)注冊(cè)/登錄/登陸后才可以查看/登陸后才可以下載功能

    摘要:本人這次的案例就是做一個(gè)注冊(cè)賬號(hào),登錄賬號(hào),登陸后才可以查看某些資源的功能,其實(shí)就是簡(jiǎn)單的操作數(shù)據(jù)庫(kù)。登錄表單里客云登錄你需要登陸后,才可以獲取本站資源請(qǐng)輸入賬號(hào)請(qǐng)輸入密碼登陸沒有賬號(hào)立即注冊(cè)登錄處理頁(yè)面。 幾乎大部分的網(wǎng)站都有注冊(cè)賬號(hào),登錄系統(tǒng),這是非常需要的一個(gè)模塊。本人這次的案例就是做一個(gè)注冊(cè)賬號(hào),登錄賬號(hào),登陸后才可以查看某些資源的功能,其實(shí)就是簡(jiǎn)單的php操作數(shù)據(jù)庫(kù)。 首先講...

    Arno 評(píng)論0 收藏0
  • Laravel 5.4 入門系列 9. 注冊(cè)登錄用戶關(guān)聯(lián)

    摘要:本節(jié)將實(shí)現(xiàn)文章評(píng)論與用戶關(guān)聯(lián)的功能。關(guān)系定義首先修改與表,增加字段增加全部回滾并重新執(zhí)行遷移添加用戶表與文章表評(píng)論表的一對(duì)多關(guān)系添加文章評(píng)論表與用戶表的多對(duì)一關(guān)系同時(shí),評(píng)論表的字段增加。同時(shí),我們還自定義了返回的錯(cuò)誤信息。 本節(jié)將實(shí)現(xiàn)文章、評(píng)論與用戶關(guān)聯(lián)的功能。 關(guān)系定義 首先修改 posts 與 comments 表,增加 user_id 字段 /database/migratio...

    smallStone 評(píng)論0 收藏0
  • PHP基于laravel框架獲取微博數(shù)據(jù)之一 模擬新浪微博登錄

    摘要:模擬登錄新浪微博的核心,也是與模擬登錄最大的不同,密碼加密。已經(jīng)實(shí)現(xiàn)模擬新浪微博登錄的功能,之后不再更新。 參考資料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/fly_leopard/article/details/51148904 http://www....

    galois 評(píng)論0 收藏0
  • Vue-book 2.0 一個(gè)移動(dòng)端簡(jiǎn)單的全棧 web APP

    摘要:本項(xiàng)目是一個(gè)簡(jiǎn)單的全棧項(xiàng)目,前端新手可以拿來(lái)練練手。項(xiàng)目實(shí)現(xiàn)了一些簡(jiǎn)單的功能,后臺(tái)可以對(duì)圖書進(jìn)行錄入錄出掃碼或手動(dòng),前臺(tái)顯示錄入的圖書,并且前臺(tái)注冊(cè)登錄后可以將書的訂單發(fā)給服務(wù)器,并存到服務(wù)器。 Vue-book 2.0 Github 地址:https://github.com/percy507/v... 【覺得不錯(cuò)就來(lái)個(gè) star 吧 ^_^】 說明(菜鳥請(qǐng)進(jìn),大神繞道 ~) 前端...

    wh469012917 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<