PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

แนวทางการศึกษาหมวดหลักหมวดย่อย กับการเพิ่ม ลบ แก้ไขข้อมูล

21 July 2015 By


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

Tags:: php หมวดหลัก ฐานข้อมูล หมวดย่อย

เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   





URL สำหรับอ้างอิง