ตัวอย่างโค้ด พร้อมคำอธิบายต่อไปนี้ เป็นแนวทางอย่างง่ายเพื่อศึกษา
การทำงานของระบบหมวดหลักหมวยย่อย ที่มีความสัมพันธ์กัน โดยในตัวอย่าง
จะเป็นการสมมติโดยใช้ตัวแปร array ที่เป็น ตัวแปร session
สามารถเป็นแนวทางสำหรับใช้ประยุกต์ กรณีใช้กับฐานข้อมูล ที่มีความสัมพันธ์
หมวดหลัก และหมวดย่อยได้
ก่อนศึกษารายละเอียดด้านใน ให้สร้างไฟล์ php แล้ว copy โค้ดต่อไปนี้
ไปทดลองรันดูการทำงาน ทั้ง
- การเพิ่ม ลบ แก้ไข หมวดหลัก
- การคลิกเข้าไปดูรายการในหมวดหลัก
- การเพิ่ม ลบ แก้ไข หมวดย่อย
โต้ด php สำหรับทดสอบ ใช้ session ทดสอบดูภาพรวม
ไฟล์ category.php
<?php session_start(); if(!isset($_SESSION['data_temp'])){ $_SESSION['data_temp']=null; } if(isset($_POST['reset_btn'])){ unset($_SESSION['data_temp']); header("Location:".$_SERVER['PHP_SELF']); exit; } if(isset($_GET['deleteID'])){ unset($_SESSION['data_temp']['topic'][$_GET['deleteID']]); $_SESSION['data_temp']['data'][$_GET['deleteID']]=null; header("Location:".$_SERVER['PHP_SELF']); exit; } if(isset($_POST['submit_btn']) && $_POST['submit_btn']!=""){ if(isset($_GET['editID']) && $_GET['editID']!=""){ if(isset($_POST['data1']) && $_POST['data1']!=""){ $_SESSION['data_temp']['topic'][$_GET['editID']]=$_POST['data1']; header("Location:".$_SERVER['PHP_SELF']); exit; } }else{ if(isset($_POST['data1']) && $_POST['data1']!=""){ $_SESSION['data_temp']['topic'][]=$_POST['data1']; $_SESSION['data_temp']['data'][]=null; header("Location:".$_SERVER['PHP_SELF']); exit; } } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div style="margin:auto;width:80%;"> <?php $more_action=""; $edit_data=""; if(isset($_GET['editID'])){ $more_action="?editID=".$_GET['editID']; $edit_data=$_SESSION['data_temp']['topic'][$_GET['editID']]; } ?> <br><br> <form action="<?=$more_action?>" method="post"> <input type="text" name="data1" id="data1" value="<?=$edit_data?>"> <input type="submit" name="submit_btn" value="Save"> <input type="submit" name="reset_btn" value="Clear"> </form> <?php if(!isset($_GET['editID'])){?> <ul> <?php if(isset($_SESSION['data_temp']['topic']) && count($_SESSION['data_temp']['topic'])>0){ foreach($_SESSION['data_temp']['topic'] as $k=>$v){ ?> <li> <?=$k?>. <a href="view.php?viewID=<?=$k?>"><?=$v?></a> <br> <a href="?editID=<?=$k?>">Edit</a> <a href="?deleteID=<?=$k?>">Delete</a> <hr style="border:0px;border-bottom:1px solid #EFEFEF;"> </li> <?php } } ?> </ul> <?php } ?> </div> </body> </html>
ไฟล์ view.php
<?php session_start(); if(!isset($_SESSION['data_temp'])){ $_SESSION['data_temp']=null; } if(isset($_GET['sub_deleteID'])){ unset($_SESSION['data_temp']['data'][$_GET['viewID']][$_GET['sub_deleteID']]); header("Location:".$_SERVER['PHP_SELF']."?viewID=".$_GET['viewID']); exit; } if(isset($_POST['submit_btn']) && $_POST['submit_btn']!=""){ if(isset($_GET['sub_editID']) && $_GET['sub_editID']!=""){ if(isset($_POST['data2']) && $_POST['data2']!=""){ $_SESSION['data_temp']['data'][$_GET['viewID']][$_GET['sub_editID']]=$_POST['data2']; header("Location:".$_SERVER['PHP_SELF']."?viewID=".$_GET['viewID']); exit; } }else{ if(isset($_POST['data2']) && $_POST['data2']!=""){ $_SESSION['data_temp']['data'][$_GET['viewID']][]=$_POST['data2']; header("Location:".$_SERVER['PHP_SELF']."?viewID=".$_GET['viewID']); exit; } } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div style="margin:auto;width:80%;"> <!-- จำลองเป็นหน้ารายละอียด--> <?php $more_action=""; $edit_data2=""; if(isset($_GET['sub_editID'])){ $more_action="&sub_editID=".$_GET['sub_editID']; $edit_data2=$_SESSION['data_temp']['data'][$_GET['viewID']][$_GET['sub_editID']]; } ?> <form action="?viewID=<?=$_GET['viewID']?><?=$more_action?>" method="post"> <a href="category.php"> Back : > </a> <?=$_SESSION['data_temp']['topic'][$_GET['viewID']]?> <br><br> หมวดย่อย <input type="text" name="data2" id="data2" value="<?=$edit_data2?>"> <input type="submit" name="submit_btn" value="Save"> </form> <?php if(!isset($_GET['sub_editID'])){?> <ul> <?php $ses_data2=$_SESSION['data_temp']['data'][$_GET['viewID']]; if(is_array($ses_data2) && count($ses_data2)>0){ foreach($ses_data2 as $k=>$v){ ?> <li> <?=$k?>. <?=$v?><br> <a href="?viewID=<?=$_GET['viewID']?>&sub_editID=<?=$k?>">Edit</a> <a href="?viewID=<?=$_GET['viewID']?>&sub_deleteID=<?=$k?>">Delete</a> <hr style="border:0px;border-bottom:1px solid #EFEFEF;"> </li> <?php } } ?> </ul> <?php } ?> </div> </body> </html>
ต่อไปจะเป็นกรณีการใช้งานกับฐานข้อมูล
โดยเราจะใช้วิธีการเชื่อมต่อแบบ
โดยเราจะใช้วิธีการเชื่อมต่อแบบ
mysqli แทน mysql ธรรมดา เพื่อรองรับในอนาคต
ดาวน์โหลดไฟล์ พร้อมใช้ ชื่อ db_connect.php ได้ที่
โครงสร้างฐานข้อมูลตัวอย่าง
CREATE TABLE IF NOT EXISTS `tbl_category` ( `category_id` int(5) NOT NULL, `category_name` varchar(150) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `tbl_subcategory` ( `subcategory_id` int(11) NOT NULL, `category_id` int(5) NOT NULL, `subcategory_name` varchar(150) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; ALTER TABLE `tbl_category` ADD PRIMARY KEY (`category_id`); ALTER TABLE `tbl_subcategory` ADD PRIMARY KEY (`subcategory_id`), ADD KEY `cat_id_index` (`category_id`); ALTER TABLE `tbl_category` MODIFY `category_id` int(5) NOT NULL AUTO_INCREMENT; ALTER TABLE `tbl_subcategory` MODIFY `subcategory_id` int(11) NOT NULL AUTO_INCREMENT;
ไฟล์ category.php
<?php session_start(); include("db_connect.php"); $mysqli=connect(); if(isset($_POST['reset_btn'])){ header("Location:".$_SERVER['PHP_SELF']); exit; } if(isset($_GET['deleteID'])){ delete("tbl_category"," category_id=".$_GET['deleteID']); // ลบหมวดหลัก delete("tbl_subcategory"," category_id=".$_GET['deleteID']); // ลบหมวดย่อย header("Location:".$_SERVER['PHP_SELF']); exit; } if(isset($_POST['submit_btn']) && $_POST['submit_btn']!=""){ if(isset($_GET['editID']) && $_GET['editID']!=""){ if(isset($_POST['data1']) && $_POST['data1']!=""){ $data=array( "category_name"=>$_POST['data1'] ); update("tbl_category",$data," category_id=".$_GET['editID']); // แก้ไขหมวดหลัก header("Location:".$_SERVER['PHP_SELF']); exit; } }else{ if(isset($_POST['data1']) && $_POST['data1']!=""){ $data=array( "category_id"=>null, "category_name"=>$_POST['data1'], ); insert("tbl_category",$data); // เพิ่มหมวดหลัก header("Location:".$_SERVER['PHP_SELF']); exit; } } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div style="margin:auto;width:80%;"> <?php //listfield("tbl_category"); // ถ้าต้องการแสดงรูปแบบข้อมูลสำหรับบันทึกและแก้ไขใช้ฟังก์ชั่นนี้ได้ $more_action=""; $edit_data=""; if(isset($_GET['editID'])){ $more_action="?editID=".$_GET['editID']; $q=" SELECT * FROM tbl_category WHERE category_id='".$_GET['editID']."' "; $result = $mysqli->query($q); // ทำการ query คำสั่ง sql $rs=$result->fetch_array(); $edit_data=$rs['category_name']; } ?> <br><br> <form action="<?=$more_action?>" method="post"> <input type="text" name="data1" id="data1" value="<?=$edit_data?>"> <input type="submit" name="submit_btn" value="Save"> <input type="submit" name="reset_btn" value="Clear"> </form> <?php if(!isset($_GET['editID'])){?> <ul> <?php // วนลูปแสดงรายการ $q=" SELECT * FROM tbl_category "; $result = $mysqli->query($q); // ทำการ query คำสั่ง sql $total=$result->num_rows; // นับจำนวนถวที่แสดง ทั้งหมด $i=1; while($rs=$result->fetch_array()){ // วนลูปแสดงข้อมูล ?> <li> <?=$i?>. <a href="view.php?viewID=<?=$rs['category_id']?>"> <?=$rs['category_name']?></a><br> <a href="?editID=<?=$rs['category_id']?>">Edit</a> <a href="?deleteID=<?=$rs['category_id']?>">Delete</a> <hr style="border:0px;border-bottom:1px solid #EFEFEF;"> </li> <?php $i++; } ?> </ul> <?php } ?> </div> </body> </html>
ไฟล์ view.php
<?php session_start(); include("db_connect.php"); $mysqli=connect(); if(isset($_GET['sub_deleteID'])){ delete("tbl_subcategory"," subcategory_id=".$_GET['sub_deleteID']); // ลบหมวดย่อย header("Location:".$_SERVER['PHP_SELF']."?viewID=".$_GET['viewID']); exit; } if(isset($_POST['submit_btn']) && $_POST['submit_btn']!=""){ if(isset($_GET['sub_editID']) && $_GET['sub_editID']!=""){ if(isset($_POST['data2']) && $_POST['data2']!=""){ $data=array( "subcategory_name"=>$_POST['data2'], ); update("tbl_subcategory",$data," subcategory_id=".$_GET['sub_editID']); // แก้ไข header("Location:".$_SERVER['PHP_SELF']."?viewID=".$_GET['viewID']); exit; } }else{ if(isset($_POST['data2']) && $_POST['data2']!=""){ $data=array( "subcategory_id"=>null, "category_id"=>$_GET['viewID'], "subcategory_name"=>$_POST['data2'], ); insert("tbl_subcategory",$data); // เพิ่มหมวดย่อย header("Location:".$_SERVER['PHP_SELF']."?viewID=".$_GET['viewID']); exit; } } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div style="margin:auto;width:80%;"> <?php //listfield("tbl_subcategory"); // ดึงข้อมูลหมวดหลัก กรณีต้องการใช้ค่าเพื่อแสดง หรืออ้างอิง $q=" SELECT * FROM tbl_category WHERE category_id='".$_GET['viewID']."' "; $result = $mysqli->query($q); // ทำการ query คำสั่ง sql $rs=$result->fetch_array(); $category_name=$rs['category_name']; $viewID=$rs['category_id']; $more_action=""; $edit_data2=""; if(isset($_GET['sub_editID'])){ $more_action="&sub_editID=".$_GET['sub_editID']; // ดึงข้อมูลหมวดย่อยสำหรับกรณีต้องการแก้ไข หรืออ้างอิง $q=" SELECT * FROM tbl_subcategory WHERE subcategory_id='".$_GET['sub_editID']."' "; $result = $mysqli->query($q); // ทำการ query คำสั่ง sql $rs=$result->fetch_array(); $edit_data2=$rs['subcategory_name']; } ?> <form action="?viewID=<?=$viewID?><?=$more_action?>" method="post"> <a href="category.php"> Back : > </a> <?=$category_name?> <br><br> หมวดย่อย <input type="text" name="data2" id="data2" value="<?=$edit_data2?>"> <input type="submit" name="submit_btn" value="Save"> </form> <?php if(!isset($_GET['sub_editID'])){?> <ul> <?php // วนลูปแสดงรายการ หมวดย่อย $q=" SELECT * FROM tbl_subcategory "; $result = $mysqli->query($q); // ทำการ query คำสั่ง sql $total=$result->num_rows; // นับจำนวนถวที่แสดง ทั้งหมด $i=1; while($rs=$result->fetch_array()){ // วนลูปแสดงข้อมูล ?> <li> <?=$i?>. <?=$rs['subcategory_name']?><br> <a href="?viewID=<?=$rs['category_id']?>&sub_editID=<?=$rs['subcategory_id']?>">Edit</a> <a href="?viewID=<?=$rs['category_id']?>&sub_deleteID=<?=$rs['subcategory_id']?>">Delete</a> <hr style="border:0px;border-bottom:1px solid #EFEFEF;"> </li> <?php $i++; } ?> </ul> <?php } ?> </div> </body> </html>
ตัวอย่างข้างต้น จะทำให้เราเข้าใจรูปแบบอย่างง่าย ของการเพิ่ม ลบ
แก้ไข ข้อมูลในฐานข้อมูล แบบทั่วไป และแบบการอ้างอิงกับตารางที่มีความ
สัมพันธ์กัน สามารถนำไปประยุกต์หรือเป็นแนวทางเพิ่มเติมได้ตามต้องการ