ตัวอย่างโค้ด พร้อมคำอธิบายต่อไปนี้ เป็นแนวทางอย่างง่ายเพื่อศึกษา
การทำงานของระบบหมวดหลักหมวยย่อย ที่มีความสัมพันธ์กัน โดยในตัวอย่าง
จะเป็นการสมมติโดยใช้ตัวแปร 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>
ตัวอย่างข้างต้น จะทำให้เราเข้าใจรูปแบบอย่างง่าย ของการเพิ่ม ลบ
แก้ไข ข้อมูลในฐานข้อมูล แบบทั่วไป และแบบการอ้างอิงกับตารางที่มีความ
สัมพันธ์กัน สามารถนำไปประยุกต์หรือเป็นแนวทางเพิ่มเติมได้ตามต้องการ