เราสร้างระบบการลงทะเบียนที่เรียบง่ายอย่างไม่น่าเชื่อใน PHP และ MySQL การสร้างระบบการลงทะเบียน PHP และ MySQL ที่ง่ายอย่างไม่น่าเชื่อ การลงทะเบียนผู้ใช้ php ดัชนีที่ยังไม่ได้ชำระ

เราสร้างระบบการลงทะเบียนที่เรียบง่ายอย่างไม่น่าเชื่อใน PHP และ MySQL การสร้างระบบการลงทะเบียน PHP และ MySQL ที่ง่ายอย่างไม่น่าเชื่อ การลงทะเบียนผู้ใช้ php ดัชนีที่ยังไม่ได้ชำระ

หากคุณต้องการให้ส่วนใดส่วนหนึ่งในไซต์ของคุณใช้ได้กับกลุ่มคนที่จำกัดแต่ไม่จำกัด วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการลงทะเบียนและให้สิทธิ์ผู้ใช้ มีหลายวิธีในการตรวจสอบผู้ใช้ สามารถใช้ได้ทั้งเครื่องมือเว็บเซิร์ฟเวอร์และเครื่องมือภาษาโปรแกรม เราจะพูดถึงกรณีที่ใช้เซสชัน PHP

คุณอาจต้องการเห็นวิธีการที่ทันสมัยกว่าในการสร้างรูปร่างดังกล่าว ฉันยังมีการนำเสนอที่ทันสมัยและทันสมัยอย่างสมบูรณ์ แต่คุณจะเห็นว่าแบบฟอร์มคำติชมสามารถสร้างขึ้นได้โดยใช้เทคนิคเชิงวัตถุใน PHP

อันดับแรก มาพูดถึงขั้นตอนทั้งหมดที่เราจะทำต่อไป เราต้องการอะไร เราต้องการสคริปต์ที่จะลงทะเบียนผู้ใช้ อนุญาตผู้ใช้ เปลี่ยนเส้นทางผู้ใช้ไปที่ใดที่หนึ่งหลังจากการอนุญาต เราจะต้องสร้างเพจที่จะป้องกันการเข้าถึงโดยผู้ใช้ที่ไม่ได้รับอนุญาต สำหรับการลงทะเบียนและการอนุญาต เราจะต้องสร้างแบบฟอร์ม HTML เราจะจัดเก็บข้อมูลเกี่ยวกับผู้ใช้ที่ลงทะเบียนไว้ในฐานข้อมูล ซึ่งหมายความว่าเรายังต้องการสคริปต์เพื่อเชื่อมต่อกับ DBMS งานทั้งหมดของเราจะดำเนินการตามหน้าที่ที่เราจะเขียนเอง เราจะบันทึกฟังก์ชันเหล่านี้ในไฟล์แยกต่างหาก

ดังนั้นเราต้องการไฟล์ต่อไปนี้:

  • การเชื่อมต่อกับ DBMS;
  • ฟังก์ชั่นที่กำหนดเอง;
  • การอนุญาต;
  • การลงทะเบียน;
  • หน้าป้องกัน;
  • สคริปต์การปิดระบบของผู้ใช้
  • สคริปต์ที่ตรวจสอบสถานะการให้สิทธิ์ของผู้ใช้
  • สไตล์ชีตสำหรับการออกแบบหน้าเว็บของเราที่ง่ายที่สุด

ทั้งหมดนี้จะไม่มีประโยชน์หากคุณไม่มีตารางที่สอดคล้องกันในฐานข้อมูลของคุณ เปิดเครื่องมือการจัดการ DBMS ของคุณ (PhpMyAdmin หรือบรรทัดคำสั่งแล้วแต่สะดวกกว่า) และเรียกใช้แบบสอบถามต่อไปนี้:

สร้างตาราง `users' (` id` int (11) ไม่ใช่ NULL AUTO_INCREMENT, `login` char (16) ไม่ใช่ NULL,` รหัสผ่าน `ถ่าน (40) ไม่ใช่ NULL, `reg_date` เวลาประทับไม่ใช่ NULL DEFAULT CURRENT_TIMESTAMP, คีย์หลัก (` id`)) เครื่องยนต์ = MyISAM ค่าเริ่มต้น CHARSET = utf8 AUTO_INCREMENT = 1;

ฉันจะตั้งชื่อไฟล์สคริปต์ของเราแบบนี้ (ไฟล์ทั้งหมดจะอยู่ในไดเรกทอรีเดียวกัน):

  • ฐานข้อมูล.php;
  • ฟังก์ชั่น.php;
  • เข้าสู่ระบบ.php;
  • register.php;
  • ดัชนี.php;
  • ออกจากระบบ.php;
  • checkAuth.php;
  • สไตล์.css.

ฉันแน่ใจว่าจุดประสงค์ของแต่ละคนนั้นชัดเจนสำหรับคุณ เริ่มต้นด้วยสคริปต์การเชื่อมต่อ DBMS คุณเคยเห็นมันมาก่อน เพียงบันทึกโค้ดสำหรับสคริปต์นี้ในไฟล์ชื่อ database.php เราจะประกาศฟังก์ชันที่กำหนดเองในไฟล์ functions.php ทั้งหมดนี้จะทำงานอย่างไร? ผู้ใช้ที่ไม่ได้รับอนุญาตพยายามเข้าถึงเอกสารที่ได้รับการป้องกัน index.php ระบบจะตรวจสอบว่าผู้ใช้ได้รับอนุญาตหรือไม่ หากผู้ใช้ไม่ได้รับอนุญาต เขาจะถูกเปลี่ยนเส้นทางไปยังหน้าการอนุญาต ในหน้าการให้สิทธิ์ ผู้ใช้ควรเห็นแบบฟอร์มการให้สิทธิ์ มาทำกัน

การให้สิทธิ์ผู้ใช้

ลงทะเบียน.

ตอนนี้เราต้องทำให้รูปร่างของเราดูดีขึ้น ในเวลาเดียวกัน เราจะกำหนดกฎสำหรับองค์ประกอบอื่นๆ ฉันจะให้เนื้อหาทั้งหมดของสไตล์ชีตแก่คุณ เพื่อนำหน้าตัวเอง

/ * ไฟล์ style.css * / .row (ระยะขอบล่าง: 10px; ความกว้าง: 220px;) ป้ายกำกับ .row (แสดง: บล็อก; น้ำหนักแบบอักษร: ตัวหนา;) .row input.text (ขนาดแบบอักษร: 1.2em; padding: 2px 5px;) .to_reg (font-size: 0.9em;) คำสั่ง (font-size: 0.8em; color: #aaaaaa; margin-left: 2px; cursor: default;) .error (color: red; ระยะขอบซ้าย: 3px;)

หากทุกอย่างถูกต้อง คุณควรมีสิ่งต่อไปนี้ในเบราว์เซอร์ของคุณ:

แน่นอน เรายังไม่มีผู้ใช้ที่ลงทะเบียนเพียงคนเดียว และในการเข้าสู่ระบบ คุณต้องลงทะเบียน มาทำแบบฟอร์มลงทะเบียนกันเถอะ

การลงทะเบียนผู้ใช้

" />

คุณอาจสังเกตเห็นว่ามีตัวแปร PHP ในโค้ด HTML เป็นเนื้อหาของแอตทริบิวต์ของฟิลด์ข้อความในรูปแบบเนื้อหาของคอนเทนเนอร์สำหรับการแสดงข้อผิดพลาด แต่เรายังไม่ได้เริ่มต้นตัวแปรเหล่านี้ มาทำกัน

การลงทะเบียนผู้ใช้

" />
ชื่อผู้ใช้สามารถมีได้เฉพาะอักขระละติน ตัวเลข สัญลักษณ์ "_", "-", "." ชื่อผู้ใช้ต้องมีความยาวอย่างน้อย 4 ตัวอักษรและไม่เกิน 16 ตัวอักษร
ในรหัสผ่าน คุณสามารถใช้ได้เฉพาะอักขระละติน ตัวเลข สัญลักษณ์ "_", "!", "(", ")" รหัสผ่านต้องมีอย่างน้อย 6 ตัวอักษรและไม่เกิน 16 ตัวอักษร
ทำซ้ำรหัสผ่านที่ป้อนก่อนหน้านี้

ไม่มีพารามิเตอร์ที่ระบุในแอ็ตทริบิวต์ action ของ form tag ในกรณีนี้ เมื่อส่งข้อมูลในแบบฟอร์ม ข้อมูลนั้นจะถูกประมวลผลในสคริปต์เดียวกันกับที่ส่ง ดังนั้นเราต้องเขียนโค้ดที่ประมวลผลข้อมูลในแบบฟอร์ม แต่ก่อนอื่น เรามาพูดถึงอัลกอริทึมสำหรับการประมวลผลกันก่อน

เราต้องการช่องเข้าสู่ระบบและรหัสผ่านเพื่อไม่ให้ว่างเปล่า จากนั้นคุณต้องตรวจสอบการเข้าสู่ระบบเพื่อให้สอดคล้องกับข้อกำหนด รหัสผ่านต้องเป็นไปตามข้อกำหนดที่อธิบายไว้ด้วย และรหัสผ่านที่ซ้ำต้องตรงกัน และยิ่งไปกว่านั้น รหัสผ่านต้องเหมือนกันด้วย หากไม่เป็นไปตามเงื่อนไขใดๆ เหล่านี้ ควรหยุดการประมวลผลข้อมูลในแบบฟอร์ม การแจ้งเตือนที่เกี่ยวข้องควรเขียนลงในอาร์เรย์ของข้อความแสดงข้อผิดพลาด และควรแสดงให้ผู้ใช้เห็น เพื่อความสะดวกของผู้ใช้ เราจะบันทึกการเข้าสู่ระบบที่ป้อนโดยเขา (หากเขาระบุ) โดยเขียนค่าลงในอาร์เรย์ฟิลด์ $

หากทุกอย่างเรียบร้อยดี ในหน้าต่างเบราว์เซอร์ของคุณ ที่อ้างอิงถึงเอกสาร register.php คุณควรเห็นสิ่งนี้:

ตอนนี้ สมมติว่าผู้ใช้คลิกที่ปุ่มลงทะเบียนโดยไม่ต้องกรอกข้อมูลในแบบฟอร์ม ตามอัลกอริทึมของเรา การเข้าสู่ระบบและรหัสผ่านต้องไม่ว่างเปล่า หากไม่เป็นไปตามเงื่อนไขนี้ จะไม่สามารถลงทะเบียนได้ เราพึงระลึกไว้เสมอว่าการประมวลผลข้อมูลแบบฟอร์มเกิดขึ้นในสคริปต์ปัจจุบัน ซึ่งหมายความว่าเราจำเป็นต้องเปลี่ยนรหัสโดยเพิ่มการตรวจสอบที่เหมาะสม เราจะกำหนดการตรวจสอบต่อไปนี้ทันที หากป้อนทั้งล็อกอินและรหัสผ่าน คุณต้องตรวจสอบการปฏิบัติตามข้อกำหนดที่ระบุ ในการตรวจสอบการเข้าสู่ระบบและรหัสผ่าน เราจะสร้างฟังก์ชันที่กำหนดเองในไฟล์ functions.php

/ ** * functions.php * ไฟล์ที่มีฟังก์ชั่นที่กำหนดเอง * / // รวมไฟล์ที่มีพารามิเตอร์สำหรับการเชื่อมต่อกับ DBMS require_once ("database.php"); // ตรวจสอบฟังก์ชันชื่อผู้ใช้ checkLogin ($ str) (// เริ่มต้นตัวแปรด้วยข้อความแสดงข้อผิดพลาดที่เป็นไปได้ $ error = ""; // หากไม่มีสตริงการเข้าสู่ระบบ ให้แสดงข้อความแสดงข้อผิดพลาดหาก (! $ Str) ($ error) = " คุณไม่ได้ป้อนชื่อผู้ใช้ "; return $ error;) / ** * ตรวจสอบชื่อผู้ใช้โดยใช้นิพจน์ทั่วไป * ล็อกอินต้องมีอย่างน้อย 4 ไม่เกิน 16 ตัวอักษร * ต้องมีอักขระละติน ตัวเลข * สามารถ เป็นอักขระ "_", "-", "." * / $ pattern = "/^ [-_.az\d ](4,16)$/i"; $ result = preg_match (รูปแบบ $, $ str) ; // หากการตรวจสอบล้มเหลว ให้แสดงข้อความแสดงข้อผิดพลาดหาก (! $ Result) ($ error = "อักขระไม่ถูกต้องในชื่อผู้ใช้หรือชื่อผู้ใช้สั้นเกินไป (ยาว)"; return $ error;) // หากทุกอย่างเรียบร้อย , return true return true;) // ตรวจสอบฟังก์ชันรหัสผ่านของผู้ใช้ checkPassword ($ str) (// เริ่มต้นตัวแปรด้วยข้อความแสดงข้อผิดพลาดที่เป็นไปได้ $ error = ""; // หากไม่มี สตริงที่มีการเข้าสู่ระบบปรากฏขึ้น ให้ส่งคืนข้อความแสดงข้อผิดพลาดหาก (! $ str) ($ error = "คุณไม่ได้ป้อนรหัสผ่าน"; ส่งคืนข้อผิดพลาด $; ) / ** * ตรวจสอบรหัสผ่านของผู้ใช้โดยใช้นิพจน์ทั่วไป * รหัสผ่านต้องไม่สั้นกว่า 6 ไม่เกิน 16 อักขระ * ต้องมีอักขระละติน ตัวเลข * สามารถมีอักขระ "_", "!", " ( ",") "* / $ pattern =" /^ [_!)(.az\d *(6,16)$/i "; $ result = preg_match ($ pattern, $ str); // หากทำเครื่องหมาย ล้มเหลว ส่งคืนข้อความแสดงข้อผิดพลาดหาก (! $ result) ($ error = "อักขระไม่ถูกต้องในรหัสผ่านผู้ใช้หรือรหัสผ่านสั้นเกินไป (ยาว)"; return $ error;) // หากทุกอย่างเรียบร้อย คืนค่า true return true ; )

ตอนนี้เราต้องแก้ไขไฟล์ register.php เพื่อใช้ฟังก์ชันที่เราประกาศไว้ เราจะเพิ่มเงื่อนไขให้กับสคริปต์เพื่อตรวจสอบว่าได้คลิกปุ่มลงทะเบียนแล้ว ภายในเงื่อนไขนี้ การตรวจสอบการเข้าสู่ระบบและรหัสผ่านจะเริ่มต้นขึ้น หากการตรวจสอบใดล้มเหลว เราจะส่งแบบฟอร์มอีกครั้งและแสดงข้อความแสดงข้อผิดพลาด หากไม่มีข้อผิดพลาด เราลงทะเบียนผู้ใช้ เราไม่แสดงแบบฟอร์มการลงทะเบียนอีกต่อไป แจ้งให้ผู้ใช้ทราบเกี่ยวกับการลงทะเบียนที่สำเร็จ และใช้ฟังก์ชันส่วนหัว () เปลี่ยนเส้นทางไปยังแบบฟอร์มการให้สิทธิ์

คุณได้ลงทะเบียนในระบบเรียบร้อยแล้ว ตอนนี้คุณจะถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบ หากสิ่งนี้ไม่เกิดขึ้น ให้ไปที่ลิงก์โดยตรง

"; ส่วนหัว (" รีเฟรช: 5; URL = login.php ");) // มิฉะนั้น แจ้งให้ผู้ใช้ทราบเกี่ยวกับข้อผิดพลาดอื่น ($ ข้อผิดพลาด [" full_error "] = $ reg;)))?> การลงทะเบียนผู้ใช้
" />
ชื่อผู้ใช้สามารถมีได้เฉพาะอักขระละติน ตัวเลข สัญลักษณ์ "_", "-", "." ชื่อผู้ใช้ต้องมีความยาวอย่างน้อย 4 ตัวอักษรและไม่เกิน 16 ตัวอักษร
ในรหัสผ่าน คุณสามารถใช้ได้เฉพาะอักขระละติน ตัวเลข สัญลักษณ์ "_", "!", "(", ")" รหัสผ่านต้องมีอย่างน้อย 6 ตัวอักษรและไม่เกิน 16 ตัวอักษร
ทำซ้ำรหัสผ่านที่ป้อนก่อนหน้านี้

คุณควรสังเกตเห็นฟังก์ชันใหม่อื่นในสคริปต์ - การลงทะเบียน () และเรายังไม่ได้ประกาศ มาทำกัน

// เริ่มต้นตัวแปรด้วยข้อความแสดงข้อผิดพลาดที่เป็นไปได้ $ error = ""; // หากไม่มีสตริงการเข้าสู่ระบบ ให้แสดงข้อความแสดงข้อผิดพลาดหาก (! $ เข้าสู่ระบบ) ($ error = "ไม่ได้ระบุการเข้าสู่ระบบ"; return $ error;) elseif (! $ password) ($ error = "ไม่ได้ระบุรหัสผ่าน"; return $ error;) // ตรวจสอบว่าผู้ใช้ลงทะเบียนแล้ว // เชื่อมต่อกับ DBMS connect (); // เขียนสตริงการสืบค้น $ sql = "SELECT` id` จาก `users' WHERE` login` = "" $ เข้าสู่ระบบ "" "; // สร้างแบบสอบถามไปยังฐานข้อมูล $ query = mysql_query ($ sql) หรือตาย ( ""); // ดูจำนวนผู้ใช้ที่มีการเข้าสู่ระบบนี้ หากมีอย่างน้อยหนึ่งราย // ส่งคืนข้อความแสดงข้อผิดพลาด if (mysql_num_rows ($ query)> 0) ($ error = "ผู้ใช้ที่มีการเข้าสู่ระบบที่ระบุได้รับการลงทะเบียนแล้ว"; return $ error;) // หากไม่มีผู้ใช้ดังกล่าว ให้ลงทะเบียน // เขียนสตริงการสืบค้น $ sql = "INSERT INTO` users' (`id',` เข้าสู่ระบบ `, `รหัสผ่าน`) ค่า (NULL," ". $ เข้าสู่ระบบ" "," ". $ รหัสผ่าน "") "; // สร้างแบบสอบถามไปยังฐานข้อมูล $ query = mysql_query ($ sql) หรือตาย ("

ไม่สามารถเพิ่มผู้ใช้: ". Mysql_error ()". เกิดข้อผิดพลาดที่บรรทัด ". __LINE__."

"); // อย่าลืมยกเลิกการเชื่อมต่อจาก DBMS mysql_close (); // คืนค่า true แสดงว่าการลงทะเบียนผู้ใช้สำเร็จจะคืนค่า true;)

หากทุกอย่างเรียบร้อย ผู้ใช้ของคุณจะถูกลงทะเบียน คุณสามารถทดสอบแบบฟอร์ม พยายามลงทะเบียนผู้ใช้ด้วยการเข้าสู่ระบบเดียวกัน หลังจากลงทะเบียนสำเร็จแล้ว ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังแบบฟอร์มการให้สิทธิ์ ก่อนหน้านี้ เราเพิ่งสร้างมาร์กอัปเพื่อแสดงแบบฟอร์มนี้ เนื่องจากไม่มีการระบุพารามิเตอร์ในแอ็ตทริบิวต์ action ข้อมูลที่ส่งโดยแบบฟอร์มจะถูกประมวลผลในสคริปต์เดียวกัน ดังนั้นเราต้องเขียนโค้ดสำหรับการประมวลผลและเพิ่มลงในเอกสาร login.php

การให้สิทธิ์ผู้ใช้

;">

หากคุณไม่ได้ลงทะเบียนในระบบ ให้ลงทะเบียน

คุณอาจสังเกตเห็นว่าในสคริปต์การให้สิทธิ์ เรามีฟังก์ชันอื่นที่ไม่คุ้นเคย - การอนุญาต () ฟังก์ชันนี้ควรอนุญาตผู้ใช้โดยตรวจสอบก่อนว่ามีผู้ใช้ที่ลงทะเบียนในฐานข้อมูลด้วยชื่อผู้ใช้และรหัสผ่านเดียวกันหรือไม่ หากไม่พบผู้ใช้ดังกล่าว การอนุญาตจะถูกขัดจังหวะและข้อความแสดงความล้มเหลวจะปรากฏขึ้นบนหน้าจอ หากการตรวจสอบสำเร็จ ฟังก์ชันการให้สิทธิ์ () จะเริ่มเซสชันและเขียนค่าชื่อผู้ใช้และรหัสผ่าน แจ้งสคริปต์เกี่ยวกับความสำเร็จในการอนุญาต และสคริปต์จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าทรัพยากรที่ได้รับการป้องกัน

/ ** * ฟังก์ชั่นการอนุญาตผู้ใช้ * การอนุญาตผู้ใช้กับเราจะดำเนินการ * โดยใช้เซสชัน PHP * / การอนุญาตฟังก์ชัน ($ เข้าสู่ระบบ, $ รหัสผ่าน) (// เริ่มต้นตัวแปรด้วยข้อความแสดงข้อผิดพลาดที่เป็นไปได้ $ error = ""; // หากไม่มีบรรทัดการเข้าสู่ระบบ ให้แสดงข้อความแสดงข้อผิดพลาดหาก (! $ login) ($ error) = " ไม่ได้ระบุการเข้าสู่ระบบ "; ส่งคืนข้อผิดพลาด $;) elseif (! $ รหัสผ่าน) ($ error =" ไม่ได้ระบุรหัสผ่าน "; return $ error;) // ตรวจสอบว่าผู้ใช้ลงทะเบียนแล้ว // เชื่อมต่อกับการเชื่อมต่อ DBMS ( ); // เราจำเป็นต้องตรวจสอบว่ามีผู้ใช้ดังกล่าวในผู้ใช้ที่ลงทะเบียนหรือไม่ // การเขียนสตริงการสืบค้น $ sql = "SELECT` id` FROM `users' WHERE' login' = "" $ เข้าสู่ระบบ "" และ `password` =" ". $ Password . "" "; // ดำเนินการค้นหา $ query = mysql_query ($ sql) หรือตาย ("

ไม่สามารถดำเนินการค้นหา: ". Mysql_error ()". เกิดข้อผิดพลาดที่บรรทัด ". __LINE__."

"); // หากไม่มีผู้ใช้ที่มีข้อมูลดังกล่าว ให้ส่งคืนข้อความแสดงข้อผิดพลาด if (mysql_num_rows ($ query) == 0) ($ error =" ผู้ใช้ที่มีข้อมูลที่ระบุไม่ได้รับการลงทะเบียน "; return $ error;) // หากผู้ใช้มีอยู่ ให้เริ่มเซสชัน session_start (); // และเขียนชื่อผู้ใช้และรหัสผ่านลงไป // สำหรับสิ่งนี้เราใช้ superglobal array $ _SESSION $ _SESSION ["login"] = $ login; $ _SESSION [" รหัสผ่าน"] = $ รหัสผ่าน; / / อย่าลืมปิดการเชื่อมต่อฐานข้อมูล mysql_close (); // return true สำหรับข้อความเกี่ยวกับการให้สิทธิ์ผู้ใช้ที่สำเร็จ return true;)

เมื่อผู้ใช้เข้าสู่หน้าที่มีการป้องกัน คุณควรตรวจสอบความถูกต้องของข้อมูลการอนุญาตของเขา สำหรับสิ่งนี้ เราต้องการฟังก์ชันแบบกำหนดเองอีกหนึ่งฟังก์ชัน เรียกมันว่า checkAuth () หน้าที่ของมันคือการตรวจสอบข้อมูลการอนุญาตของผู้ใช้กับข้อมูลที่จัดเก็บไว้ในฐานข้อมูลของเรา หากข้อมูลไม่ตรงกัน ระบบจะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการให้สิทธิ์

ฟังก์ชั่น checkAuth ($ เข้าสู่ระบบ, $ รหัสผ่าน) (// หากไม่มีชื่อผู้ใช้หรือรหัสผ่าน ให้คืนค่าเท็จ หาก (! $ เข้าสู่ระบบ ||! $ รหัสผ่าน) คืนค่าเท็จ; // ตรวจสอบว่าผู้ใช้ดังกล่าวลงทะเบียนแล้ว // เชื่อมต่อกับ DBMS connect (); // สร้างสตริงการสืบค้น $ sql = "SELECT` id` จาก `users` WHERE` login` = "" $ เข้าสู่ระบบ "" และ `password` =" ". $ รหัสผ่าน" "" ; // ดำเนินการค้นหา $ query = mysql_query ($ sql) หรือตาย ("

ไม่สามารถดำเนินการค้นหา: ". Mysql_error ()". เกิดข้อผิดพลาดที่บรรทัด ". __LINE__."

"); // หากไม่มีผู้ใช้ที่มีข้อมูลดังกล่าว ให้คืนค่าเท็จ if (mysql_num_rows ($ query) == 0) (return false;) // อย่าลืมปิดการเชื่อมต่อฐานข้อมูล mysql_close (); // มิฉะนั้น , คืนค่าจริง คืนค่าจริง ;)

เมื่อผู้ใช้อยู่ในหน้าที่ปลอดภัยแล้ว เราจำเป็นต้องเรียกใช้ฟังก์ชันตรวจสอบข้อมูลการอนุญาต เราจะทำการโทรและตรวจสอบสคริปต์ในไฟล์ checkAuth.php แยกต่างหาก และเชื่อมต่อกับเพจที่จะปิดสำหรับการเข้าถึงแบบสาธารณะ

/ ** * สคริปต์สำหรับตรวจสอบการอนุญาตผู้ใช้ * / // เริ่มเซสชันซึ่งเราจะแยกข้อมูลการเข้าสู่ระบบและรหัสผ่าน // ของผู้ใช้ที่เข้าสู่ระบบ session_start (); // รวมไฟล์ที่มีฟังก์ชั่นที่กำหนดเอง require_once ("functions.php"); / ** * เพื่อตรวจสอบว่าผู้ใช้เข้าสู่ระบบหรือไม่ เราต้อง * ตรวจสอบว่ามีบันทึกในฐานข้อมูลสำหรับการเข้าสู่ระบบ * และรหัสผ่านของเขาหรือไม่ ในการดำเนินการนี้ เราจะใช้ฟังก์ชันที่กำหนดเอง * เพื่อตรวจสอบความถูกต้องของข้อมูลผู้ใช้ที่เข้าสู่ระบบ * หากฟังก์ชันนี้คืนค่าเป็นเท็จ แสดงว่าไม่มีการอนุญาต * ในกรณีที่ไม่มีการอนุญาต เราเพียงแค่เปลี่ยนเส้นทาง * ผู้ใช้ไปยังหน้าการให้สิทธิ์ * / // หากเซสชันมีทั้งข้อมูลการเข้าสู่ระบบและรหัสผ่าน // ตรวจสอบว่า (isset ($ _ SESSION ["login"]) && $ _SESSION ["login"] && isset ($ _ SESSION ["password" ] ) && $ _SESSION ["password"]) (// หากการตรวจสอบความถูกต้องของข้อมูลที่มีอยู่ล้มเหลวหาก (! CheckAuth ($ _ SESSION ["login"], $ _SESSION ["password"])) (// เปลี่ยนเส้นทางผู้ใช้ไปที่ ส่วนหัวของหน้าการให้สิทธิ์ ("ตำแหน่ง: login.php"); // หยุดการเรียกใช้สคริปต์ออก;)) // หากไม่มีข้อมูลเกี่ยวกับการเข้าสู่ระบบหรือรหัสผ่านของผู้ใช้ // เราคิดว่าไม่มีการอนุญาต ให้เปลี่ยนเส้นทาง ผู้ใช้ // ไปยังหน้าการให้สิทธิ์อื่น ( ส่วนหัว ("ตำแหน่ง: login.php"); // ยกเลิกการออกจากสคริปต์;)

ตอนนี้ มาสร้างรหัสสำหรับหน้าที่ปลอดภัยของเรากัน มันจะค่อนข้างง่าย

การอนุญาตผู้ใช้และการลงทะเบียน

อนุมัติสำเร็จ.

คุณได้เข้าถึงหน้าที่ปลอดภัย ท่านสามารถออกจากระบบ

อย่างที่คุณเห็น ในเอกสารที่ได้รับการป้องกัน เรารวมไฟล์เพียงไฟล์เดียว - checkAuth.php ไฟล์อื่นๆ ทั้งหมดรวมอยู่ในสคริปต์อื่น ดังนั้นโค้ดของเราจึงดูไม่ยุ่งยาก เราจัดระเบียบการลงทะเบียนและการอนุญาตของผู้ใช้ ตอนนี้คุณต้องอนุญาตให้ผู้ใช้ออกจากระบบ ในการดำเนินการนี้ เราจะสร้างสคริปต์ในไฟล์ logout.php

/ ** * สคริปต์ออกจากระบบของผู้ใช้ เนื่องจากผู้ใช้ * ได้รับอนุญาตผ่านเซสชัน การเข้าสู่ระบบและรหัสผ่านของพวกเขาจึงถูกจัดเก็บ * ในอาร์เรย์ supergloban $ _SESSION หากต้องการออกจากระบบ ให้ทำลายค่า * ของอาร์เรย์ $ _SESSION ["login"] และ $ _SESSION ["password"] หลังจาก * ซึ่งเราเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการให้สิทธิ์ * / // ตรวจสอบให้แน่ใจ เพื่อเริ่มเซสชัน session_start (); ยกเลิกการตั้งค่า ($ _ SESSION ["เข้าสู่ระบบ"]); ยกเลิกการตั้งค่า ($ _ SESSION ["รหัสผ่าน"]); ส่วนหัว ("ตำแหน่ง: login.php");

สคริปต์สำหรับการลงทะเบียน การอนุญาต และการตรวจสอบผู้ใช้พร้อมแล้ว คุณสามารถใช้ที่บ้าน เสริม เปลี่ยนให้เหมาะกับความต้องการของคุณ หากคุณมีคำถามใด ๆ คุณสามารถถามพวกเขาในความคิดเห็น คุณสามารถดาวน์โหลดไฟล์ทั้งหมดที่กล่าวถึงที่นี่ รวมอยู่ในไฟล์เก็บถาวรเดียว

ป.ล. ฉันรู้ว่าควรเขียนโค้ดเชิงวัตถุดีกว่า ฉันรู้ว่าไม่ควรส่งและจัดเก็บรหัสผ่านเป็นข้อความที่ชัดเจน ซึ่งข้อมูลที่ป้อนลงในฐานข้อมูลต้องได้รับการตรวจสอบล่วงหน้า ฉันรู้. ฉันจะไม่พูดถึงเรื่องนี้ที่นี่

สวัสดี! ตอนนี้เราจะพยายามใช้การลงทะเบียนที่ง่ายที่สุดบนไซต์โดยใช้ PHP + MySQL ในการดำเนินการนี้ ต้องติดตั้ง Apache บนคอมพิวเตอร์ของคุณ หลักการของสคริปต์ของเราแสดงไว้ด้านล่าง

1. เริ่มต้นด้วยการสร้างจานผู้ใช้ในฐานข้อมูล... จะมีข้อมูลผู้ใช้ (เข้าสู่ระบบและรหัสผ่าน) ไปที่ phpmyadmin (ถ้าคุณสร้างฐานบนพีซีของคุณ http: // localhost / phpmyadmin /). สร้างตาราง ผู้ใช้, ก็จะมี 3 ช่อง

ฉันสร้างมันในฐานข้อมูล mysql คุณสามารถสร้างมันในฐานข้อมูลอื่น ถัดไป ตั้งค่าตามภาพ:

2. จำเป็นต้องมีการเชื่อมต่อกับตารางนี้มาสร้างไฟล์กัน bd.php... เนื้อหา:

$ db = mysql_connect ("เซิร์ฟเวอร์ MySQL ของคุณ", "ลงชื่อเข้าใช้เซิร์ฟเวอร์นี้", "รหัสผ่านไปยังเซิร์ฟเวอร์นี้");
mysql_select_db ("ชื่อของฐานข้อมูลที่เรากำลังเชื่อมต่อ", $ db);
?>

ในกรณีของฉันดูเหมือนว่า:

$ db = mysql_connect ("localhost", "ผู้ใช้", "1234");
mysql_select_db ("mysql", $ db);
?>

เราประหยัด bd.php.
ดี! เรามีตารางในฐานข้อมูล การเชื่อมต่อกับมัน ตอนนี้คุณสามารถเริ่มสร้างหน้าที่ผู้ใช้จะทิ้งข้อมูลไว้

3. สร้างไฟล์ reg.php ที่มีเนื้อหา (ความคิดเห็นทั้งหมดอยู่ภายใน):



การลงทะเบียน


การลงทะเบียน
















4. สร้างไฟล์ซึ่งจะป้อนข้อมูลลงในฐานข้อมูลและบันทึกผู้ใช้ save_user.php(ความคิดเห็นภายใน):



{
}
// หากเข้าสู่ระบบและรหัสผ่าน เราจะประมวลผลเพื่อให้แท็กและสคริปต์ไม่ทำงาน คุณไม่มีทางรู้ว่าคนอื่นสามารถป้อนอะไรได้


// ลบช่องว่างพิเศษ
$ เข้าสู่ระบบ = ตัด ($ เข้าสู่ระบบ);
$ รหัสผ่าน = ตัด ($ รหัสผ่าน);
// เชื่อมต่อกับฐานข้อมูล
// ตรวจสอบการมีอยู่ของผู้ใช้ที่มีการเข้าสู่ระบบเดียวกัน
$ result = mysql_query ("เลือก id จากผู้ใช้ WHERE เข้าสู่ระบบ =" $ เข้าสู่ระบบ "", $ db);
ถ้า (! ว่างเปล่า ($ myrow ["id"])) (
exit ("ขออภัย ชื่อผู้ใช้ที่คุณป้อนถูกลงทะเบียนแล้ว กรุณาป้อนชื่อผู้ใช้อื่น");
}
//ถ้าไม่ใช่ก็บันทึกข้อมูล
$ result2 = mysql_query ("INSERT INTO ผู้ใช้ (เข้าสู่ระบบ, รหัสผ่าน) VALUES (" $ เข้าสู่ระบบ "," $ รหัสผ่าน ")");
// ตรวจสอบว่ามีข้อผิดพลาดหรือไม่
ถ้า ($ result2 == "TRUE")
{
echo "คุณได้ทำการลงทะเบียนเรียบร้อยแล้ว คุณสามารถเข้าสู่เว็บไซต์ได้ หน้าแรก";
}
อื่น (
echo "Error! คุณยังไม่ได้ลงทะเบียน";
}
?>

5. ตอนนี้ผู้ใช้ของเราสามารถลงทะเบียนได้แล้ว!ถัดไป คุณต้องสร้าง "ประตู" เพื่อเข้าสู่ไซต์สำหรับผู้ใช้ที่ลงทะเบียนแล้ว index.php(ความคิดเห็นภายใน):

// ขั้นตอนทั้งหมดทำงานในเซสชัน มันอยู่ที่ข้อมูลของผู้ใช้จะถูกเก็บไว้ในขณะที่เขาอยู่ในไซต์ มันสำคัญมากที่จะต้องเรียกใช้ที่จุดเริ่มต้นของหน้า !!!
session_start ();
?>


หน้าแรก


หน้าแรก











สมัครตอนนี้



// ตรวจสอบว่าตัวแปรล็อกอินและรหัสผู้ใช้ว่างเปล่าหรือไม่
ถ้า (ว่าง ($ _ SESSION ["login"]) หรือว่าง ($ _ SESSION ["id"]))
{
// ถ้าว่างเราจะไม่แสดงลิงค์
echo "คุณเข้าสู่ระบบในฐานะแขก
ลิงค์นี้ใช้ได้เฉพาะผู้ใช้ที่ลงทะเบียน ";
}
อื่น
{

ในไฟล์ index.phpเราจะแสดงลิงค์ที่จะเปิดให้เฉพาะผู้ใช้ที่ลงทะเบียน นี่คือจุดรวมของสคริปต์ - เพื่อจำกัดการเข้าถึงข้อมูลใดๆ

6. มีไฟล์ที่มีการตรวจสอบชื่อผู้ใช้และรหัสผ่านที่ป้อน testreg.php (ความคิดเห็นภายใน):

session_start (); // ขั้นตอนทั้งหมดทำงานบนเซสชัน มันอยู่ที่ข้อมูลของผู้ใช้จะถูกเก็บไว้ในขณะที่เขาอยู่ในไซต์ มันสำคัญมากที่จะต้องเรียกใช้ที่จุดเริ่มต้นของหน้า !!!
if (isset ($ _ POST ["login"])) ($ login = $ _POST ["login"]; if ($ login == "") (unset ($ login);)) // เข้าสู่ระบบที่ป้อน โดยผู้ใช้เข้าสู่ตัวแปร $ เข้าสู่ระบบหากว่างเปล่าเราจะทำลายตัวแปร
if (isset ($ _ POST ["password"])) ($ password = $ _ POST ["password"]; if ($ password == "") (unset ($ password);))
// ใส่รหัสผ่านที่ผู้ใช้ป้อนลงในตัวแปร $ รหัสผ่าน หากว่างเปล่าให้ทำลายตัวแปร
if (ว่างเปล่า ($ เข้าสู่ระบบ) หรือว่างเปล่า ($ รหัสผ่าน)) // หากผู้ใช้ไม่ได้เข้าสู่ระบบหรือรหัสผ่าน เราจะออกข้อผิดพลาดและหยุดสคริปต์
{
exit ("คุณไม่ได้ป้อนข้อมูลทั้งหมด ให้กลับไปกรอกข้อมูลในฟิลด์ทั้งหมด!");
}
// หากเข้าสู่ระบบและรหัสผ่าน เราจะประมวลผลเพื่อให้แท็กและสคริปต์ไม่ทำงาน คุณไม่มีทางรู้ว่าคนอื่นสามารถป้อนอะไรได้
$ เข้าสู่ระบบ = แถบสแลช ($ เข้าสู่ระบบ);
$ เข้าสู่ระบบ = htmlspecialchars ($ เข้าสู่ระบบ);
$ รหัสผ่าน = แถบสแลช ($ รหัสผ่าน);
$ รหัสผ่าน = htmlspecialchars ($ รหัสผ่าน);
// ลบช่องว่างพิเศษ
$ เข้าสู่ระบบ = ตัด ($ เข้าสู่ระบบ);
$ รหัสผ่าน = ตัด ($ รหัสผ่าน);
// เชื่อมต่อกับฐานข้อมูล
รวม ("bd.php"); // ไฟล์ bd.php ต้องอยู่ในโฟลเดอร์เดียวกับคนอื่น ๆ ถ้าไม่ใช่ ก็แค่เปลี่ยนเส้นทาง

$ ผล = mysql_query ("เลือก * จากผู้ใช้ที่เข้าสู่ระบบ =" $ เข้าสู่ระบบ "", $ db); // ดึงข้อมูลจากฐานข้อมูลทั้งหมดเกี่ยวกับผู้ใช้ด้วยการเข้าสู่ระบบที่ป้อน
$ myrow = mysql_fetch_array ($ ผล);
ถ้า (ว่างเปล่า ($ myrow ["รหัสผ่าน"]))
{
// ถ้าไม่มีผู้ใช้ที่ล็อกอินเข้าอยู่
}
อื่น (
// ถ้ามีให้ตรวจสอบรหัสผ่าน
ถ้า ($ myrow ["รหัสผ่าน"] == $ รหัสผ่าน) (
// หากรหัสผ่านตรงกัน เราจะเริ่มเซสชันสำหรับผู้ใช้! คุณสามารถแสดงความยินดีกับเขา เขาเข้ามา!
$ _SESSION ["เข้าสู่ระบบ"] = $ myrow ["เข้าสู่ระบบ"];
$ _SESSION ["id"] = $ myrow ["id"]; // ข้อมูลนี้ถูกใช้บ่อยมาก ดังนั้นผู้ใช้ที่เข้าสู่ระบบจะ "พกพาติดตัวไปด้วย"
echo "คุณเข้าสู่เว็บไซต์เรียบร้อยแล้ว! หน้าแรก";
}
อื่น (
// ถ้ารหัสผ่านไม่ตรงกัน

ออก ("ขออภัย การเข้าสู่ระบบที่คุณป้อนหรือรหัสผ่านไม่ถูกต้อง");
}
}
?>

นั่นคือทั้งหมด! บทเรียนอาจจะน่าเบื่อแต่มีประโยชน์มาก ที่นี่แสดงเฉพาะแนวคิดของการลงทะเบียนเท่านั้นจากนั้นคุณสามารถปรับปรุงได้: เพิ่มการป้องกัน, การออกแบบ, ฟิลด์ข้อมูล, อัพโหลดอวาตาร์, ออกจากระบบบัญชี (สำหรับสิ่งนี้เพียงทำลายตัวแปรจากเซสชันด้วยฟังก์ชั่น ยกเลิกการตั้งค่า) เป็นต้น ขอให้โชคดี!

ฉันตรวจสอบทุกอย่างแล้ว มันใช้งานได้ปกติ!

ขั้นตอนการสร้างระบบการลงทะเบียนค่อนข้างมาก คุณต้องเขียนรหัสเพื่อตรวจสอบความถูกต้องของที่อยู่อีเมลอีกครั้ง ส่งอีเมลยืนยัน เสนอความสามารถในการกู้คืนรหัสผ่าน จัดเก็บรหัสผ่านในที่ปลอดภัย ตรวจสอบแบบฟอร์มการป้อนข้อมูล และอื่นๆ อีกมากมาย แม้ว่าคุณจะทำทั้งหมดนี้ ผู้ใช้จะไม่เต็มใจที่จะลงทะเบียน เนื่องจากแม้แต่การลงทะเบียนเพียงเล็กน้อยก็ต้องการกิจกรรมของพวกเขา

ในบทช่วยสอนของวันนี้ เราจะพัฒนาระบบลงทะเบียนง่ายๆ ที่ไม่ต้องใช้รหัสผ่าน! เป็นผลให้เราจะได้รับระบบที่สามารถปรับเปลี่ยนหรือรวมเข้ากับไซต์ PHP ที่มีอยู่ได้อย่างง่ายดาย หากคุณสนใจอ่านต่อ

PHP

ตอนนี้เราพร้อมที่จะจัดการกับโค้ด PHP แล้ว ฟังก์ชันหลักของระบบการลงทะเบียนมีให้โดยคลาสผู้ใช้ ซึ่งคุณสามารถดูได้ด้านล่าง คลาสใช้ () ซึ่งเป็นไลบรารีแบบมินิมอลสำหรับการทำงานกับฐานข้อมูล คลาส User มีหน้าที่ในการเข้าถึงฐานข้อมูล สร้างโทเค็นการเข้าสู่ระบบ และตรวจสอบความถูกต้อง มันแสดงให้เราด้วยอินเทอร์เฟซที่เรียบง่ายที่สามารถรวมเข้ากับระบบการลงทะเบียนบนไซต์ที่ใช้ PHP ของคุณได้อย่างง่ายดาย

User.class.php

// อินสแตนซ์ ORM ส่วนตัว
ส่วนตัว $ orm;

/**
* ค้นหาผู้ใช้ด้วยสตริงโทเค็น เฉพาะโทเค็นที่ถูกต้องเท่านั้นที่จะถูกนำเข้าสู่
* การพิจารณา. โทเค็นมีอายุ 10 นาทีหลังจากถูกสร้างขึ้น
* @param string $ token โทเค็นเพื่อค้นหา
* @return ผู้ใช้
*/

ฟังก์ชันสแตติกสาธารณะ findByToken ($ token) (

// ค้นหาในฐานข้อมูลและตรวจสอบให้แน่ใจว่าการประทับเวลาถูกต้อง


-> ที่ไหน ("โทเค็น", $ โทเค็น)
-> where_raw ("token_validity> ตอนนี้ ()")
-> find_one ();

ถ้า (! $ ผลลัพธ์) (
คืนค่าเท็จ;
}

ส่งคืนผู้ใช้ใหม่ ($ ผล);
}

/**
* เข้าสู่ระบบหรือลงทะเบียนผู้ใช้
* @return ผู้ใช้
*/

ฟังก์ชันคงที่สาธารณะ loginOrRegister ($ อีเมล) (

// หากมีผู้ใช้ดังกล่าวอยู่แล้ว ให้ส่งคืน

ถ้า (ผู้ใช้ :: มีอยู่ ($ อีเมล)) (
ส่งคืนผู้ใช้ใหม่ ($ อีเมล);
}

// มิฉะนั้น สร้างและส่งคืน

ผู้ใช้ที่กลับมา :: สร้าง ($ อีเมล);
}

/**
* สร้างผู้ใช้ใหม่และบันทึกลงในฐานข้อมูล
* @param string $ email ที่อยู่อีเมลของผู้ใช้
* @return ผู้ใช้
*/

สร้างฟังก์ชันสแตติกส่วนตัว ($ email) (

// เขียนผู้ใช้ใหม่ไปยังฐานข้อมูลแล้วส่งคืน

$ ผล = ORM :: for_table ("reg_users") -> สร้าง ();
$ ผลลัพธ์ -> อีเมล = $ อีเมล;
$ result-> บันทึก ();

ส่งคืนผู้ใช้ใหม่ ($ ผล);
}

/**
* ตรวจสอบว่ามีผู้ใช้ดังกล่าวอยู่ในฐานข้อมูลและส่งคืนบูลีน
* @param string $ email ที่อยู่อีเมลของผู้ใช้
* @return บูลีน
*/

มีฟังก์ชันสแตติกสาธารณะ ($ อีเมล) (

// มีผู้ใช้อยู่ในฐานข้อมูลหรือไม่?
$ ผล = ORM :: for_table ("reg_users")
-> โดยที่ ("อีเมล", $ อีเมล)
-> นับ ();

ส่งคืนผลลัพธ์ $ == 1;
}

/**
* สร้างวัตถุผู้ใช้ใหม่
* @param $ param อินสแตนซ์ ORM, id, email หรือ null
* @return ผู้ใช้
*/

ฟังก์ชั่นสาธารณะ __construct ($ param = null) (

ถ้า ($ param อินสแตนซ์ของ ORM) (

// อินสแตนซ์ ORM ถูกส่งผ่าน
$ this-> orm = $ param;
}
อื่นถ้า (is_string ($ param)) (

// ส่งอีเมลแล้ว
$ this->
-> โดยที่ ("อีเมล", $ param)
-> find_one ();
}
อื่น (

ถ้า (is_numeric ($ param)) (
// รหัสผู้ใช้ถูกส่งเป็นพารามิเตอร์
$ id = $ พารามิเตอร์;
}
อื่นถ้า (isset ($ _ SESSION ["loginid"])) (

// ไม่มีการส่ง ID ผู้ใช้ ดูในเซสชัน
$ id = $ _SESSION ["loginid"];
}

$ this-> orm = ORM :: for_table ("reg_users")
-> โดยที่ ("id", $ id)
-> find_one ();
}

/**
* สร้างโทเค็นการเข้าสู่ระบบ SHA1 ใหม่ เขียนลงในฐานข้อมูลและส่งคืน
* @return สตริง
*/

ฟังก์ชันสาธารณะ generateToken () (
// สร้างโทเค็นสำหรับผู้ใช้ที่เข้าสู่ระบบ บันทึกลงในฐานข้อมูล

$ token = sha1 ($ this-> email.time (). rand (0, 1000000));

// บันทึกโทเค็นลงในฐานข้อมูล
// และทำเครื่องหมายว่าใช้ได้ในอีก 10 นาทีข้างหน้าเท่านั้น

$ this-> orm-> set ("โทเค็น", $ โทเค็น);
$ this-> orm-> set_expr ("token_validity", "ADDTIME (NOW ()," 0:10 ")");
$ this-> orm-> บันทึก ();

ส่งคืนโทเค็น $;
}

/**
* เข้าสู่ระบบผู้ใช้รายนี้
* @return เป็นโมฆะ
*/

เข้าสู่ระบบฟังก์ชั่นสาธารณะ () (

// ทำเครื่องหมายผู้ใช้ว่าเข้าสู่ระบบ
$ _SESSION ["loginid"] = $ this-> orm-> id;

// อัปเดตฟิลด์ Last_login db
$ this-> orm-> set_expr ("last_login", "NOW ()");
$ this-> orm-> บันทึก ();
}

/**
* ทำลายเซสชันและออกจากระบบผู้ใช้
* @return เป็นโมฆะ
*/

ออกจากระบบฟังก์ชั่นสาธารณะ () (
$ _SESSION = อาร์เรย์ ();
ยกเลิกการตั้งค่า ($ _ SESSION);
}

/**
* ตรวจสอบว่าผู้ใช้เข้าสู่ระบบอยู่หรือไม่
* @return บูลีน
*/

เข้าสู่ระบบฟังก์ชั่นสาธารณะ () (
ส่งคืน isset ($ this-> orm-> id) && $ _SESSION ["loginid"] == $ this-> orm-> id;
}

/**
* ตรวจสอบว่าผู้ใช้เป็นผู้ดูแลระบบหรือไม่
* @return บูลีน
*/

ฟังก์ชันสาธารณะ isAdmin () (
คืนค่า $ this-> ยศ () == "ผู้ดูแลระบบ";
}

/**
* ค้นหาประเภทผู้ใช้ จะเป็นผู้ดูแลระบบหรือปกติก็ได้
* @return สตริง
*/

ตำแหน่งงานสาธารณะ () (
ถ้า ($ this-> orm-> อันดับ == 1) (
ส่งคืน "ผู้ดูแลระบบ";
}

กลับ "ปกติ";
}

/**
* วิธีวิเศษสำหรับการเข้าถึงองค์ประกอบของส่วนตัว
* $ orm อินสแตนซ์เป็นคุณสมบัติของวัตถุผู้ใช้
* คีย์ @param string $ คุณสมบัติที่เข้าถึงได้ "sname
* @return ผสม
*/

ฟังก์ชั่นสาธารณะ __get ($ คีย์) (
if (คีย์ isset ($ this-> orm -> $)) (
คืนค่า $ this-> orm -> $ คีย์;
}

กลับเป็นโมฆะ;
}
}
โทเค็นถูกสร้างขึ้นโดยใช้อัลกอริทึมและเก็บไว้ในฐานข้อมูล เราใช้ MySQL เพื่อตั้งค่าคอลัมน์ token_validity เป็น 10 นาที เมื่อตรวจสอบความถูกต้องของโทเค็น เราแจ้งเอ็นจิ้นว่าเราต้องการโทเค็น ฟิลด์ token_validity ยังไม่หมดอายุ ดังนั้นเราจึงจำกัดเวลาที่โทเค็นจะใช้งานได้

โปรดทราบว่าเรากำลังใช้เมธอด magic __get () ที่ส่วนท้ายของเอกสารเพื่อเข้าถึงคุณสมบัติของอ็อบเจ็กต์ผู้ใช้ ซึ่งช่วยให้เราเข้าถึงข้อมูลที่จัดเก็บไว้ในฐานข้อมูลในรูปแบบของคุณสมบัติ: $ user-> email, $ user-> token ตัวอย่างเช่น มาดูกันว่าเราจะใช้คลาสนี้ในข้อมูลโค้ดต่อไปนี้ได้อย่างไร:


ไฟล์อื่นที่เก็บฟังก์ชันที่จำเป็นคือ functions.php เรามีฟังก์ชันตัวช่วยบางอย่างที่ช่วยให้เราสามารถเก็บโค้ดที่เหลือให้เป็นระเบียบได้

Functions.php

ฟังก์ชัน send_email ($ from, $ to, $ subject, $ message) (

// ฟังก์ชั่น Helper สำหรับส่งอีเมล

$ headers = "เวอร์ชัน MIME: 1.0" "\ r \ n";
$ headers. = "ประเภทเนื้อหา: ข้อความ / ธรรมดา; charset = utf-8" "\ r \ n";
$ headers. = "จาก:" $ จาก "\ r \ n";

ส่งคืนอีเมล ($ ถึง, $ subject, $ message, $ headers);
}

ฟังก์ชัน get_page_url () (

// ค้นหา URL ของไฟล์ PHP

$ url = "http". (ว่าง ($ _ SERVER ["HTTPS"])? "": "s") ": //" $ _ SERVER ["SERVER_NAME"];

ถ้า (isset ($ _ SERVER ["REQUEST_URI"]) && $ _SERVER ["REQUEST_URI"]! = "") (
$ url. = $ _SERVER ["REQUEST_URI"];
}
อื่น (
$ url. = $ _SERVER ["PATH_INFO"];
}

ส่งคืน $ url;
}

ฟังก์ชั่น rate_limit ($ ip, $ limit_hour = 20, $ limit_10_min = 10) (

// จำนวนครั้งที่พยายามเข้าสู่ระบบในชั่วโมงที่ผ่านมาตามที่อยู่ IP นี้

$ count_hour = ORM :: for_table ("reg_login_attempt")
->
-> where_raw ("ts> SUBTIME (NOW ()," 1:00 ")")
-> นับ ();

// จำนวนครั้งที่พยายามเข้าสู่ระบบในช่วง 10 นาทีที่ผ่านมาโดยที่อยู่ IP นี้

$ count_10_min = ORM :: for_table ("reg_login_attempt")
-> โดยที่ ("ip", sprintf ("% u", ip2long ($ ip)))
-> where_raw ("ts> SUBTIME (NOW ()," 0:10 ")")
-> นับ ();

ถ้า ($ count_hour> $ limit_hour || $ count_10_min> $ limit_10_min) (
โยนข้อยกเว้นใหม่ ("พยายามเข้าสู่ระบบมากเกินไป!");
}
}

ฟังก์ชั่น rate_limit_tick ($ ip, $ email) (

// สร้างบันทึกใหม่ในตารางพยายามเข้าสู่ระบบ

$ login_attempt = ORM :: for_table ("reg_login_attempt") -> สร้าง ();

$ login_attempt-> อีเมล = $ อีเมล;
$ login_attempt-> ip = sprintf ("% u", ip2long ($ ip));

$ login_attempt-> บันทึก ();
}

ฟังก์ชั่นเปลี่ยนเส้นทาง ($ url) (
ส่วนหัว ("ตำแหน่ง: $ url");
ทางออก;
}
ฟังก์ชัน rate_limit และ rate_limit_tick ช่วยให้เราจำกัดจำนวนครั้งในการพยายามให้สิทธิ์ในช่วงเวลาหนึ่งได้ ความพยายามในการให้สิทธิ์จะถูกบันทึกไว้ในฐานข้อมูล reg_login_attempt ฟังก์ชันเหล่านี้จะทริกเกอร์เมื่อมีการส่งแบบฟอร์มการให้สิทธิ์ ดังที่คุณเห็นในข้อมูลโค้ดต่อไปนี้

รหัสด้านล่างนำมาจาก index.php และมีหน้าที่ส่งแบบฟอร์มเข้าสู่ระบบ ส่งคืนการตอบสนอง JSON ซึ่งขับเคลื่อนโดยรหัส jQuery ที่เราเห็นในทรัพย์สิน / js / script.js

index.php

ถ้า (! ว่างเปล่า ($ _ POST) && isset ($ _ SERVER ["HTTP_X_REQUESTED_WITH"])) (

// ส่งออกส่วนหัว JSON

ส่วนหัว ("ประเภทเนื้อหา: แอปพลิเคชัน / json");

// ที่อยู่อีเมลถูกต้องหรือไม่?

ถ้า (! Isset ($ _ POST ["email"]) ||! Filter_var ($ _ POST ["email"], FILTER_VALIDATE_EMAIL)) (
โยนข้อยกเว้นใหม่ ("โปรดป้อนอีเมลที่ถูกต้อง");
}

// สิ่งนี้จะทำให้เกิดข้อยกเว้นหากบุคคลนั้นอยู่เหนือ
// ขีดจำกัดการพยายามเข้าสู่ระบบที่อนุญาต (ดู functions.php สำหรับข้อมูลเพิ่มเติม):
rate_limit ($ _ เซิร์ฟเวอร์ ["REMOTE_ADDR"]);

// บันทึกความพยายามในการเข้าสู่ระบบนี้
rate_limit_tick ($ _ SERVER ["REMOTE_ADDR"], $ _POST ["อีเมล"]);

// ส่งข้อความถึงผู้ใช้

$ ข้อความ = "";
$ อีเมล = $ _POST ["อีเมล"];
$ subject = "ลิงค์เข้าสู่ระบบของคุณ";

ถ้า (! User :: มีอยู่ ($ email)) (
$ subject = "ขอบคุณสำหรับการลงทะเบียน!";
$ message = "ขอบคุณสำหรับการลงทะเบียนที่เว็บไซต์ของเรา! \ n \ n";
}

// พยายามเข้าสู่ระบบหรือลงทะเบียนบุคคล
$ ผู้ใช้ = ผู้ใช้ :: loginOrRegister ($ _ POST ["อีเมล"]);

$ message. = "คุณสามารถเข้าสู่ระบบได้จาก URL นี้: \ n";
ข้อความ $ = get_page_url (). "? tkn =". $ user-> generateToken (). "\ n \ n";

$ message. = "ลิงก์จะหมดอายุโดยอัตโนมัติหลังจากผ่านไป 10 นาที";

$ ผล = send_email ($ จากอีเมล, $ _POST ["อีเมล"], $ เรื่อง, $ ข้อความ);

ถ้า (! $ ผลลัพธ์) (
โยนข้อยกเว้นใหม่ ("มีข้อผิดพลาดในการส่งอีเมลของคุณ โปรดลองอีกครั้ง");
}

ตาย (json_encode (อาร์เรย์ (
"message" => "ขอบคุณ! เรา \" ได้ส่งลิงก์ไปยังกล่องจดหมายของคุณแล้ว ตรวจสอบโฟลเดอร์สแปมของคุณด้วย "
)));
}
}
จับ (ยกเว้น $ e) (

ตาย (json_encode (อาร์เรย์ (
"ผิดพลาด" => 1,
"ข้อความ" => $ e-> getMessage ()
)));
}
เมื่ออนุญาตหรือลงทะเบียนสำเร็จ รหัสด้านบนจะส่งอีเมลไปยังบุคคลที่มีลิงก์สำหรับการให้สิทธิ์ โทเค็น (โทเค็น) พร้อมใช้งานเป็นตัวแปร $ _GET "tkn" เนื่องจาก URL ที่สร้างขึ้น

index.php

ถ้า (isset ($ _ GET ["tkn"]))) (

// นี่เป็นโทเค็นการเข้าสู่ระบบที่ถูกต้องหรือไม่
$ ผู้ใช้ = ผู้ใช้ :: findByToken ($ _ GET ["tkn"]);

// ใช่! เข้าสู่ระบบผู้ใช้และเปลี่ยนเส้นทางไปยังหน้าที่ป้องกัน

$ ผู้ใช้ -> เข้าสู่ระบบ ();
เปลี่ยนเส้นทาง ("protected.php");
}

// โทเค็นไม่ถูกต้อง เปลี่ยนเส้นทางกลับไปที่แบบฟอร์มการเข้าสู่ระบบ
เปลี่ยนเส้นทาง ("index.php");
}
การรัน $ user-> login () จะสร้างตัวแปรเซสชันที่จำเป็น ทำให้ผู้ใช้ยังคงเข้าสู่ระบบในการเข้าสู่ระบบครั้งต่อไป

การออกจากระบบจะดำเนินการในลักษณะเดียวกันโดยประมาณ:

Index.php

ถ้า (isset ($ _ GET ["ออกจากระบบ"])) (

$ ผู้ใช้ = ผู้ใช้ใหม่ ();

ถ้า ($ ผู้ใช้ -> เข้าสู่ระบบ ()) (
$ ผู้ใช้ -> ออกจากระบบ ();
}

เปลี่ยนเส้นทาง ("index.php");
}
ที่ส่วนท้ายของโค้ด เราเปลี่ยนเส้นทางผู้ใช้ไปที่ index.php อีกครั้ง ดังนั้น พารามิเตอร์? Logout = 1 ใน URL จะถูกยกเว้น

ไฟล์ index.php ของเราจะต้องมีการป้องกันด้วย - เราไม่ต้องการให้ผู้ใช้ที่เข้าสู่ระบบอยู่แล้วเห็นแบบฟอร์ม สำหรับสิ่งนี้เราใช้ $ user-> login () วิธี:

Index.php

$ ผู้ใช้ = ผู้ใช้ใหม่ ();

ถ้า ($ ผู้ใช้ -> เข้าสู่ระบบ ()) (
เปลี่ยนเส้นทาง ("protected.php");
}
สุดท้าย มาดูวิธีที่คุณสามารถปกป้องหน้าในเว็บไซต์ของคุณและทำให้ใช้งานได้หลังจากการอนุญาตเท่านั้น:

ป้องกัน.php

// เพื่อป้องกันหน้า php บนไซต์ของคุณ ให้ใส่ main.php
// และสร้างวัตถุผู้ใช้ใหม่ มันง่ายมาก!

require_once "รวม / main.php";

$ ผู้ใช้ = ผู้ใช้ใหม่ ();

ถ้า (! $ ผู้ใช้ -> เข้าสู่ระบบ ()) (
เปลี่ยนเส้นทาง ("index.php");
}
หลังจากการตรวจสอบนี้ คุณจะมั่นใจได้ว่าผู้ใช้เข้าสู่ระบบสำเร็จแล้ว คุณจะสามารถเข้าถึงข้อมูลที่จัดเก็บไว้ในฐานข้อมูลเป็นคุณสมบัติของวัตถุผู้ใช้ $ ในการแสดงอีเมลของผู้ใช้และอันดับ ใช้รหัสต่อไปนี้:

Echo "อีเมลของคุณ:" $ User-> email;
echo "อันดับของคุณ:" $ user-> rank ();
ที่นี่ อันดับ () เป็นวิธีการ เนื่องจากคอลัมน์อันดับในฐานข้อมูลมักจะมีตัวเลข (0 สำหรับผู้ใช้ทั่วไปและ 1 สำหรับผู้ดูแลระบบ) และเราจำเป็นต้องแปลงทั้งหมดนี้เป็นชื่ออันดับ ซึ่งใช้วิธีนี้ ในการแปลงผู้ใช้ทั่วไปเป็นผู้ดูแลระบบ เพียงแค่แก้ไขบันทึกผู้ใช้ใน phpmyadmin (หรือโปรแกรมฐานข้อมูลอื่นๆ) ในฐานะผู้ดูแลระบบ ผู้ใช้จะไม่ได้รับคุณสมบัติพิเศษใดๆ ตัวคุณเองมีสิทธิ์เลือกสิทธิ์ที่จะให้สิทธิ์ผู้ดูแลระบบ

พร้อม!

ด้วยระบบการลงทะเบียนที่เรียบง่ายของเราพร้อมแล้ว! คุณสามารถใช้บนไซต์ PHP ที่มีอยู่ หรือคุณสามารถอัปเกรดให้เหมาะกับความต้องการของคุณเอง

ในบทช่วยสอนนี้ ฉันจะแนะนำคุณเกี่ยวกับขั้นตอนทั้งหมดในการสร้างระบบการลงทะเบียนผู้ใช้ ซึ่งผู้ใช้สามารถสร้างบัญชีโดยระบุชื่อผู้ใช้ อีเมลและรหัสผ่าน เข้าสู่ระบบและออกจากระบบโดยใช้ PHP และ MySQL ฉันจะแสดงให้คุณเห็นว่าคุณจะทำให้บางหน้าเข้าถึงได้เฉพาะผู้ใช้ที่เข้าสู่ระบบได้อย่างไร ผู้ใช้รายอื่นที่ไม่ได้เข้าสู่ระบบจะไม่สามารถเข้าถึงหน้าได้

หากคุณต้องการวิดีโอ คุณสามารถรับชมได้ในช่อง YouTube ของฉัน

สิ่งแรกที่เราต้องทำคือตั้งค่าฐานข้อมูลของเรา

สร้างฐานข้อมูลชื่อ การลงทะเบียน... ใน การลงทะเบียนฐานข้อมูล เพิ่มตารางชื่อ ผู้ใช้... ตารางผู้ใช้จะใช้สี่ฟิลด์ต่อไปนี้

  • ชื่อผู้ใช้ - varchar (100)
  • อีเมล - varchar (100)
  • รหัสผ่าน - varchar (100)

คุณสามารถสร้างสิ่งนี้ได้โดยใช้ไคลเอนต์ MySQL เช่น PHPMyAdmin

หรือคุณสามารถสร้างมันขึ้นมาบนพรอมต์ MySQL โดยใช้สคริปต์ SQL ต่อไปนี้:

สร้างตาราง `ผู้ใช้' (` id` int (11) ไม่ใช่ NULL AUTO_INCREMENT คีย์หลัก, `ชื่อผู้ใช้' varchar (100) ไม่ใช่ NULL, 'อีเมล' varchar (100) ไม่ใช่ค่าว่าง, `รหัสผ่าน' varchar (100) ไม่ใช่ค่าว่าง) ENGINE = InnoDB ค่าเริ่มต้น CHARSET = latin1;

และนั่นคือมันกับฐานข้อมูล

ตอนนี้สร้างโฟลเดอร์ชื่อ การลงทะเบียนในไดเร็กทอรีที่เซิร์ฟเวอร์ของเราสามารถเข้าถึงได้ เช่นสร้างโฟลเดอร์ภายใน htdocs (หากคุณใช้เซิร์ฟเวอร์ XAMPP) หรือภายใน www(หากคุณใช้เซิร์ฟเวอร์ wampp)

ภายในโฟลเดอร์ การลงทะเบียนสร้างไฟล์ต่อไปนี้:

เปิดไฟล์เหล่านี้ในโปรแกรมแก้ไขข้อความที่คุณเลือก ของฉันคือข้อความประเสริฐ 3

การลงทะเบียนผู้ใช้

เปิดไฟล์ register.php และวางโค้ดต่อไปนี้ลงไป:

regiser.php:

ลงทะเบียน

เป็นสมาชิกอยู่แล้ว? เข้าสู่ระบบ

ไม่มีอะไรซับซ้อนจนถึงตอนนี้ใช่ไหม

บางสิ่งที่ควรทราบที่นี่:

อย่างแรกคือรูปแบบของเรา "s การกระทำแอตทริบิวต์ถูกตั้งค่าเป็น register.php ซึ่งหมายความว่าเมื่อคลิกปุ่มส่งแบบฟอร์ม ข้อมูลทั้งหมดในแบบฟอร์มจะถูกส่งไปยังหน้าเดียวกัน (register.php) ส่วนของรหัสที่ได้รับข้อมูลแบบฟอร์มนี้เขียนอยู่ในไฟล์ server.php และนั่นคือสาเหตุที่เรารวมไว้ที่ด้านบนสุดของไฟล์ register.php

โปรดสังเกตด้วยว่าเรากำลังรวมไฟล์ error.php เพื่อแสดงข้อผิดพลาดของแบบฟอร์ม เราจะมาถึงในไม่ช้า

ดังที่คุณเห็นในส่วนหัว เรากำลังเชื่อมโยงไปยังไฟล์ style.css เปิดไฟล์ style.css และวาง CSS ต่อไปนี้ลงไป:

* (ขอบ: 0px; ช่องว่างภายใน: 0px;) เนื้อหา (ขนาดแบบอักษร: 120% พื้นหลัง: # F8F8FF;) .header (ความกว้าง: 30% ระยะขอบ: 50px อัตโนมัติ 0px สี: สีขาว พื้นหลัง: # 5F9EA0 ข้อความ -align: center; border: 1px solid # B0C4DE; border-bottom: none; border-radius: 10px 10px 0px 0px; padding: 20px;) form, .content (width: 30%; margin: 0px auto; padding: 20px ; border: 1px solid # B0C4DE; พื้นหลัง: สีขาว; border-radius: 0px 0px 10px 10px;) .input-group (margin: 10px 0px 10px 0px;) .input-group label (แสดง: บล็อก; text-align: ซ้าย ; margin: 3px;) .input-group input (ความสูง: 30px; ความกว้าง: 93%; padding: 5px 10px; font-size: 16px; border-radius: 5px; border: 1px solid grey;) .btn (padding: 10px ขนาดตัวอักษร: 15px สี: สีขาว พื้นหลัง: # 5F9EA0 เส้นขอบ: none รัศมีเส้นขอบ: 5px;) .error (ความกว้าง: 92% ระยะขอบ: 0px อัตโนมัติ การขยาย: 10px เส้นขอบ: 1px ของแข็ง # a94442; สี: # a94442; พื้นหลัง: # f2dede; border-radius: 5px; text-align: left;) .success (สี: # 3c7 63d; พื้นหลัง: # dff0d8; เส้นขอบ: 1px ของแข็ง # 3c763d; ระยะขอบล่าง: 20px; )

ตอนนี้รูปร่างดูสวยงาม

ตอนนี้ให้เขียนโค้ดที่จะได้รับข้อมูลที่ส่งจากแบบฟอร์มและจัดเก็บ (ลงทะเบียน) ข้อมูลในฐานข้อมูล ตามที่ได้สัญญาไว้ก่อนหน้านี้ เราทำสิ่งนี้ในไฟล์ server.php

เปิด server.php และวางรหัสนี้:

server.php

เซสชันใช้เพื่อติดตามผู้ใช้ที่เข้าสู่ระบบ ดังนั้นเราจึงรวม session_start () ไว้ที่ด้านบนของไฟล์

ความคิดเห็นในโค้ดนั้นอธิบายทุกอย่างได้ค่อนข้างดี แต่ฉันจะเน้นบางสิ่งที่นี่

คำสั่ง if กำหนดว่ามีการคลิกปุ่ม reg_user บนแบบฟอร์มการลงทะเบียนหรือไม่ โปรดจำไว้ว่า ในแบบฟอร์มของเรา ปุ่มส่ง มีการตั้งค่าแอตทริบิวต์ชื่อเป็น reg_user และนั่นคือสิ่งที่เรากำลังอ้างอิงในคำสั่ง if

ข้อมูลทั้งหมดได้รับจากแบบฟอร์มและตรวจสอบเพื่อให้แน่ใจว่าผู้ใช้กรอกแบบฟอร์มอย่างถูกต้อง รหัสผ่านจะถูกเปรียบเทียบเพื่อให้แน่ใจว่าตรงกัน

หากไม่พบข้อผิดพลาด แสดงว่าผู้ใช้ลงทะเบียนใน ผู้ใช้ตารางในฐานข้อมูลด้วยรหัสผ่านที่แฮช รหัสผ่านที่แฮชมีไว้เพื่อความปลอดภัย ช่วยให้มั่นใจได้ว่าแม้ว่าแฮ็กเกอร์จะสามารถเข้าถึงฐานข้อมูลของคุณได้ แต่พวกเขาจะไม่สามารถอ่านรหัสผ่านของคุณได้

แต่ข้อความแสดงข้อผิดพลาดไม่แสดงในขณะนี้ เนื่องจากไฟล์ error.php ของเรายังว่างอยู่ หากต้องการแสดงข้อผิดพลาด ให้วางรหัสนี้ในไฟล์ error.php

0) : ?>

เมื่อผู้ใช้ลงทะเบียนในฐานข้อมูล ผู้ใช้จะเข้าสู่ระบบทันทีและเปลี่ยนเส้นทางไปยังหน้า index.php

และนั่นคือสำหรับการลงทะเบียน มาดูการเข้าสู่ระบบของผู้ใช้กัน

เข้าสู่ระบบผู้ใช้

การเข้าสู่ระบบผู้ใช้ทำได้ง่ายยิ่งขึ้น เพียงเปิดหน้าเข้าสู่ระบบและใส่รหัสนี้เข้าไป:

ระบบการลงทะเบียน PHP และ MySQL

เข้าสู่ระบบ

ยังไม่ได้เป็นสมาชิก? ลงชื่อ

ทุกอย่างในหน้านี้ค่อนข้างคล้ายกับหน้า register.php

ตอนนี้รหัสที่เข้าสู่ระบบผู้ใช้จะถูกเขียนในไฟล์ server.php เดียวกัน ดังนั้นให้เปิดไฟล์ server.php และเพิ่มรหัสนี้ที่ท้ายไฟล์:

// ... // เข้าสู่ระบบ USER if (isset ($ _ POST ["login_user"])) ($ username = mysqli_real_escape_string ($ db, $ _POST ["username"]); $ password = mysqli_real_escape_string ($ db, $ _POST ["รหัสผ่าน"]); if (ว่างเปล่า ($ username)) (array_push ($ ข้อผิดพลาด "ชื่อผู้ใช้เป็นสิ่งจำเป็น");) ถ้า (ว่างเปล่า ($ รหัสผ่าน)) (array_push ($ ข้อผิดพลาด "ต้องใช้รหัสผ่าน") ; ) ถ้า (จำนวน (ข้อผิดพลาด ($)) == 0) ($ รหัสผ่าน = md5 ($ รหัสผ่าน); $ แบบสอบถาม = "เลือก * จากผู้ใช้ WHERE username =" $ username "AND password =" $ password ""; $ results = mysqli_query ($ db, $ query); if (mysqli_num_rows ($ results) == 1) ($ _SESSION ["username"] = $ username; $ _SESSION ["success"] = "คุณเข้าสู่ระบบแล้ว"; ส่วนหัว ( " ตำแหน่ง: index.php ");) else (array_push ($ ข้อผิดพลาด" ชื่อผู้ใช้ / รหัสผ่านไม่ถูกต้อง ");)))?>

อีกครั้ง ทั้งหมดนี้คือการตรวจสอบว่าผู้ใช้กรอกแบบฟอร์มถูกต้องหรือไม่ ตรวจสอบว่าข้อมูลประจำตัวของพวกเขาตรงกับบันทึกจากฐานข้อมูลและเข้าสู่ระบบหากเป็นเช่นนั้น หลังจากเข้าสู่ระบบ ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังไฟล์ index.php พร้อมข้อความแสดงความสำเร็จ

ทีนี้มาดูกันว่าเกิดอะไรขึ้นในไฟล์ index.php เปิดไฟล์แล้ววางโค้ดต่อไปนี้ลงไป:

บ้าน

หน้าแรก

ยินดีต้อนรับ

ออกจากระบบ

คำสั่งแรก if ตรวจสอบว่าผู้ใช้เข้าสู่ระบบแล้วหรือไม่ หากไม่ได้เข้าสู่ระบบ พวกเขาจะถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบ ดังนั้นหน้านี้จึงสามารถเข้าถึงได้เฉพาะผู้ใช้ที่เข้าสู่ระบบ หากคุณต้องการให้เฉพาะผู้ใช้ที่เข้าสู่ระบบสามารถเข้าถึงหน้าใด ๆ ได้ สิ่งที่คุณต้องทำคือวางคำสั่ง if ไว้ที่ด้านบนสุดของไฟล์

คำสั่งที่สอง if ตรวจสอบว่าผู้ใช้คลิกปุ่มออกจากระบบหรือไม่ ถ้าใช่ ระบบจะออกจากระบบและเปลี่ยนเส้นทางกลับไปยังหน้าเข้าสู่ระบบ

ต่อจากนี้ไป ปรับแต่งให้เหมาะกับความต้องการของคุณและสร้างเว็บไซต์ที่ยอดเยี่ยม หากคุณมีข้อกังวลหรือสิ่งใดที่จำเป็นต้องชี้แจง โปรดแสดงความคิดเห็นด้านล่างและความช่วยเหลือจะตามมา

คุณสามารถสนับสนุนได้เสมอโดยการแชร์บนโซเชียลมีเดียหรือแนะนำบล็อกของฉันให้กับเพื่อนและเพื่อนร่วมงานของคุณ

ในบทความนี้คุณจะได้เรียนรู้ วิธีการสร้างแบบฟอร์มการลงทะเบียนและการอนุญาตโดยใช้ HTML, JavaScript, PHP และ MySql แบบฟอร์มดังกล่าวใช้ในเกือบทุกไซต์โดยไม่คำนึงถึงประเภท สร้างขึ้นทั้งสำหรับฟอรัมและสำหรับร้านค้าออนไลน์และสำหรับเครือข่ายสังคมออนไลน์ (เช่น Facebook, Twiter, Odnoklassniki) และสำหรับเว็บไซต์ประเภทอื่นๆ อีกมากมาย

หากคุณมีไซต์บนคอมพิวเตอร์ของคุณ ฉันหวังว่าคุณจะมี ติดตั้งและเรียกใช้เซิร์ฟเวอร์ภายในเครื่อง... ไม่มีอะไรจะทำงานได้หากไม่มีมัน

การสร้างตารางในฐานข้อมูล

ในการดำเนินการลงทะเบียนผู้ใช้ ก่อนอื่น เราจำเป็นต้องมีฐานข้อมูล ถ้าคุณมีอยู่แล้ว ก็เยี่ยมไปเลย ไม่อย่างนั้น คุณต้องสร้างมันขึ้นมา ในบทความนี้ ฉันจะอธิบายรายละเอียดเกี่ยวกับวิธีการทำสิ่งนี้

ดังนั้นเราจึงมีฐานข้อมูล (ย่อมาจากฐานข้อมูล) ตอนนี้เราต้องสร้างตาราง ผู้ใช้ซึ่งเราจะเพิ่มผู้ใช้ที่ลงทะเบียนของเรา

ฉันยังอธิบายวิธีสร้างตารางในฐานข้อมูลในบทความด้วย ก่อนสร้างตาราง เราต้องกำหนดว่าจะมีฟิลด์ใดบ้าง ฟิลด์เหล่านี้จะสอดคล้องกับฟิลด์จากแบบฟอร์มการลงทะเบียน

ดังนั้นเราจึงคิดว่า จินตนาการว่าแบบฟอร์มของเราจะมีเขตข้อมูลใดและสร้างตาราง ผู้ใช้ด้วยฟิลด์เช่นนี้:

  • NS- ตัวระบุ สนาม NSทุกตารางจากฐานข้อมูลควรมี
  • ชื่อจริง- หากต้องการบันทึกชื่อ
  • นามสกุล- สำหรับบันทึกนามสกุล
  • อีเมล- เพื่อบันทึกที่อยู่ไปรษณีย์ เราจะใช้อีเมลในการเข้าสู่ระบบ ดังนั้นฟิลด์นี้จะต้องไม่ซ้ำกัน นั่นคือ ต้องมีดัชนี UNIQUE
  • email_status- ฟิลด์เพื่อระบุว่าเมลได้รับการยืนยันหรือไม่ หากอีเมลได้รับการยืนยัน เมลนั้นจะมีค่าเป็น 1 มิฉะนั้น จะเป็นค่า 0
  • รหัสผ่าน- เพื่อบันทึกรหัสผ่าน


หากคุณต้องการให้แบบฟอร์มลงทะเบียนของคุณมีช่องเพิ่มเติม คุณสามารถเพิ่มได้ที่นี่เช่นกัน

ทุกอย่าง โต๊ะของเรา ผู้ใช้พร้อม. ไปที่ขั้นตอนต่อไป

การเชื่อมต่อฐานข้อมูล

เราได้สร้างฐานข้อมูลแล้ว ตอนนี้เราต้องเชื่อมต่อ เราจะเชื่อมต่อโดยใช้ส่วนขยาย PHP MySQLi

ในโฟลเดอร์ของเว็บไซต์ของเรา ให้สร้างไฟล์ชื่อ dbconnect.phpและในนั้นเราเขียนสคริปต์ต่อไปนี้:

ข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล... คำอธิบายข้อผิดพลาด: ".mysqli_connect_error ()"

"; exit ();) // ตั้งค่าการเข้ารหัสการเชื่อมต่อ $ mysqli-> set_charset (" utf8 "); // เพื่อความสะดวก เรามาเพิ่มตัวแปรที่นี่ซึ่งจะมีชื่อไซต์ของเรา $ address_site =" http: // testsite.local " ;?>

ไฟล์นี้ dbconnect.phpจะต้องเชื่อมต่อกับตัวจัดการแบบฟอร์ม

ให้ความสนใจกับตัวแปร $ address_siteฉันระบุชื่อไซต์ทดสอบของฉันที่จะใช้งานในที่นี้ คุณตามลำดับ ระบุชื่อไซต์ของคุณ

โครงสร้างเว็บไซต์

ทีนี้มาดูโครงสร้าง HTML ของเว็บไซต์ของเรากัน

เราจะย้ายส่วนหัวและส่วนท้ายของไซต์เป็นไฟล์แยกกัน header.phpและ footer.php... เราจะรวมไว้ในทุกหน้า กล่าวคือบนหลัก (ไฟล์ index.php) ไปที่หน้าแบบฟอร์มลงทะเบียน (file form_register.php) และไปยังหน้าที่มีแบบฟอร์มการให้สิทธิ์ (file form_auth.php).

บล็อกด้วยลิงก์ของเรา การลงทะเบียนและ การอนุญาตเพิ่มในส่วนหัวของไซต์เพื่อให้ปรากฏบนทุกหน้า หนึ่งลิงค์จะเข้าสู่ หน้าแบบฟอร์มลงทะเบียน(ไฟล์ form_register.php) และอีกอันไปยังเพจด้วย แบบฟอร์มใบอนุญาต(ไฟล์ form_auth.php).

เนื้อหาของไฟล์ header.php:

ชื่อเว็บไซต์ของเรา

เป็นผลให้หน้าหลักมีลักษณะดังนี้:


แน่นอนว่าเว็บไซต์ของคุณอาจมีโครงสร้างที่แตกต่างไปจากเดิมอย่างสิ้นเชิง แต่ตอนนี้มันไม่สำคัญสำหรับเราแล้ว สิ่งสำคัญคือมีลิงก์ (ปุ่ม) สำหรับการลงทะเบียนและการอนุญาต

ตอนนี้เรามาดูแบบฟอร์มการลงทะเบียนกัน ตามที่ท่านเข้าใจแล้ว เรามีอยู่ในไฟล์ form_register.php.

ไปที่ฐานข้อมูล (ใน phpMyAdmin) เปิดโครงสร้างตาราง ผู้ใช้และดูว่าเราต้องการฟิลด์ใด ซึ่งหมายความว่าเราต้องการฟิลด์สำหรับป้อนชื่อและนามสกุล ฟิลด์สำหรับป้อนที่อยู่ไปรษณีย์ (อีเมล) และฟิลด์สำหรับป้อนรหัสผ่าน และเพื่อความปลอดภัย เราจะเพิ่มช่องสำหรับป้อน captcha

บนเซิร์ฟเวอร์อันเป็นผลมาจากการประมวลผลแบบฟอร์มการลงทะเบียน ข้อผิดพลาดต่าง ๆ อาจเกิดขึ้นเนื่องจากผู้ใช้จะไม่สามารถลงทะเบียนได้ ดังนั้น เพื่อให้ผู้ใช้เข้าใจว่าเหตุใดการลงทะเบียนจึงล้มเหลว จึงจำเป็นต้องแสดงข้อความเกี่ยวกับข้อผิดพลาดเหล่านี้

ก่อนแสดงแบบฟอร์ม ให้เพิ่มบล็อกเพื่อแสดงข้อความแสดงข้อผิดพลาดจากเซสชัน

และอีกอย่างถ้าผู้ใช้ได้รับอนุญาตแล้วและเพื่อประโยชน์เขาเข้าสู่หน้าลงทะเบียนโดยตรงโดยเขียนไปยังแถบที่อยู่ของเบราว์เซอร์ site_address / form_register.phpในกรณีนี้ แทนที่จะแสดงแบบฟอร์มลงทะเบียน เราจะแสดงชื่อเรื่องที่ระบุว่าเขาได้ลงทะเบียนแล้ว

โดยทั่วไปแล้ว รหัสไฟล์ form_register.phpเราได้รับเช่นนี้:

คุณได้ลงทะเบียนแล้ว

ในเบราว์เซอร์ หน้าที่มีแบบฟอร์มลงทะเบียนจะมีลักษณะดังนี้:


โดยใช้ แอตทริบิวต์ที่จำเป็นเราได้ทำการกรอกข้อมูลที่จำเป็นทั้งหมดแล้ว

ให้ความสนใจกับรหัสแบบฟอร์มการลงทะเบียนที่ แคปช่าจะปรากฏขึ้น:


เราระบุเส้นทางไปยังไฟล์ในค่าของแอตทริบิวต์ src สำหรับรูปภาพ captcha.phpที่สร้างแคปช่านี้

มาดูรหัสไฟล์กัน captcha.php:

โค้ดมีการแสดงความคิดเห็นไว้อย่างดี ดังนั้นฉันจะเน้นที่จุดเดียว

ภายในฟังก์ชั่น รูปภาพTtfText (), มีการระบุเส้นทางไปยังแบบอักษร verdana.ttf... ดังนั้นเพื่อให้ captcha ทำงานได้อย่างถูกต้อง เราต้องสร้างโฟลเดอร์ แบบอักษรแล้ววางไฟล์ฟอนต์ไว้ตรงนั้น verdana.ttf... คุณสามารถค้นหาและดาวน์โหลดจากอินเทอร์เน็ตหรือนำมาจากไฟล์เก็บถาวรพร้อมเนื้อหาในบทความนี้

เสร็จแล้วกับโครงสร้าง HTML ได้เวลาไปต่อ

ตรวจสอบความถูกต้องของอีเมลด้วย jQuery

แบบฟอร์มใดๆ จำเป็นต้องตรวจสอบความถูกต้องของข้อมูลที่ป้อน ทั้งในฝั่งไคลเอ็นต์ (โดยใช้ JavaScript, jQuery) และทางฝั่งเซิร์ฟเวอร์

เราต้องให้ความสนใจเป็นพิเศษกับฟิลด์อีเมล เป็นสิ่งสำคัญมากที่ที่อยู่ไปรษณีย์ที่ป้อนนั้นถูกต้อง

สำหรับช่องป้อนข้อมูลนี้ เราตั้งค่าประเภทอีเมล (ประเภท = "อีเมล") ซึ่งจะเตือนเราเล็กน้อยเกี่ยวกับรูปแบบที่ไม่ถูกต้อง แต่นี่ยังไม่พอเพราะคุณสามารถเปลี่ยนค่าของแอตทริบิวต์ได้โดยง่ายผ่านตัวตรวจสอบโค้ดที่เบราว์เซอร์ให้เรา พิมพ์กับ อีเมลบน ข้อความและนั่นคือทั้งหมด เช็คของเราจะใช้งานไม่ได้อีกต่อไป


และในกรณีนั้น เราจำเป็นต้องทำการตรวจสอบที่น่าเชื่อถือมากขึ้น สำหรับสิ่งนี้ เราจะใช้ไลบรารี jQuery จาก JavaScript

ในการเชื่อมต่อไลบรารี jQuery ในไฟล์ header.phpระหว่างแท็ก , ก่อนแท็กปิด , เพิ่มบรรทัดนี้:

ต่อจากบรรทัดนี้ ให้เพิ่มรหัสตรวจสอบยืนยันอีเมลทันที ที่นี่เราเพิ่มรหัสสำหรับตรวจสอบความยาวของรหัสผ่านที่ป้อน ความยาวต้องมีความยาวอย่างน้อย 6 ตัวอักษร

ด้วยความช่วยเหลือของสคริปต์นี้ เราจะตรวจสอบความถูกต้องของที่อยู่อีเมลที่ป้อน หากผู้ใช้ป้อนอีเมลไม่ถูกต้อง เราจะแสดงข้อผิดพลาดเกี่ยวกับเรื่องนี้และปิดใช้งานปุ่มสำหรับส่งแบบฟอร์ม หากทุกอย่างเรียบร้อยดี เราจะลบข้อผิดพลาดและเปิดใช้งานปุ่มสำหรับส่งแบบฟอร์ม

ดังนั้น เราตรวจสอบความถูกต้องของแบบฟอร์มในฝั่งไคลเอ็นต์เสร็จแล้ว ตอนนี้เราสามารถส่งไปยังเซิร์ฟเวอร์ซึ่งเราจะทำการตรวจสอบและเพิ่มข้อมูลลงในฐานข้อมูลด้วย

การลงทะเบียนผู้ใช้

เราส่งแบบฟอร์มสำหรับการประมวลผลไปยังไฟล์ register.phpด้วยวิธี POST ชื่อของไฟล์ตัวจัดการนี้ ซึ่งระบุในค่าแอตทริบิวต์ การกระทำ... และวิธีการส่งระบุไว้ในค่าแอตทริบิวต์ กระบวนการ.

เปิดไฟล์นี้ register.phpและสิ่งแรกที่เราต้องทำคือเขียนฟังก์ชันสำหรับเริ่มเซสชันและเชื่อมต่อไฟล์ที่เราสร้างไว้ก่อนหน้านี้ dbconnect.php(ในไฟล์นี้ เราได้ทำการเชื่อมต่อกับฐานข้อมูล) ถึงกระนั้นก็ประกาศเซลล์ทันที error_messagesและ ความสำเร็จ_ข้อความในอาร์เรย์ส่วนกลางของเซสชัน วี error_mesagesเราจะบันทึกข้อความแสดงข้อผิดพลาดทั้งหมดที่เกิดขึ้นระหว่างการประมวลผลแบบฟอร์มและใน succes_messages, เราจะบันทึกข้อความที่น่ายินดี

ก่อนดำเนินการต่อเราต้องตรวจสอบ เป็นแบบฟอร์มที่ส่งมาเลย... ผู้โจมตีสามารถดูค่าของแอตทริบิวต์ได้ การกระทำจากแบบฟอร์ม และค้นหาว่าไฟล์ใดกำลังประมวลผลแบบฟอร์มนี้ และเขาอาจเกิดความคิดที่จะไปที่ไฟล์นี้โดยตรงโดยพิมพ์ที่อยู่ต่อไปนี้ในแถบที่อยู่ของเบราว์เซอร์: http: //arees_site/register.php

ดังนั้น เราจำเป็นต้องตรวจสอบการมีอยู่ของเซลล์ในอาร์เรย์ POST ส่วนกลาง ซึ่งชื่อตรงกับชื่อปุ่ม "ลงทะเบียน" ของเราจากแบบฟอร์ม ดังนั้นเราจึงตรวจสอบว่ามีการคลิกปุ่ม "ลงทะเบียน" หรือไม่

หากผู้โจมตีพยายามนำทางไปยังไฟล์นี้โดยตรง เขาจะได้รับข้อความแสดงข้อผิดพลาด ฉันขอเตือนคุณว่าตัวแปร $ address_site มีชื่อของไซต์และมันถูกประกาศในไฟล์ dbconnect.php.

ข้อผิดพลาด!หน้าแรก

"); } ?>

ค่าของ captcha ในเซสชันถูกเพิ่มเข้าไปเมื่อมีการสร้างใน file captcha.php... เพื่อเป็นการเตือนความจำ ฉันจะแสดงโค้ดชิ้นนี้จากไฟล์ให้คุณดูอีกครั้ง captcha.phpโดยที่ค่า captcha ถูกเพิ่มไปยังเซสชัน:

ตอนนี้เรามาดำเนินการตรวจสอบกันต่อไป ในไฟล์ register.phpภายในบล็อก if ที่เราตรวจสอบว่ามีการคลิกปุ่ม "ลงทะเบียน" หรือไม่ ตรงจุดที่มีการระบุความคิดเห็น " // (1) วางโค้ดชิ้นต่อไป"พวกเราเขียน:

// ตรวจสอบผลลัพธ์ captcha // ตัดช่องว่างตั้งแต่ต้นและสิ้นสุดบรรทัด $ captcha = trim ($ _ POST ["captcha"]); if (isset ($ _ POST ["captcha"]) &&! empty ($ captcha)) (// เปรียบเทียบค่าที่ได้รับกับค่าจากเซสชัน if (($ _ SESSION ["rand"]! = $ captcha ) && ($ _SESSION ["rand"]! = "")) (// หาก captcha ไม่ถูกต้อง เราจะส่งคืนผู้ใช้ไปยังหน้าการลงทะเบียน จากนั้นเราจะแสดงข้อความแสดงข้อผิดพลาดว่าเขาป้อน captcha ผิด . $ error_message = "

ข้อผิดพลาด!คุณป้อน captcha ผิด

"; // บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION [" error_messages "] = $ error_message; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: " . $ Address_site . "/ form_register.php"); // หยุดการออกสคริปต์ ();) // (2) วางโค้ดถัดไป) อื่น (// หากแคปต์ชาไม่ผ่านหรือเป็นทางออกที่ว่างเปล่า ( "

ข้อผิดพลาด!ไม่มีรหัสยืนยัน นั่นคือรหัสแคปต์ชา คุณสามารถไปที่หน้าแรก

"); }

ต่อไป เราต้องประมวลผลข้อมูลที่ได้รับจากอาร์เรย์ POST ก่อนอื่น เราต้องตรวจสอบเนื้อหาของอาร์เรย์ POST ทั่วโลก นั่นคือมีเซลล์ที่มีชื่อตรงกับชื่อของช่องป้อนข้อมูลจากแบบฟอร์มของเราหรือไม่

หากเซลล์นั้นมีอยู่ เราจะตัดแต่งช่องว่างจากจุดเริ่มต้นและจากจุดสิ้นสุดของบรรทัดจากเซลล์นี้ มิฉะนั้น เราจะเปลี่ยนเส้นทางผู้ใช้กลับไปที่หน้าด้วยแบบฟอร์มการลงทะเบียน

นอกจากนี้ หลังจากที่เราตัดช่องว่างแล้ว ให้เพิ่มบรรทัดลงในตัวแปรและตรวจสอบความว่างเปล่าของตัวแปรนี้ หากไม่ว่าง ให้ดำเนินการต่อ มิฉะนั้น เราจะเปลี่ยนเส้นทางผู้ใช้กลับไปที่หน้าด้วยแบบฟอร์มการลงทะเบียน

วางรหัสนี้ในตำแหน่งที่ระบุ " // (2) วางโค้ดชิ้นต่อไป".

/ * ตรวจสอบว่า global array $ _POST มีข้อมูลที่ส่งจากแบบฟอร์มและใส่ข้อมูลที่ส่งเป็นตัวแปรธรรมดาหรือไม่ * / If (isset ($ _ POST ["first_name"])) (// ตัดช่องว่างจากจุดเริ่มต้นและ จากท้ายสตริง $ first_name = trim ($ _ POST ["first_name"]); // ตรวจสอบตัวแปรสำหรับความว่างเปล่า if (! empty ($ first_name)) (// เพื่อความปลอดภัย ให้แปลงอักขระพิเศษเป็นเอนทิตี HTML $ first_name = htmlspecialchars ($ first_name, ENT_QUOTES) ;) else (// บันทึกข้อความแสดงข้อผิดพลาดไปที่เซสชัน $ _SESSION ["error_messages"] = "

ใส่ชื่อของคุณ

ไม่มีช่องชื่อ

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); ) if ( isset ($ _ POST ["last_name"])) (// ตัดช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของสตริง $ last_name = trim ($ _ POST ["last_name"]); if (! empty ($ last_name) )) (// เพื่อความปลอดภัย ให้แปลงอักขระพิเศษเป็นเอนทิตี HTML $ last_name = htmlspecialchars ($ last_name, ENT_QUOTES);) else (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"] = "

ใส่นามสกุลของคุณ

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); )) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"] = "

ไม่มีช่องนามสกุล

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); ) if ( isset ($ _ POST ["email"])) (// ตัดช่องว่างจากจุดเริ่มต้นและท้ายบรรทัด $ email = trim ($ _ POST ["email"]); if (! empty ($ email) )) ($ email = htmlspecialchars ($ email, ENT_QUOTES); // (3) ตำแหน่งของรหัสสำหรับตรวจสอบรูปแบบของที่อยู่อีเมลและความเป็นเอกลักษณ์) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION [ "error_messages"]. = "

กรอกอีเมล์ของคุณ

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); )) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"] = "

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); ) if ( isset ($ _ POST ["password"])) (// ตัดช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของสตริง $ password = trim ($ _ POST ["password"]); if (! ว่างเปล่า ($ รหัสผ่าน) )) ($ รหัสผ่าน = htmlspecialchars ($ รหัสผ่าน ENT_QUOTES); // เข้ารหัส paprol $ รหัสผ่าน = md5 ($ รหัสผ่าน "top_secret");) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดในเซสชัน $ _SESSION ["error_messages "]. = "

ใส่รหัสผ่านของคุณ

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); )) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"] = "

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); ) // (4) วางโค้ดสำหรับเพิ่มผู้ใช้ในฐานข้อมูล

ที่มีความสำคัญเป็นพิเศษคือสนาม อีเมล... เราต้องตรวจสอบรูปแบบของที่อยู่ไปรษณีย์ที่ได้รับและเอกลักษณ์ในฐานข้อมูล นั่นคือ มีผู้ใช้รายใดที่ลงทะเบียนด้วยที่อยู่ทางไปรษณีย์เดียวกันแล้ว?

ในสถานที่ที่กำหนด " // (3) ตำแหน่งของรหัสเพื่อตรวจสอบรูปแบบของที่อยู่ไปรษณีย์และความเป็นเอกลักษณ์"เพิ่มรหัสต่อไปนี้:

// ตรวจสอบรูปแบบของที่อยู่อีเมลที่ได้รับโดยใช้นิพจน์ทั่วไป $ reg_email = "/^**@(+(*+)*\.)++/i"; // หากรูปแบบของที่อยู่อีเมลที่ได้รับไม่ตรงกับนิพจน์ทั่วไป if (! Preg_match ($ reg_email, $ email)) (// บันทึกข้อความแสดงข้อผิดพลาดในเซสชัน $ _SESSION ["error_messages"] = "

คุณป้อนอีเมลไม่ถูกต้อง

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); ) // เราตรวจสอบว่ามีที่อยู่ในฐานข้อมูลอยู่แล้วหรือไม่ $ Result_query = $ mysqli-> query ("SELECT` email` FROM `users' WHERE` email` = "". $ Email. "" "); // หากจำนวนแถวที่ได้รับเป็นหนึ่งเดียว ดังนั้นผู้ใช้ที่มีที่อยู่อีเมลนี้จึงลงทะเบียนแล้ว if ($ result_query-> num_rows == 1) (// หากผลลัพธ์ไม่เป็นเท็จ if (($ row = $ result_query -> fetch_assoc ())! = false) (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"]. = "

ผู้ใช้ที่มีที่อยู่อีเมลนี้ลงทะเบียนแล้ว

"; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site." / Form_register.php ");) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาด ไปที่เซสชัน $ _SESSION ["error_messages"]. = "

เกิดข้อผิดพลาดในการสืบค้นฐานข้อมูล

"; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site." / Form_register.php ");) / * ปิดการเลือก * / $ result_query-> ปิด (); // หยุดการออกสคริปต์ ();) / * ปิดการเลือก * / $ result_query-> ปิด ();

เสร็จสิ้นการตรวจสอบทั้งหมด ได้เวลาเพิ่มผู้ใช้ลงในฐานข้อมูล ในสถานที่ที่กำหนด " // (4) วางโค้ดสำหรับเพิ่มผู้ใช้ในฐานข้อมูล"เพิ่มรหัสต่อไปนี้:

// ขอเพิ่มผู้ใช้ในฐานข้อมูล $ result_query_insert = $ mysqli-> query ("INSERT INTO` users` (first_name, last_name, email, password) VALUES ("". $ First_name. "", "". $ Last_name . " "," ". $ email." "," ". $ password." ")"); if (! $ result_query_insert) (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"]. = "

ไม่สามารถเพิ่มผู้ใช้ในคำขอฐานข้อมูล

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); ) อื่น ๆ ( $ _SESSION ["success_messages"] = "

ลงทะเบียนเรียบร้อย!!!
ตอนนี้คุณสามารถเข้าสู่ระบบโดยใช้ชื่อผู้ใช้และรหัสผ่านของคุณ

"; // ส่งผู้ใช้ไปที่ส่วนหัวของหน้าการให้สิทธิ์ (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site." / Form_auth.php ");) / * กำลังดำเนินการตามคำขอ * / $ result_query_insert-> close (); // ปิดการเชื่อมต่อฐานข้อมูล $ mysqli-> close ();

หากมีข้อผิดพลาดเกิดขึ้นในคำขอเพิ่มผู้ใช้ในฐานข้อมูล เราจะเพิ่มข้อความเกี่ยวกับข้อผิดพลาดนี้ในเซสชันและส่งคืนผู้ใช้ไปยังหน้าการลงทะเบียน

มิฉะนั้นหากทุกอย่างเป็นไปด้วยดีเราก็เพิ่มข้อความในเซสชันด้วย แต่น่าพอใจกว่านั้นคือเราบอกผู้ใช้ว่าการลงทะเบียนสำเร็จ และเราเปลี่ยนเส้นทางไปยังหน้าด้วยแบบฟอร์มการให้สิทธิ์

สคริปต์ตรวจสอบรูปแบบอีเมลและความยาวของรหัสผ่านอยู่ในไฟล์ header.phpดังนั้นมันจะทำหน้าที่ในฟิลด์จากแบบฟอร์มนี้เช่นกัน

เซสชันยังเริ่มต้นในไฟล์ header.phpดังนั้นในไฟล์ form_auth.phpคุณไม่จำเป็นต้องเริ่มเซสชัน เนื่องจากเราจะได้รับข้อผิดพลาด


อย่างที่ฉันพูดไป สคริปต์สำหรับตรวจสอบรูปแบบของที่อยู่อีเมลและความยาวของรหัสผ่านก็ใช้งานได้ที่นี่เช่นกัน ดังนั้นหากผู้ใช้ป้อนที่อยู่อีเมลไม่ถูกต้องหรือรหัสผ่านสั้น ๆ เขาจะได้รับข้อความแสดงข้อผิดพลาดทันที และปุ่ม เข้ามาจะกลายเป็นไม่ใช้งาน

หลังจากขจัดข้อผิดพลาด button เข้ามาเปิดใช้งานและผู้ใช้จะสามารถส่งแบบฟอร์มไปยังเซิร์ฟเวอร์ที่จะดำเนินการ

การให้สิทธิ์ผู้ใช้

เพื่อแอตทริบิวต์ค่า การกระทำผู้พิการมีไฟล์ auth.phpซึ่งหมายความว่าแบบฟอร์มจะได้รับการประมวลผลในไฟล์นี้

ดังนั้น เปิดไฟล์ auth.phpและเขียนรหัสเพื่อดำเนินการตามแบบฟอร์มการให้สิทธิ์ สิ่งแรกที่ต้องทำคือเริ่มเซสชันและเชื่อมต่อไฟล์ dbconnect.phpเพื่อเชื่อมต่อกับฐานข้อมูล

// ประกาศเซลล์เพื่อเพิ่มข้อผิดพลาดที่อาจเกิดขึ้นขณะประมวลผลแบบฟอร์ม $ _SESSION ["error_messages"] = ""; // ประกาศเซลล์สำหรับการเพิ่มข้อความที่สำเร็จ $ _SESSION ["success_messages"] = "";

/ * ตรวจสอบว่าได้ส่งแบบฟอร์มหรือไม่ นั่นคือ คลิกปุ่มเข้าสู่ระบบหรือไม่ ถ้าใช่ ก็ดำเนินการต่อ ถ้าไม่ ให้แสดงข้อความแสดงข้อผิดพลาดแก่ผู้ใช้โดยระบุว่าเขาไปที่หน้านี้โดยตรง * / if (isset ($ _ POST ["btn_submit_auth"]) &&! empty ($ _ POST ["btn_submit_auth"])) (// (1) ช่องว่างสำหรับโค้ดถัดไป) else (ทางออก ("

ข้อผิดพลาด!คุณได้เข้าสู่หน้านี้โดยตรง ดังนั้นจึงไม่มีข้อมูลให้ดำเนินการ คุณสามารถไปที่หน้าแรก

"); }

// ตรวจสอบผลลัพธ์ captcha if (isset ($ _ POST ["captcha"])) (// ตัดช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของบรรทัด $ captcha = trim ($ _ POST ["captcha"]); ถ้า (! Empty ($ captcha )) (// เปรียบเทียบค่าที่ได้รับกับค่าจากเซสชัน ถ้า (($ _ SESSION ["rand"]! = $ Captcha) && ($ _SESSION ["rand"]! = " ")) (// หาก captcha ไม่ถูกต้อง เราจะส่งคืนผู้ใช้ไปยังหน้าการให้สิทธิ์ จากนั้นเราจะแสดงข้อความแสดงข้อผิดพลาดว่าเขาป้อน captcha ผิด $ error_message = "

ข้อผิดพลาด!คุณป้อน captcha ผิด

"; // บันทึกข้อความแสดงข้อผิดพลาดในเซสชัน $ _SESSION [" error_messages "] = $ error_message; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการอนุญาต (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: " . $ Address_site . "/ form_auth.php"); // หยุดการออกจากสคริปต์ ();)) else ($ error_message = "

ข้อผิดพลาด!ช่องสำหรับป้อน captcha ต้องไม่เว้นว่าง

"; // บันทึกข้อความแสดงข้อผิดพลาดในเซสชัน $ _SESSION [" error_messages "] = $ error_message; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการอนุญาต (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: " . $ Address_site . "/ form_auth.php"); // หยุดการออกจากสคริปต์ ();) // (2) ที่สำหรับประมวลผลที่อยู่อีเมล // (3) ที่สำหรับประมวลผลรหัสผ่าน // (4) ที่สำหรับ ทำการสอบถามไปยังฐานข้อมูล) อย่างอื่น (// ถ้าแคปต์ชาไม่ผ่าน exit ("

ข้อผิดพลาด!ไม่มีรหัสยืนยัน นั่นคือรหัสแคปต์ชา คุณสามารถไปที่หน้าแรก

"); }

หากผู้ใช้ป้อนรหัสยืนยันถูกต้อง ให้ดำเนินการต่อ มิฉะนั้นเราจะกลับไปที่หน้าการให้สิทธิ์

การตรวจสอบที่อยู่ไปรษณีย์

// ตัดช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของบรรทัด $ email = trim ($ _ POST ["email"]); if (isset ($ _ POST ["email"])) (if (! empty ($ email)) ($ email = htmlspecialchars ($ email, ENT_QUOTES); // ตรวจสอบรูปแบบของที่อยู่อีเมลที่ได้รับโดยใช้นิพจน์ทั่วไป $ reg_email = " /^**@(+(*+)*\.)++/i "; // หากรูปแบบของที่อยู่อีเมลที่ได้รับไม่ตรงกับนิพจน์ทั่วไป if (! preg_match ($ reg_email, $ อีเมล)) (// บันทึกลงในข้อความแสดงข้อผิดพลาดของเซสชัน $ _SESSION ["error_messages"] = "

คุณป้อนอีเมลไม่ถูกต้อง

"; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการให้สิทธิ์ (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_auth.php "); // หยุดการออกสคริปต์ (); )) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"] = "

ช่องสำหรับป้อนที่อยู่ไปรษณีย์ (อีเมล) ไม่ควรเว้นว่างไว้

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_register.php "); // หยุดการออกสคริปต์ (); )) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"] = "

ฟิลด์อีเมลหายไป

"; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการให้สิทธิ์ (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_auth.php "); // หยุดการออกสคริปต์ (); ) // (3) พื้นที่สำหรับประมวลผลรหัสผ่าน

หากผู้ใช้ป้อนที่อยู่ไปรษณีย์ในรูปแบบที่ไม่ถูกต้องหรือค่าของช่องที่อยู่ไปรษณีย์ว่างเปล่า เราจะส่งคืนที่อยู่นั้นไปยังหน้าการอนุญาตที่เราแสดงข้อความเกี่ยวกับที่อยู่นั้น

ตรวจสอบรหัสผ่าน

ฟิลด์ถัดไปที่จะดำเนินการคือฟิลด์รหัสผ่าน ไปยังตำแหน่งที่กำหนด " // (3) ที่สำหรับประมวลผลรหัสผ่าน", พวกเราเขียน:

If (isset ($ _ POST ["password"])) (// ตัดช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของสตริง $ password = trim ($ _ POST ["password"]); if (! Empty ($ password) ) ($ password = htmlspecialchars ($ password, ENT_QUOTES); // Encrypt the password $ password = md5 ($ password. "top_secret");) else (// บันทึกข้อความแสดงข้อผิดพลาดในเซสชัน $ _SESSION ["error_messages" ]. = "

ใส่รหัสผ่านของคุณ

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_auth.php "); // หยุดการออกสคริปต์ (); )) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"] = "

ไม่มีช่องให้กรอกรหัสผ่าน

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_auth.php "); // หยุดการออกสคริปต์ (); )

ที่นี่โดยใช้ฟังก์ชัน md5 () เราเข้ารหัสรหัสผ่านที่ได้รับ เนื่องจากในฐานข้อมูลเรามีรหัสผ่านในรูปแบบที่เข้ารหัส คำลับเพิ่มเติมในการเข้ารหัสในกรณีของเรา " ความลับสุดยอด"ต้องเป็นอันที่ใช้ตอนลงทะเบียนผู้ใช้

ตอนนี้ คุณต้องทำการสอบถามฐานข้อมูลกับตัวอย่างของผู้ใช้ที่มีที่อยู่ทางไปรษณีย์เท่ากับที่อยู่ทางไปรษณีย์ที่ได้รับและรหัสผ่านเท่ากับรหัสผ่านที่ได้รับ

// สอบถามในฐานข้อมูลเกี่ยวกับการเลือกของผู้ใช้ $ result_query_select = $ mysqli-> query ("SELECT * FROM` users` WHERE email = "". $ email. "" AND password = "". $ password. "" "); if (! $ result_query_select) (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"]. = "

ข้อผิดพลาดในการเรียกผู้ใช้จากฐานข้อมูล

"; // ส่งผู้ใช้กลับไปที่ส่วนหัวของหน้าการลงทะเบียน (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_auth.php "); // หยุดการออกสคริปต์ (); ) อื่น ( // เราตรวจสอบว่าไม่มีผู้ใช้ที่มีข้อมูลดังกล่าวในฐานข้อมูล จากนั้นเราจะแสดงข้อความแสดงข้อผิดพลาด if ($ result_query_select-> num_rows == 1) (// หากข้อมูลที่ป้อนตรงกับข้อมูลจากฐานข้อมูล จากนั้นเราจะบันทึกการเข้าสู่ระบบและรหัสผ่านไปยังอาร์เรย์ของเซสชัน $ _SESSION ["email"] = $ email; $ _SESSION ["password"] = $ password; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าหลัก ("HTTP / 1.1 301 ย้ายอย่างถาวร"); ส่วนหัว ("ตำแหน่ง:". $ Address_site . "/ index.php");) อื่น ๆ (// บันทึกข้อความแสดงข้อผิดพลาดไปยังเซสชัน $ _SESSION ["error_messages"]. = "

ชื่อผู้ใช้และ / หรือรหัสผ่านไม่ถูกต้อง

"; // ส่งคืนผู้ใช้ไปยังส่วนหัวของหน้าการให้สิทธิ์ (" HTTP / 1.1 301 ย้ายอย่างถาวร "); ส่วนหัว (" ตำแหน่ง: ". $ Address_site" / Form_auth.php "); // หยุดการออกสคริปต์ (); ))

ออกจากระบบเว็บไซต์

และสิ่งสุดท้ายที่เราทำคือ ขั้นตอนการออกจากไซต์... ในขณะนี้ ส่วนหัวจะแสดงลิงก์ไปยังหน้าการอนุญาตและไปยังหน้าการลงทะเบียน

ในส่วนหัวของไซต์ (file header.php) โดยใช้เซสชัน เราจะตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้แล้วหรือไม่ หากไม่เป็นเช่นนั้น เราจะแสดงลิงก์การลงทะเบียนและการอนุญาต มิฉะนั้น (หากได้รับอนุญาต) จากนั้นเราจะแสดงลิงก์แทนการลงทะเบียนและการอนุญาต เอาท์พุต.

แก้ไขโค้ดบางส่วนจาก file header.php:

การลงทะเบียน

เอาท์พุต

เมื่อคุณคลิกลิงก์ออกจากไซต์ เราจะไปที่ไฟล์ logout.phpที่เราเพียงแค่ทำลายเซลล์ด้วยที่อยู่ทางไปรษณีย์และรหัสผ่านจากเซสชัน หลังจากนั้นเราจะส่งคืนผู้ใช้กลับไปที่หน้าที่คลิกลิงก์ ผลผลิต.

รหัสไฟล์ ออกจากระบบ.php:

นั่นคือทั้งหมดที่ ตอนนี้คุณรู้วิธี ดำเนินการและดำเนินการแบบฟอร์มการลงทะเบียนและการอนุญาตผู้ใช้ในเว็บไซต์ของคุณ แบบฟอร์มเหล่านี้มีอยู่เกือบทุกไซต์ ดังนั้นโปรแกรมเมอร์ทุกคนควรทราบวิธีสร้างแบบฟอร์มเหล่านี้

เรายังได้เรียนรู้วิธีตรวจสอบความถูกต้องของข้อมูลที่ป้อน ทั้งในฝั่งไคลเอ็นต์ (ในเบราว์เซอร์ โดยใช้ JavaScript, jQuery) และทางฝั่งเซิร์ฟเวอร์ (โดยใช้ภาษา PHP) เราก็ได้เรียนรู้ ดำเนินการขั้นตอนการออกจากไซต์.

สคริปต์ทั้งหมดได้รับการทดสอบและใช้งานได้ คุณสามารถดาวน์โหลดไฟล์เก็บถาวรพร้อมไฟล์ของไซต์ขนาดเล็กนี้ได้ที่ลิงค์นี้

ในอนาคตฉันจะเขียนบทความที่ฉันจะอธิบาย และฉันยังวางแผนที่จะเขียนบทความที่ฉันจะอธิบาย (โดยไม่ต้องโหลดหน้าซ้ำ) ดังนั้น เพื่อให้ทราบถึงการออกบทความใหม่ คุณสามารถสมัครรับข้อมูลจากไซต์ของฉัน

หากคุณมีคำถามใด ๆ โปรดติดต่อและหากคุณพบข้อผิดพลาดใด ๆ ในบทความโปรดแจ้งให้เราทราบ

แผนการสอน (ตอนที่ 5):

  1. สร้างโครงสร้าง HTML สำหรับแบบฟอร์มการเข้าสู่ระบบ
  2. เราประมวลผลข้อมูลที่ได้รับ
  3. เราแสดงคำทักทายของผู้ใช้ในส่วนหัวของไซต์

คุณชอบบทความนี้หรือไม่?



© 2021 skypenguin.ru - เคล็ดลับในการดูแลสัตว์เลี้ยง