Dieser Kurs verwendet PHP und Web-Frontend-Technologie, um eine Website-Registrierungs- und Anmeldeseite zu implementieren, PHP-Programmierung zu lernen und zu üben usw. Interessierte Studenten können sich darauf beziehen.
In diesem Artikel wird die auf PHP basierende Benutzerregistrierungs- und Anmeldefunktion vorgestellt. Dieses Projekt ist in vier Teile unterteilt: 1. Erstellung der Front-End-Seite, 2. Erstellung des Bestätigungscodes, 3. Registrierung und Anmeldung, 4. Funktional Verbesserung. Einzelheiten finden Sie weiter unten.
Verifizierungscode-Erstellung
1. Einführung in das Experiment
Dieses Experiment führt Sie dazu, objektorientiertes Denken zu verwenden, um einen Verifizierungscode zu kapseln Art. Und auf der Registrierungs- und Anmeldeoberfläche angezeigt. Durch das Studium dieses Experiments werden Sie die OOP-Ideen von PHP sowie die Verwendung der GD-Bibliothek und die Generierung von Verifizierungscode verstehen.
1.1 Beteiligte Wissenspunkte
PHP
GD-Bibliothek
OOP-Programmierung
1.2 Entwicklungstools
sublime, ein praktischer und schneller Texteditor. Klicken Sie auf die untere linke Ecke des Desktops: Anwendungsmenü/Entwicklung/sublime
2. Kapselungsüberprüfungscodeklasse
2.1 Verzeichnisse erstellen und Schriftarten vorbereiten
Erstellen Sie unter dem Webverzeichnis ein Admin-Verzeichnis als unser Backend-Verzeichnis, um Backend-Codedateien zu speichern. Erstellen Sie unter „Admin“ ein Schriftartenverzeichnis, um die Schriftarten zu speichern, die für die Erstellung von Bestätigungscodes erforderlich sind.
Erstellen Sie unter Admin eine neue Captcha.php-Datei. Dies ist die Bestätigungscodedatei, die wir bearbeiten müssen.
Aktuelle Verzeichnishierarchie:
Captcha.php-Datei bearbeiten:
<?php /** * Captcha class */ class Captcha { function __construct() { # code... } }
Fügen Sie die privaten Eigenschaften und Konstruktionsmethoden dieser Klasse hinzu:
<?php /** * Captcha class */ class Captcha { private $codeNum; //验证码位数 private $width; //验证码图片宽度 private $height; //验证码图片高度 private $img; //图像资源句柄 private $lineFlag; //是否生成干扰线条 private $piexFlag; //是否生成干扰点 private $fontSize; //字体大小 private $code; //验证码字符 private $string; //生成验证码的字符集 private $font; //字体 function __construct($codeNum = 4,$height = 50,$width = 150,$fontSize = 20,$lineFlag = true,$piexFlag = true) { $this->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; } }
Schriftdateien können mit dem folgenden Befehl in das Schriftartenverzeichnis heruntergeladen werden:
$ wget http://labfile.oss.aliyuncs.com/courses/587/consola.ttf
Als nächstes beginnen Sie mit dem Schreiben der spezifischen Methode:
Bildressourcen erstellen Handle
//创建图像资源 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)); //填充图像背景(使用浅色) }
Verwendete verwandte Funktionen
imagecreate: Erstellen Sie ein neues palettenbasiertes Bild
imagecolorallocate: Einem Bild eine Farbe zuweisen
mt_rand: Bessere Zufallszahlen generieren
Erstellen Sie die Bestätigungscodezeichenfolge und geben Sie sie im Bild aus
//创建验证码 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; //加入 session 中 //计算每个字符间距 $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]); } }
Verwandte verwendete Funktionen
imagecreate: Erstellen Sie ein neues palettenbasiertes Bild
imagecolorallocate: Weisen Sie einem Bild eine Farbe zu
mt_rand: Generieren Sie bessere Zufallszahlen
Erstellen Sie die Bestätigungscodezeichenfolge und geben Sie sie im Bild aus
//创建验证码 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; //加入 session 中 //计算每个字符间距 $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]); } }
Verwandte verwendete Funktionen:
imagettftext: Text mit TrueType-Schriftarten in ein Bild schreiben
Interferenzlinien erstellen
//创建干扰线条(默认四条) 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); } }
Verwandte Funktionen:
Bildlinie: Liniensegment zeichnen
Interferenzpunkte erstellen
//创建干扰点 (默认一百个点) 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); } }
Verwandte Funktionen:
imagesetpixel: Ein einzelnes Pixel zeichnen
Externes Ausgabebild:
public function show() { $this->createImage(); $this->createCode(); if ($this->lineFlag) { //是否创建干扰线条 $this->createLines(); } if ($this->piexFlag) { //是否创建干扰点 $this->createPiex(); } header('Content-type:image/png'); //请求页面的内容是png格式的图像 imagepng($this->img); //以png格式输出图像 imagedestroy($this->img); //清除图像资源,释放内存 }
Verwandte Funktionen:
imagepng: PNG-Format Geben Sie das Bild im Browser oder in einer Datei aus
imagedestroy: Zerstöre ein Bild
Geben Sie einen externen Bestätigungscode an:
public function getCode(){ return $this->code; } 完整代码如下: <?php /** * Captcha class */ class Captcha { private $codeNum; private $width; private $height; private $img; private $lineFlag; private $piexFlag; private $fontSize; private $code; private $string; private $font; function __construct($codeNum = 4,$height = 50,$width = 150,$fontSize = 20,$lineFlag = true,$piexFlag = true) { $this->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; } }
Das Obige ist der gesamte Code der Verifizierungscodeklasse. Es scheint recht einfach zu sein, aber es nutzt viele Bildverarbeitungsfunktionen. Ich habe auch die notwendigen Links und Nutzungsanweisungen für die oben genannten verwandten Funktionen erstellt. Es besteht keine Notwendigkeit, sich diese Funktionen auswendig zu lernen. Wenn Sie auf etwas Unklares stoßen, lesen Sie bitte jederzeit die offizielle PHP-Dokumentation. Das Wichtigste ist, dass es eine chinesische Dokumentation gibt.
2.2 Verwendung des Bestätigungscodes
Nachdem es verpackt wurde, können Sie mit der Verwendung beginnen. Der Einfachheit halber rufen Sie diese Klasse hier direkt unter der Captcha-Klasse auf:
session_start(); //开启session $captcha = new Captcha(); //实例化验证码类(可自定义参数) $captcha->show(); //调用输出
3. Front-End-Anzeige
Der Bestätigungscode wurde am Ende vorbereitet und die Front-End-Schnittstelle kann den Bestätigungscode-Teil des Registrierungs- und Anmeldeformulars in index.php anzeigen:
<p class="form-group"> <p class="col-sm-12"> <img src="admin/Captcha.php" alt="" id="codeimg" onclick="javascript:this.src = 'admin/Captcha.php?'+Math.random();"> <span>Click to Switch</span> </p> </p>
Das img-Tag fügt den js-Code des Klickereignisses hinzu, sodass die Funktion des Klickens zum Ändern des Bestätigungscodes realisiert werden kann!
Rendering:
4. Verbesserung
Bisher ist unser Bestätigungscode Das Modul grundsätzlich vollständig. Nach dem Studium hier sollte jeder ein besseres Verständnis für objektorientierte Programmierung haben. Ich bemerkte auch einen Hauch von OOP-Denken. Die drei Hauptmerkmale von OOP: Kapselung, Vererbung und Polymorphismus. Wir verwenden hier nur einen kleinen Teil des Gedankens der Kapselung. Sie können diese Verifizierungscodeklasse weiter verfeinern und verbessern und eine perfektere Klasse entwerfen. Dieses Experiment zeigt uns auch, dass PHP viele Funktionen hat, also merken Sie sich diese nicht auswendig und lesen Sie mehr offizielle Dokumente.
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.
Verwandte Empfehlungen:
PHP verwendet Curl, um simulierte Anmelde- und Datenerfassungsfunktionsbeispiele zu implementieren
phpDie Lösung für das Problem verstümmelter Zeichen nach dem Testen mit Apache
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Benutzerregistrierungs- und Anmeldefunktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!