จะเขียน CMS ของคุณเองโดยใช้ PHP และ MySQL ได้อย่างไร จะสร้างแผงผู้ดูแลระบบของคุณเอง (แผงผู้ดูแลระบบ) ใน php ได้อย่างไร?
หลายคนอาจถามคำถามที่คล้ายกัน แต่ความยากลำบากในการศึกษาและเนื้อหาที่หายากบนอินเทอร์เน็ตไม่น่าจะช่วยได้ในเรื่องนี้ คุณถามว่าขาดแคลนแม้จะมีการคัดลอกวางมากมายหรือไม่? ใช่ ฉันจะตอบเพราะในเว็บไซต์หลายสิบแห่งที่คัดลอกบทความจากแหล่งบุคคลที่สามอย่างโง่เขลา ข้อผิดพลาดเดียวกันนี้กำลังแพร่กระจายซึ่งกลายเป็นอุปสรรคร้ายแรงสำหรับผู้เริ่มต้นในการเรียนรู้ PHP ผู้ใช้ฟอรัมระดับสูงจำนวนมากมักไม่เข้าใจโค้ดที่ง่ายที่สุด ดังนั้นพวกเขาจึงต้องคิดออกด้วยตนเอง
ฉันพบคำยืนยันอีกครั้งเมื่อฉันตัดสินใจเริ่มเชี่ยวชาญ ภาษาพีพีพีและการทำงานกับฐานข้อมูล ข้อมูลมายเอสคิวแอลจากการสร้างแผงผู้ดูแลระบบที่เรียบง่ายและเว็บไซต์ขนาดเล็กเพื่อฝึกฝนทักษะของคุณบนเครื่องมือจริง ลองนึกภาพความประหลาดใจของฉันเมื่อไม่มีรหัสใดที่ให้ทางออนไลน์ใช้งานได้ ฉันใช้เวลาทั้งวันในการแก้ปัญหาที่ง่ายที่สุดด้วยตัวเอง ซึ่งฉันไม่เคยพบคำตอบบนอินเทอร์เน็ตเลย
ดังนั้นในบทความนี้ ฉันขอนำเสนอโค้ดการทำงานสำหรับแผงผู้ดูแลระบบและเทมเพลตแบบธรรมดาที่ให้คุณสร้างและแก้ไขบทความโดยใช้ PHP
ส่วนที่ 1: การเขียนลงในตารางฐานข้อมูล MySQL
หัวใจหลักของ CMS คือเครื่องมือสำหรับบันทึกข้อมูลทั้งหมดเกี่ยวกับเว็บไซต์ลงในฐานข้อมูล ทั้งหมดนี้ควรมีอยู่ในตารางและผู้ดูแลไซต์ควรมี วิธีที่สะดวกเพื่อป้อนข้อมูลลงในตาราง เปลี่ยนแปลงหรือลบออก
ก่อนอื่นเรามาสร้างมันโดยใช้ ฐานข้อมูล phpMyAdminข้อมูลและในนั้น - หน้าตารางที่มีชื่อและเนื้อหาสองฟิลด์ หากต้องการทำสิ่งนี้ ให้ไปที่ส่วน SQL ในแผง phpMyAdmin และเรียกใช้แบบสอบถามต่อไปนี้:
สร้างตาราง "หน้า" ("ชื่อ" varchar (100) ไม่เป็นค่าเริ่มต้น "", "เนื้อหา" ข้อความไม่เป็นโมฆะ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
และ phpMyAdmin จะสร้างตารางนี้ให้กับคุณ
การพูดนอกเรื่องเล็กน้อย:
หากคุณคุ้นเคยกับฐานข้อมูลอย่างน้อยในระดับ Microsoft Access คุณจะจำได้ว่าแต่ละเขตข้อมูลตารางมีคุณสมบัติจำนวนหนึ่ง ในกรณีนี้ เราได้กำหนดคุณสมบัติข้อความให้กับช่องเนื้อหา ดูเหมือนจะสมเหตุสมผลเนื่องจากมีไว้เพื่อจัดเก็บข้อความ แต่โปรดจำไว้ว่าขนาดของฟิลด์นี้มีจำกัด ดังนั้นหากคุณต้องการเก็บข้อความ "สงครามและสันติภาพ" ไว้ในนั้น ควรกำหนดให้เป็นข้อความยาวจะดีกว่า
ในการจัดการตารางดังกล่าวจากแผงผู้ดูแลระบบ เราจะต้องมีแบบฟอร์มที่ประกอบด้วยช่องข้อความธรรมดา (input type="text") เพื่อป้อนชื่อเรื่อง พื้นที่ข้อความ (textarea) สำหรับการป้อนเนื้อหา และปุ่ม "ส่ง" (ประเภทอินพุต = "ส่ง")
เพิ่มรูปแบบหน้า
มาวางแบบฟอร์มนี้ในไฟล์ page.php
หน้า.php
มาสร้างไฟล์ config.php ที่จะเชื่อมต่อกับฐานข้อมูลกันดีกว่า
config.php
$dblocation = "localhost"; $dbuser = "root"; $dbpasswd = ""; $dbname="simple_cms"; //Подключение к базе данных $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd); if (!$dbcnx) // Если дескриптор равен 0 соединение не установлено { echo("
เซิร์ฟเวอร์ฐานข้อมูลไม่พร้อมใช้งานในขณะนี้ ดังนั้นจึงไม่สามารถแสดงเพจได้อย่างถูกต้อง
"); exit(); ) if (!@mysql_select_db($dbname, $dbcnx)) ( echo("ฐานข้อมูลไม่พร้อมใช้งานในขณะนี้ ดังนั้นจึงไม่สามารถแสดงเพจได้อย่างถูกต้อง
"); ออก(); ) ?>ตอนนี้เรามีการเชื่อมต่อกับฐานข้อมูลและสคริปต์เพื่อเข้าไปแล้ว ข้อมูลที่จำเป็นสิ่งที่เหลืออยู่คือการจัดระเบียบการส่งเนื้อหาของฟิลด์ข้อความชื่อ my_title และพื้นที่ข้อความ my_text ไปที่นั่น เพื่อจุดประสงค์นี้ เราได้กำหนดวิธีการ POST ไว้ในแบบฟอร์มเพื่อถ่ายโอนข้อมูลไปยังไฟล์ page.php -
ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ในส่วนถัดไป
ส่วนที่ 2: การอ่านจากตารางฐานข้อมูล MySQL
มาสร้างรายการชื่อหน้าทั้งหมดที่จัดเก็บไว้ในตารางหน้าในแผงผู้ดูแลระบบของเรา และเราจัดระเบียบงานของรายการนี้เพื่อให้ผู้ใช้สามารถเข้าถึงเนื้อหาของเพจได้ด้วยการคลิกเมาส์
หากต้องการอ่านบันทึกจากตาราง เราจะใช้โครงสร้างต่อไปนี้:
$sql = mysql_query("SELECT*FROM หน้า");
ในขณะที่($record = mysql_fetch_array($sql)) ( $title = $record["title"]; ) หากมีบันทึกหลายรายการในตารางอยู่แล้วในรูปแบบ "บริสุทธิ์" โครงสร้างจะให้เฉพาะรายการสุดท้ายแก่เราเนื่องจากค่าของตัวแปร $title ได้รับการอัปเดตอย่างต่อเนื่องในขณะที่วนซ้ำ
- แต่เราจะใช้เคล็ดลับเล็กน้อย ในวงเดียวกัน เราจะแสดงรายการทั้งหมดบนหน้าจอทีละรายการ
เมื่อต้องการทำเช่นนี้ ให้วาดตารางและวางส่วนหนึ่งของตารางไว้ในลูป: |
".$record["title"]"
ตอนนี้แต่ละบันทึกการอ่านจะถูกป้อนลงในเซลล์ และแถวของตารางจะ "คูณ" เมื่ออ่านบันทึกถัดไป
ถัดจากเซลล์ที่เราวางชื่อหน้าจะมีอีกเซลล์หนึ่ง ฉันเพิ่งเขียนคำว่า แก้ไข ลงไป แต่ฉันสามารถใส่ไอคอนสวยๆ ลงไปได้ ไม่สำคัญหรอก สิ่งสำคัญอีกประการหนึ่ง: รายการนี้ (หรือรูปภาพ) ควรนำผู้ดูแลระบบไปยังส่วนผู้ดูแลระบบซึ่งมีโปรแกรมแก้ไขข้อความอยู่
ตอนนี้ได้เวลาใช้ "ตัวแก้ไข" ดั้งเดิมที่สุดแล้ว - พื้นที่ข้อความของแบบฟอร์ม
เมื่อต้องการทำเช่นนี้ ให้สร้างไฟล์ editor.php ด้วยโค้ดต่อไปนี้
include ("config.php"); ?>
เมื่อต้องการทำเช่นนี้ ให้วาดตารางและวางส่วนหนึ่งของตารางไว้ในลูป: | editor.php | ".$บันทึก["เนื้อหา"]" |
บันทึก
ในแต่ละแถวของตารางบนสุด ชื่อหน้าที่อ่านจากฐานข้อมูลจะปรากฏขึ้น ทางด้านขวามือในเซลล์ถัดไปจะมีคำว่า แก้ไข มันเชื่อมโยงไปยังหน้า editor.php เดียวกันและส่งผ่านค่าของตัวแปร $page_title ซึ่งเท่ากับชื่อของหน้าในแถวนี้ (ฉันได้เน้นส่วนของโค้ดนี้เป็นสีแดง):
พิมพ์"
เมื่อผู้ใช้คลิกลิงก์ดังกล่าว เขาจะถูกส่งกลับไปยังหน้าเดิม แต่มีค่าเฉพาะสำหรับตัวแปร $page_title
ส่วนของโค้ดต่อไปนี้ค้นหาฐานข้อมูลสำหรับตารางเพจ และในนั้นค้นหาค่าของฟิลด์เนื้อหาที่ฟิลด์หัวเรื่องตรงกับค่าของตัวแปร $page_title
$sql = mysql_query("select * FROM pages where title="".$page_title."";"); while($record = mysql_fetch_array($sql)) { $content=$record["content"]; }
เมื่อพบฟิลด์ดังกล่าวแล้ว ฟิลด์ดังกล่าวจะส่งเนื้อหาไปยังตัวแปร $content ซึ่งจะพิมพ์ฟิลด์ดังกล่าวในพื้นที่ข้อความ
print $content; ?>
ตอนนี้เรามีโอกาสที่จะแก้ไขข้อความนี้ แต่จะคืนข้อความเวอร์ชันที่แก้ไขแล้วไปยังฐานข้อมูลได้อย่างไร - ข้อมูลเพิ่มเติมในส่วนถัดไป
ส่วนที่ 3 การแก้ไขบันทึกจากตารางฐานข้อมูล MySQL
มาเพิ่มส่วนของโค้ดต่อไปนี้ที่จุดเริ่มต้นของไฟล์ editor.php:
session_start(); include ("config.php"); ?>
และที่ส่วนท้ายสุดของไฟล์นี้เราจะเพิ่ม:
$_SESSION["id"]= $page_title; ?>
เทคนิคนี้เรียกว่าเซสชัน จำเป็นต้องมีเซสชันเพื่อจดจำหน้าที่เรากำลังแก้ไขในตัวแปร แม้ว่าเราจะคลิกปุ่มแก้ไขและได้รับค่าของตัวแปร $page_title (ชื่อของเพจที่กำลังแก้ไข) หลังจากที่เราทำการเปลี่ยนแปลงและคลิกปุ่มบันทึก หน้า editor.php จะโหลดซ้ำและค่า $page_title จะหายไป . นั่นเป็นเหตุผลที่เราจะเก็บไว้ใน $_SESSION["id"]
และเมื่อแบบฟอร์มส่งค่าของตัวแปร $text_edit (นั่นคือชื่อที่เราตั้งให้กับพื้นที่ข้อความ) โดยใช้วิธี POST ไปยังหน้า editor.php ที่รีโหลด เราจะสามารถเรียกใช้โค้ดต่อไปนี้:
ถ้า (isset($_POST["save"])) $my_text = strval($_POST["text_edit"]);
$sql =mysql_query("อัปเดตหน้า SET content = "".$my_text."" WHERE title="".$_SESSION["id"]"";");
ฉันหวังว่าคุณจะเข้าใจว่าทำไมเราถึงต้องการตัวแปร $_SESSION["id"]
header("Content-Type: text/html; charset=utf-8"); session_start(); include ("config.php"); ?>
เมื่อต้องการทำเช่นนี้ ให้วาดตารางและวางส่วนหนึ่งของตารางไว้ในลูป: | editor.php |
สคริปต์ไฟล์ editor.php ที่สมบูรณ์จะมีลักษณะดังนี้:
ส่วนที่ 4: การลบบันทึกออกจากตารางฐานข้อมูล MySQL
มาเพิ่มเซลล์อื่นลงในตารางของไฟล์ editor.php:
ไม่สำคัญเลยว่าเราจะส่งผ่านค่าใดไปยังตัวแปร $delete คุณสามารถเขียน &delete=1 หรือ &delete=abcd ได้ แต่สิ่งสำคัญคือ ตอนนี้คุณสามารถเขียนเงื่อนไขที่เราจะลบรายการที่เลือก:
If($delete) $sql =mysql_query("ลบออกจากหน้า WHERE title="".$_SESSION["id"]"";");ความสนใจ! editor.php:
- ฉันลบโครงสร้างต่อไปนี้:
".$บันทึก["เนื้อหา"]" เพื่อไม่ให้ลบหน้าที่ต้องการโดยไม่ตั้งใจ
- เพิ่มฟังก์ชันในการลบเพจหากกดปุ่ม "ลบ"
ถ้า (isset($_POST["ลบ"]))
ในรูปแบบสุดท้าย ไฟล์ editor.php ของเราจะมีหน้าตาดังนี้:
header("ประเภทเนื้อหา: text/html; charset=utf-8");
session_start();
รวม("config.php");
?>
เมื่อต้องการทำเช่นนี้ ให้วาดตารางและวางส่วนหนึ่งของตารางไว้ในลูป: | editor.php |
$sql = mysql_query("select * จากเพจโดยที่ title="".$page_title"";");
ในขณะที่($บันทึก = mysql_fetch_array($sql))
{
$content=$record["เนื้อหา"];
}
ถ้า (isset($_POST["บันทึก"]))
$my_text = strval($_POST["text_edit"]);
$sql =mysql_query("อัปเดตหน้า SET content = "".$my_text."" WHERE title="".$_SESSION["id"]"";");
ถ้า (isset($_POST["ลบ"]))
$title = strval($_SESSION["id"]);
$sql =mysql_query("ลบออกจากหน้า WHERE title="".$title"";");
?>
$_SESSION["id"]= $page_title;
?>
นั่นคือทั้งหมดที่ฉันอยากจะบอกคุณเกี่ยวกับหลักการของแผงผู้ดูแลระบบ แน่นอนว่าใน CMS จริง แต่ละโมดูลทั้งหมด (และขณะนี้เรามีสามโมดูล ได้แก่ page.php, editor.php และไฟล์บริการ config.php) ทำงานภายใต้การควบคุมของไฟล์ index.php หลัก ซึ่งหนึ่ง- time จะเชื่อมต่อโมดูลทั้งหมดเข้ากับฐานข้อมูล และหากผู้ใช้ต้องการ ก็สามารถแนบโมดูลการสร้างเพจ โมดูลการแก้ไข รวมถึงโฮสต์ของโมดูลอื่นๆ ได้ (โมดูลเมนูไซต์ โมดูลการจัดการสมุดเยี่ยม แบนเนอร์ ฯลฯ) สิ่งสำคัญคือต้องเข้าใจว่าโมดูลใดๆ การดำเนินการใดๆ ในแผงผู้ดูแลระบบจะขึ้นอยู่กับตัวดำเนินการ SQL หลักสี่ตัว:
- แทรก- แทรกบันทึกลงในฐานข้อมูล
- เลือก- เลือกบันทึกจากฐานข้อมูล
- อัปเดต- เปลี่ยนรายการ;
- ลบ- ลบรายการ
ดังนั้นจึงไม่มีอะไรซับซ้อนมากในการเขียนแผงผู้ดูแลระบบของคุณเอง CMS ใดๆ แม้แต่ยักษ์ใหญ่อย่าง Joomla ก็ยังทำงานบนหลักการเดียวกัน
และการเชื่อมต่อไซต์เข้ากับแผงผู้ดูแลระบบโดยทั่วไปนั้นง่ายพอ ๆ กับการปลอกลูกแพร์ หลังจากที่คุณเขียนสคริปต์สำหรับแผงผู้ดูแลระบบแล้ว
ขอให้โชคดี!
อ้างอิงจากเนื้อหาจากแหล่งต่างๆพร้อมการแก้ไขของผมเอง
แผงผู้ดูแลระบบของไซต์เป็นส่วนหนึ่งของกลไกที่ออกแบบมาเพื่อเพิ่มเนื้อหาลงในไซต์โดยอัตโนมัติ มีช่องสำหรับเขียนข้อความของบทความ แผงผู้ดูแลระบบประกอบด้วยสคริปต์ที่สร้างหน้าเว็บไซต์ใหม่หรือเพิ่มบทความลงในฐานข้อมูล ขึ้นอยู่กับโครงสร้างของเว็บไซต์ มีการเพิ่มลิงก์ไปยังบทความลงในเมนู โดยทั่วไป แผงผู้ดูแลระบบอนุญาตให้คุณเพิ่มไม่เพียงแต่ข้อความ แต่ยังรวมถึงเนื้อหาอื่นๆ ด้วย เมื่อสร้างกลไกเว็บไซต์ คุณเป็นผู้ตัดสินใจว่าจะสร้างแผงผู้ดูแลระบบหรือเพิ่มบทความด้วยตนเอง
แผงผู้ดูแลระบบอยู่ในหน้าแยกต่างหากซึ่งมีที่อยู่ต่อไปนี้โดยประมาณ:
http://mysite.ru/adminpanel.php
ไซต์ไม่ได้เชื่อมโยงไปยังหน้านี้ คุณเพียงแค่ต้องทราบ URL ของไซต์เท่านั้น การเข้าสู่ระบบแผงผู้ดูแลระบบทำได้ผ่านแบบฟอร์มการอนุญาต มันแตกต่างจากการอนุญาตปกติตรงที่คุณเข้าสู่ระบบไม่ใช่ในฐานะผู้ใช้ทั่วไป แต่ในฐานะผู้ดูแลระบบ และจะต้องบันทึกข้อมูลเกี่ยวกับสิ่งนี้ในเซสชัน มีเพียงผู้ดูแลระบบเท่านั้นที่ควรมีสิทธิ์เข้าถึงแผงผู้ดูแลระบบ
การอนุญาตของผู้ดูแลระบบ
การอนุญาตของผู้ดูแลระบบสามารถทำได้สองวิธี หากมีผู้ดูแลระบบหลายคน คุณสามารถเพิ่มฟิลด์ลงในตารางพร้อมกับผู้ใช้เพื่อระบุว่าผู้ใช้เป็นผู้ดูแลระบบได้ หรือคุณสามารถโอนสิทธิ์ของผู้ดูแลระบบให้กับผู้ใช้ที่ระบุในสคริปต์การอนุญาต เราใช้ตัวเลือกที่สอง ลองเรียกหน้าเข้าสู่ระบบ avtadministrator.html นี่คือรหัส:
avtadministrator.html:
แบบฟอร์มจะส่งข้อมูลไปยังไฟล์ adminavt.php นี่คือสคริปต์การอนุญาต รหัสของมันมีลักษณะดังนี้:
adminavt.php:
3 |
$เข้าสู่ระบบ = $_POST["เข้าสู่ระบบ"]; $pas = $_POST["รหัสผ่าน"]; ถ้า ($login == "Viktor" && $pas == 1122) ( session_start(); $_SESSION["admin"] = true; $script = "adminpanel.php"; ) else $script = "avtadministrator.html" ; header("ตำแหน่ง: $script"); |
ความคิดเห็น:
3, 4 - รับข้อมูลเข้าสู่ระบบและรหัสผ่านจากแบบฟอร์ม
5 - ถ้าถูกต้อง
8 - บันทึกในเซสชันว่านี่คือผู้ดูแลระบบ
9 - หน้าที่ต้องไป - adminpanel.php
11 - หากการเข้าสู่ระบบหรือรหัสผ่านไม่ถูกต้อง
13 - ไปที่หน้าที่ต้องการ
การสร้างแผงผู้ดูแลระบบ
แผงผู้ดูแลระบบมีลักษณะเช่นนี้
adminpanel.php:
ในตอนต้นจะมีสคริปต์ PHP ที่จะตรวจสอบว่ามีตัวแปรผู้ดูแลระบบในเซสชันหรือไม่ ถ้าไม่เช่นนั้น ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบจะเข้าสู่ระบบแผงผู้ดูแลระบบ จากนั้นคุณไปที่หน้าการอนุญาต แผงผู้ดูแลระบบเป็นรูปแบบที่ผู้ดูแลระบบเข้าสู่บทความใหม่ ชื่อเรื่องของบทความอาจยาวและลิงก์ไปยังบทความในเมนูของเว็บไซต์อาจแตกต่างจากชื่อเรื่อง นั่นเป็นสาเหตุที่แบบฟอร์มมีช่องสำหรับข้อความลิงก์
ก่อนที่จะเพิ่มบทความลงในฐานข้อมูล คุณต้องวางข้อความของบทความในแท็ก
มาทำสิ่งนี้ในฝั่งไคลเอ็นต์เพื่อไม่ให้เปลืองทรัพยากรเซิร์ฟเวอร์ มาเพิ่มสคริปต์ในหน้าที่เราวางแท็กไว้หน้าข้อความของบทความ
และหลังจากข้อความ
- หากต้องการบันทึกย่อหน้าทั้งหมด คุณต้องปิดแท็กแทนการขึ้นบรรทัดใหม่และเปิดอันใหม่ นี่คือรหัสสคริปต์:
จาวาสคริปต์:
24 |
แบบฟอร์ม var = document.querySelector("แบบฟอร์ม"); form.onsubmit = function () ( var text = form.text; text.value = " " + text.value + "!} "; text.value = text.value.replace(/\n/g, ""); }; |
สำหรับฉันดูเหมือนว่าเราจำเป็นต้องป้องกันด้วยรหัสผ่านเพียงไฟล์เดียวเท่านั้น กล่าวคือ ดัชนี.phpเนื่องจากมีการเชื่อมต่อกับฐานข้อมูลเท่านั้น ถ้าเราเรียกส่วนต่างๆ ของโค้ดที่เราเชื่อมต่อจากโฟลเดอร์ moduls แยกกัน จะไม่มีอะไรเกิดขึ้น เนื่องจากพวกมันทั้งหมดจำเป็นต้องเชื่อมต่อกับฐานข้อมูล ดังนั้นการใช้ชิ้นส่วนเหล่านี้ คุณไม่สามารถทำร้ายบล็อกของคุณได้! ซึ่งหมายความว่าไม่จำเป็นต้องใส่รหัสผ่านเลย
เป้า
- เรามาใส่สคริปต์สำหรับเชื่อมต่อกับฐานข้อมูลกันดีกว่า แยกไฟล์และเชื่อมต่อกับ index.php โดยใช้ include
- มาสร้างตารางใหม่ในฐานข้อมูลที่เราจะเก็บข้อมูลล็อกอินและรหัสผ่านของผู้ดูแลระบบ
- เราจำเป็นต้องเขียนสคริปต์ที่จะป้องกันไม่ให้เราเข้าสู่ระบบ หน้าแรกแผงผู้ดูแลระบบโดยไม่ได้รับอนุญาต และจะนำเราไปยังแบบฟอร์มที่ผู้ดูแลระบบจำเป็นต้องป้อนข้อมูลเข้าสู่ระบบและรหัสผ่าน
- คุณต้องสร้างไฟล์ php ใหม่และวางแบบฟอร์มและรหัสอนุญาตลงไป
- มาสร้างเทมเพลตฟอร์มกัน
- มาเขียนสคริปต์เพื่อให้ผู้ดูแลระบบออกจากแผงผู้ดูแลระบบ และวางลิงก์ไปยังสคริปต์นี้ในหน้าหลักของแผงผู้ดูแลระบบ
เราใส่การเชื่อมต่อกับฐานข้อมูลไว้ในไฟล์แยกต่างหาก
เนื่องจากเราจะใช้การเชื่อมต่อนี้กับฐานข้อมูลในสองไฟล์ (ใน index.php และ login.php) จึงเหมาะสมกว่าที่จะวางสคริปต์การเชื่อมต่อไว้ในไฟล์แยกต่างหาก ตอนนี้เราจะสร้างตัวแปรในสคริปต์นี้ซึ่งเราจะจัดเก็บที่อยู่ของบล็อกของเรา (ในรูปแบบ http://address_blog.ru) ก่อนอื่น เรามาเริ่มใช้สคริปต์กันก่อน จากนั้นฉันจะอธิบายว่าทำไมเราถึงต้องการตัวแปรพร้อมที่อยู่
$nameDB = "blog";//ชื่อฐานข้อมูล
$nameSERVER = "localhost";//เซิร์ฟเวอร์
$nameUSER = "root";//ชื่อผู้ใช้ฐานข้อมูล
$passUSER = "";//รหัสผ่านผู้ใช้ DB
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
$server_root = "http://yoururl.ru/";
?>
บันทึกโค้ดชิ้นนี้ในไฟล์แยกต่างหาก (ฉันเรียกว่าไฟล์นี้ db.phpและวางไว้ในโฟลเดอร์ modules) จากนั้นลบสคริปต์นี้ออกจากไฟล์ ดัชนี.phpและวางโค้ดต่อไปนี้แทน
รวม("โมดูล/db.php");
//เชื่อมต่อกับฐานข้อมูล (DB)
ตอนนี้ฉันจะอธิบายบรรทัดใหม่สามบรรทัดในไฟล์ db.php- เย็บแผล
if(isset($_GET["server_root"]))($server_root = $_GET["server_root"];unset($server_root);)
if(isset($_POST["server_root"]))($server_root = $_POST["server_root"];unset($server_root);)
จะอนุญาตให้เราลบตัวแปรได้หากมีคนพยายามสร้างตัวแปรด้วยคำขอ GET หรือ POST เราต้องการตัวแปรพร้อมที่อยู่เพื่อตรวจสอบว่าการอนุญาตนั้นมาจากบล็อกของเรา ไม่ใช่จากเซิร์ฟเวอร์บุคคลที่สาม การป้องกันดังกล่าวสามารถป้องกันบล็อกของเราจากการแฮ็กได้ กล่าวคือ ช่วยให้เรา ผู้ดูแลระบบ และโปรแกรมเมอร์เชื่อมั่นในบล็อกของเรามากขึ้น
มาสร้างตารางใหม่ในฐานข้อมูลกันดีกว่า
เริ่มต้นด้วยฉันต้องการพูดสิ่งต่อไปนี้: ในฐานข้อมูลเราจะจัดเก็บรหัสผ่านที่เข้ารหัสโดยใช้ ฟังก์ชั่น PHP md5() เราจะป้อนชื่อผู้ใช้และรหัสผ่านของผู้ดูแลระบบด้วยตนเอง ฉันจะให้ข้อมูลต่อไปนี้:
เข้าสู่ระบบ: ผู้ดูแลระบบ
รหัสผ่าน: 123456
รหัสผ่านที่เข้ารหัสจะมีลักษณะดังนี้:
นั่นคือหากรหัสผ่าน 123456 ถูกส่งผ่านฟังก์ชัน md5 คุณจะได้สิ่งนี้ รหัสผ่านที่เข้ารหัส.
มาเริ่มกันเลย ไปที่ phpMyAdmin และสร้างตารางใหม่:
และแทรกหนึ่งบรรทัดลงในตารางด้วยตนเอง
สคริปต์ตรวจสอบการอนุญาต
การอนุญาตนั้นคือการสร้างตัวแปรโกลบอล $_SESSION นั่นคือ หากมีตัวแปรส่วนกลางนี้ ผู้ใช้จะได้รับอนุญาต ดังนั้นสคริปต์จะต้องตรวจสอบว่า (ตัวแปรส่วนกลาง) ถูกสร้างขึ้นหรือไม่ ถ้าใช่ ไม่ต้องทำอะไร ถ้าไม่ใช่ ให้โอนไปที่ไฟล์ login.php
ก่อนที่จะเรียกตัวแปรโกลบอล $_SESSION คุณต้องเริ่มเซสชันก่อน กล่าวคือ เขียน session_start(); หากยังไม่เสร็จสิ้น ตัวแปรโกลบอล $_SESSION ก็จะไม่ทำงาน!
โดยทั่วไป นี่คือสคริปต์ที่ต้องแทรกทันทีหลังจากเชื่อมต่อกับฐานข้อมูลใน index.php
Session_start();
$logSESS = $_SESSION["$logSESS"];
ถ้า(!isset($logSESS))
{
ส่วนหัว ("ตำแหน่ง: login.php");
ออก;
}
//สคริปต์ตรวจสอบการอนุญาต
เนื่องจากค่าของตัวแปรโกลบอล $_SESSION ถูกถ่ายโอนไปยังตัวแปร $logSESS เราจึงต้องหยุดความพยายามในการสร้างตัวแปรนี้ ($logSESS) ด้วยวิธีอื่น (ฉันหมายถึงป้องกันการสร้างตัวแปรนี้โดยใช้ GET และ คำขอโพสต์- นี่คือฟังก์ชันที่สคริปต์สองบรรทัดแรกดำเนินการ
เทมเพลตฟอร์ม
เรามาสร้างเทมเพลตกันก่อน เทมเพลตเป็นรูปแบบปกติที่มีช่องข้อความสองช่อง
|
ไม่มีอะไรซับซ้อนที่นี่ เราได้สร้างเทมเพลตที่คล้ายกันมากกว่าหนึ่งครั้ง มาเรียกเทมเพลตนี้กันดีกว่า เข้าสู่ระบบ.htmlและใส่ลงในแพ็คเกจพร้อมเทมเพลต
ไฟล์การอนุญาต
ก่อนอื่นมาสร้างฟังก์ชั่นที่จะให้แบบฟอร์มการอนุญาตแก่เรา เราสร้าง ไฟล์ใหม่เรียกมันว่า login.php และวางไว้ในโฟลเดอร์ผู้ดูแลระบบ
//เชื่อมต่อกับฐานข้อมูล (DB)
รวม("โมดูล/db.php");
//เชื่อมต่อกับฐานข้อมูล (DB)
ฟังก์ชัน form_author()//ฟังก์ชันการเชื่อมต่อแบบฟอร์ม
{
$sm_read = file("templates/login.html");//...เชื่อมต่อเทมเพลต
$sm_read = implode("",$sm_read);//file() ฟังก์ชันส่งคืนอาร์เรย์ ดังนั้นเราจึงรวมมันเข้าด้วยกัน
กลับ $sm_read;//แสดงผล
}
$txt = form_author();//เรียกใช้ฟังก์ชันการเชื่อมต่อแบบฟอร์ม
include("templates/index.html");//main template
?>
ในไฟล์นี้เราเชื่อมต่อกับฐานข้อมูล (ที่ด้านบนสุด) ต่อไป ฉันเว้นที่ว่างสำหรับสคริปต์การอนุญาต (เพื่อให้ง่ายต่อการอธิบายว่าจะแทรกสคริปต์ที่ไหน ซึ่งฉันจะโพสต์ด้านล่าง) หลังจากนั้น เราจะประกาศเมตาแท็กและสร้างฟังก์ชันของเรา
ฟังก์ชั่นนี้ไม่ซับซ้อนมากนัก มันเกี่ยวข้องกับการเชื่อมต่อเทมเพลตและไม่มีอะไรเพิ่มเติม บรรทัดสุดท้ายจะบันทึกผลลัพธ์ของฟังก์ชันลงในตัวแปร $txt บรรทัดสุดท้ายเชื่อมต่อกับเทมเพลตหลัก
ตอนนี้ถ้าคุณพยายามเข้าไปในแผงผู้ดูแลระบบของบล็อก แต่คุณจะถูกเปลี่ยนเส้นทางไปที่หน้านี้
//การอนุญาต
// ทำลายตัวแปรด้วยการเข้าสู่ระบบและรหัสผ่านที่สร้างขึ้นโดยการป้อนลงในบรรทัด
ถ้า (isset ($_GET["loginDB"])) ($loginDB = $_GET["loginDB"];unset($loginDB);)
ถ้า (isset ($_GET["passDB"])) ($passDB = $_GET["passDB"];unset($passDB);)
//ป้อนข้อมูลเข้าสู่ระบบและรหัสผ่านที่ส่งผ่านการร้องขอโพสต์ลงในตัวแปรแยกกัน
ถ้า (isset ($_POST["loginDB"])) ($loginDB = $_POST["loginDB"];)
ถ้า (isset ($_POST["passDB"])) ($passDB = $_POST["passDB"];)
if(isset($loginDB) AND isset($passDB))//หากมีการเข้าสู่ระบบและรหัสผ่านอยู่
{
if(preg_match("/^+$/s",$loginDB) AND preg_match("/^+$/s",$passDB))//ตรวจสอบความถูกต้องของอินพุตโดยใช้ การแสดงออกปกติ
{
$prov = getenv("HTTP_REFERER");//เรากำหนดหน้าที่ที่มาของคำขอ
$prov = str_replace("www.","",$prov);//ลบ www ถ้ามี
preg_match("/(http\:\/\/[-a-z0-9_.]+\/)/",$prov,$prov_pm);//เราล้างที่อยู่จากสิ่งที่ไม่จำเป็น เราจำเป็นต้องได้รับ ลิงค์แบบนี้ http://xxxx.ru
$prov = $prov_pm;//ใส่ clean address ลงในตัวแปรแยกต่างหาก
$server_root = str_replace("www.","",$server_root);//ลบ www ถ้ามี
If($server_root == $prov)//ถ้าที่อยู่ของบล็อกของเราและที่อยู่ของหน้าที่ส่งโพสต์นั้นเท่ากัน
{
$passDB = md5($passDB);//เข้ารหัสรหัสผ่านที่ป้อน
$resultlp = mysql_query("SELECT login,pass FROM user WHERE login="$loginDB"");//เราแสดงข้อมูลล็อกอินและรหัสผ่านจากฐานข้อมูล
$log_and_pass = mysql_fetch_array($resultlp);
If($log_and_pass != "")//ถ้าผลลัพธ์ถูกส่งออกจากฐานข้อมูล
{
if($loginDB == $log_and_pass AND $passDB == $log_and_pass)//หากข้อมูลที่กรอกตรงกับข้อมูลจากฐานข้อมูล
{
$_SESSION["$logSESS"] = $log_and_pass;//สร้างตัวแปรโกลบอล
header("location: index.php");//โอนผู้ใช้ไปที่หน้าหลัก
ออก;
}
else//หากข้อมูลที่ป้อนไม่ตรงกับข้อมูลจากฐานข้อมูล
{
ออก;
}
}
else//หากไม่พบผู้ใช้ดังกล่าวในฐานข้อมูล
{
header("location: login.php");//โอนไปยังแบบฟอร์มการอนุญาต
ออก;
}
}
else //หากคำขอถูกส่งจากที่อยู่อื่น
{
header("location: login.php");//โอนไปยังแบบฟอร์มการอนุญาต
ออก;
}
}
else//หากเข้าสู่ระบบและรหัสผ่านไม่ถูกต้อง
{
header("location: login.php");//โอนไปยังแบบฟอร์มการอนุญาต
ออก;
}
}
//การอนุญาต
โค้ดส่วนนี้ถูกแทรกลงในไฟล์ login.php แทนที่จะเป็นบรรทัดเหล่านี้
สคริปต์ทำงานอย่างไร? เริ่มต้นด้วยการทำลายตัวแปรด้วยการเข้าสู่ระบบและรหัสผ่านที่สร้างโดยวิธี GET (ถ้ามี) จากนั้นเข้าสู่ระบบและรหัสผ่านจะถูกตรวจสอบความถูกต้องโดยใช้นิพจน์ทั่วไป
ที่อยู่ที่ผู้ใช้มาก็ถูกสร้างขึ้นเช่นกัน นั่นคือที่อยู่ที่ผู้ใช้มาควรเป็นดังนี้:
http://yoururl.ru/login.php
และภายหลังการจัดขบวนแล้ว ดังนี้
http://yoururl.ru/
ที่อยู่นี้ถูกเปรียบเทียบกับที่อยู่จากตัวแปร $server_root ที่เราประกาศในการเชื่อมต่อฐานข้อมูล (ไฟล์ db.php)
หากเงื่อนไขอย่างน้อยหนึ่งข้อไม่ทำงาน ผู้ใช้จะถูกเปลี่ยนเส้นทางกลับไปยังแบบฟอร์ม
ตอนนี้ถ้าคุณเข้าสู่หน้าต่างแบบฟอร์ม
เข้าสู่ระบบ - ผู้ดูแลระบบ
รหัสผ่าน - 123456
นี่จะนำคุณไปที่แผงผู้ดูแลระบบ หากคุณป้อนชื่อผู้ใช้หรือรหัสผ่านผิด คุณจะถูกเปลี่ยนเส้นทางกลับไปยังแบบฟอร์ม
ปุ่มออก
ตอนนี้เราจะต้องแก้ไขเทมเพลตหลักของแผงผู้ดูแลระบบ เราจะแทรกลิงก์ไปยังสคริปต์ทางออกลงไป ดังนั้นเราจะเพิ่มลิงก์ไปยังหน้าหลักของแผงผู้ดูแลระบบลงในเทมเพลตด้วย เราจะตรวจสอบให้แน่ใจว่าเมื่อเราคลิกที่โลโก้ในแผงผู้ดูแลระบบ เราจะถูกโอนไปยังหน้าหลัก (แน่นอนว่าไม่จำเป็น)
นี่คือโค้ดชิ้นใหม่ที่ฉันแทรก แทนที่จะเป็นโค้ดเก่า ลงในเทมเพลต ดัชนี.html
ยินดีต้อนรับสู่แผงผู้ดูแลระบบ (ออกจากระบบ)
ตอนนี้เรามาสร้างไฟล์ใหม่เรียกมันว่า exit.phpและวางไว้ในโฟลเดอร์ ผู้ดูแลระบบ- นี่คือรหัสไฟล์
session_start();//เริ่มเซสชัน
unset ($_SESSION["$logSESS"]);//ลบตัวแปรโกลบอลที่ลงทะเบียนไว้
session_destroy();//ทำลายเซสชัน
header("location: ../");//เปลี่ยนเส้นทางไปยังหน้าหลักของส่วนผู้ใช้ของบล็อก
ออก;
?>
ที่นี่แต่ละบรรทัดมีความคิดเห็น ดังนั้นคุณจึงสามารถเข้าใจได้
บทสรุป
นี่คือจุดที่ฉันต้องพัฒนา CMS ที่ง่ายที่สุดใน PHP ให้เสร็จสิ้น หากนี่คือโพสต์แรกที่คุณกำลังอ่านในบล็อกนี้ ต่อไปนี้คือรายการบทความทั้งหมดที่เกี่ยวกับการพัฒนาบล็อกตั้งแต่เริ่มต้น ในไม่ช้าฉันจะเปิดส่วน "การปรับปรุง" และทรมานโครงการของเราต่อไป ดังนั้นสมัครรับข่าวสารและรอโพสต์ใหม่!
หากคุณมีคำถามใดๆ อย่าลังเลที่จะถามพวกเขา เรายินดีที่จะตอบ (แน่นอนว่า หากฉันสามารถตอบคำถามของคุณได้)
ขอให้โชคดี นั่นคือทั้งหมดสำหรับวันนี้!
ในบทความล่าสุดเราได้พูดคุยกับคุณ อย่างไรก็ตาม บ่อยครั้งที่คุณต้องจัดการไซต์: เพิ่มเนื้อหาใหม่ จัดการผู้ใช้ โหวต แน่นอนว่าสามารถทำได้โดยผ่าน PHPMyAdminแต่นี่ไม่สะดวกมากดังนั้น การตัดสินใจที่ดีจะ - สร้างแผงผู้ดูแลระบบสำหรับไซต์- และคุณจะได้เรียนรู้วิธีการทำเช่นนี้ในบทความนี้
เรามาอธิบายลำดับของการกระทำที่ต้องดำเนินการอีกครั้ง:
- จัดวางหน้าเว็บไซต์ทั้งหมด- โดยหลักการแล้วคุณสามารถทำได้โดยไม่ต้องออกแบบเลย แต่ต้องมีโครงสร้างเบื้องต้น นั่นคือข้อมูลแบบตารางควรอยู่ในตาราง และไม่ใช่ข้อความต่อเนื่องกัน
- ตัดสินใจว่าคุณต้องการดูข้อมูลใดในแผงผู้ดูแลระบบ- ตัวอย่างเช่น คุณอาจต้องดูผู้ใช้ไซต์ของคุณ บทความของคุณ หรือแบบสำรวจบางส่วน
- สร้างชั้นเรียนเพื่อจัดการแผงผู้ดูแลระบบ- ควรสร้างวิธีการที่นี่เพื่อให้คุณสามารถเลือกจากตารางที่หลากหลาย รวมถึงเพิ่มและแก้ไขบันทึกในตารางเหล่านั้น และคุณจำเป็นต้องสร้างวิธีการที่คล้ายกันสำหรับตารางทั้งหมดที่คุณต้องการใช้งาน แผงผู้ดูแลระบบ(คุณควรเลือกสิ่งนี้แล้วในย่อหน้าก่อนหน้า) ตัวอย่างเช่นตัวอย่างที่ง่ายที่สุดกับผู้ใช้ ชุดวิธีการขั้นต่ำที่จำเป็น: การเลือกผู้ใช้ทั้งหมด, เพิ่มผู้ใช้ใหม่, เปลี่ยนผู้ใช้- แน่นอนว่างานทั้งหมดเหล่านี้ควรถูกนำไปใช้โดยคุณแล้วเมื่อสร้างเอ็นจิ้นสำหรับไซต์ ดังนั้นที่นี่คุณจะต้องหันไปใช้คลาสเก่าเท่านั้น และอาจเปลี่ยนแปลงข้อมูลเฉพาะสำหรับ แผงผู้ดูแลระบบ.
- แบ่งเทมเพลตเว็บไซต์ของคุณออกเป็นส่วนๆและคัดลอกเป็นไฟล์แยกกันที่มีนามสกุล ทีพีแอล- ใส่องค์ประกอบเทมเพลตด้วย เช่น: " ผู้ใช้ (ชื่อผู้ใช้) ที่ลงทะเบียน (regdate)" นี่เป็นเพียงตัวอย่าง และโดยทั่วไปแล้ว ข้อมูลจะสะดวกกว่าในการแสดงในตาราง
- สร้างคลาสที่จะทำการทดแทนแทนที่จะเป็นองค์ประกอบเทมเพลต ข้อมูลที่เกี่ยวข้อง
- รวบรวมหน้าทั้งหมดของแผงผู้ดูแลระบบทีละหน้าเว็บไซต์ของคุณใช้คลาสที่สร้างขึ้นในย่อหน้าก่อนหน้า
- หากต้องการคุณสามารถออกแบบได้แม้ว่าแน่นอนว่าสิ่งนี้มีไว้สำหรับคุณและผู้ดูแลระบบคนอื่นๆ เท่านั้น
อย่างที่คุณเห็นล่าสุด 4 คะแนนจะเหมือนกับคะแนนที่คุณทำเมื่อสร้างเครื่องยนต์ ที่นี่ปริมาณงานจะลดลงอย่างมาก ดังนั้นฉันคิดว่าคุณสามารถจัดการได้โดยไม่มีปัญหาใดๆ
ฉันนั่งอยู่บนเว็บไซต์ของฉันประมาณสามเดือนโดยไม่มี แผงผู้ดูแลระบบการเพิ่มวัสดุใหม่โดยตรงผ่านฐานข้อมูล พูดตามตรงฉันใช้เวลาเพิ่มมาก แต่เมื่อไร สร้างแผงผู้ดูแลระบบบนเว็บไซต์ของฉันจากนั้นกระบวนการจัดการไซต์ก็ง่ายขึ้นอย่างมาก ดังนั้นฉันขอแนะนำให้คุณทำเช่นเดียวกัน
ตัวอย่างการสร้าง แผงผู้ดูแลระบบคุณจะพบกับหลักสูตรการฝึกอบรมนี้:
งานสร้างระบบจัดการเนื้อหา (CMS) อาจทำให้มือใหม่สับสนได้ นักพัฒนา PHP- แต่มารไม่น่ากลัวเท่าทาสี! ในชุดบทเรียนนี้ เราจะสร้างระบบที่เรียบง่ายแต่มีฟังก์ชันการทำงานครบถ้วนตั้งแต่เริ่มต้น
ในระหว่างกระบวนการ คุณจะได้เรียนรู้วิธีสร้างฐานข้อมูลและตาราง MySQL การทำงานกับออบเจ็กต์ ค่าคงที่ รวม เซสชัน และเครื่องมือ PHP อื่นๆ นอกจากนี้ เราจะแสดงวิธีแยกตรรกะของแอปพลิเคชันออกจากการนำเสนอ และทำให้โค้ด PHP ปลอดภัยยิ่งขึ้น และคุณยังจะค้นพบสิ่งอื่น ๆ อีกมากมายที่จะเป็นประโยชน์ในการสร้างระบบความฝันของคุณเอง
คุณสามารถดูแอปพลิเคชันที่เสร็จสมบูรณ์แล้วได้ในหน้าสาธิต (เพื่อความปลอดภัย โหมดอ่านอย่างเดียวจะถูกเปิดใช้งาน ดังนั้นคุณจะไม่สามารถเพิ่ม แก้ไข หรือลบบทความได้) คุณยังสามารถดาวน์โหลดได้ รหัสเต็ม PHP ของ CMS เล็กๆ ของเราพร้อมความคิดเห็นที่แปลแล้ว
บันทึก:หากต้องการศึกษาเนื้อหาบทเรียน คุณจะต้องมีเว็บเซิร์ฟเวอร์ Apache ด้วย โมดูล PHPและเซิร์ฟเวอร์ MySQL ในการทำงานต่อไป คอมพิวเตอร์ท้องถิ่นคุณสามารถใช้หนึ่งในเครื่องมือสำหรับนักพัฒนาเว็บ: XAMPP (on ภาษาอังกฤษ), Denwer, เปิดเซิร์ฟเวอร์ หรืออื่นๆ
หมายเหตุด้านความปลอดภัย
ในโครงการจริง ควรวาง config.php ไว้ที่ใดที่หนึ่งนอกไดเรกทอรีรากของเว็บไซต์ เนื่องจากไฟล์มีชื่อผู้ใช้และรหัสผ่าน โดยปกติแล้วโค้ด PHP จะไม่สามารถดูได้ในเบราว์เซอร์ แต่บางครั้งเนื่องจากการกำหนดค่าเว็บเซิร์ฟเวอร์ไม่ถูกต้อง โค้ดจึงสามารถเข้าถึงได้ คุณสามารถใช้ฟังก์ชัน hash() เพื่อแฮชรหัสผ่านและจัดเก็บแฮชใน config.php แทนรหัสผ่านแบบข้อความธรรมดา จากนั้น เมื่อลงทะเบียนผู้ใช้ คุณสามารถใช้ฟังก์ชัน hash() ได้อีกครั้งเพื่อเข้ารหัสรหัสผ่านที่ป้อน และเปรียบเทียบผลลัพธ์กับแฮชที่บันทึกไว้ใน config.php
ในบทช่วยสอนถัดไป เราจะสร้างคลาสหลักของแอปพลิเคชันของเรา - บทความ