codeigniter กับ การเชื่อมต่อฐานช้อมูล และการเพิ่ม ลบ แก้ไข แสดงรายการ

เขียนเมื่อ 9 ปีก่อน โดย Ninenik Narkdee
ฐานข้อมูล codeigniter 3 database codeigniter

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ ฐานข้อมูล codeigniter 3 database codeigniter

ดูแล้ว 19,801 ครั้ง


สำหรับเนื้อหาตอนนี้ เรามาดูในเรื่องของการเชื่อมต่อกับฐานข้อมูล และการใช้งาน
ในรูปแบบอย่างง่าย
 
จากตอนที่แล้ว เราได้สร้างรูปแบบโครงสร้างไฟล์ระบบสมาชิกผู้ดูแลระบบ
 
การกำหนด routing เพิ่มเติม เพื่อจัดการ URL ในระบบ admin 
 
ก่อนอื่นให้เราสร้างตาราง สำหรับระบบสมาชิก admin ดังโครงสร้างต่อไปนี้
 
CREATE TABLE IF NOT EXISTS `tbl_admin` (
  `admin_id` int(3) unsigned NOT NULL,
  `admin_name` varchar(100) NOT NULL,
  `admin_pass` varchar(150) NOT NULL,
  `admin_adddate` datetime NOT NULL,
  `admin_lastlogin` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `tbl_admin`
  ADD PRIMARY KEY (`admin_id`);

ALTER TABLE `tbl_admin`
  MODIFY `admin_id` int(3) unsigned NOT NULL AUTO_INCREMENT;
 
 

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

 
ต่อไปให้เราไปที่ไฟล์ database.php ในโฟลเดอร์ apps > config 
และให้แก้ไขการเชื่อมต่อฐานข้อมูล ตามต้องการ  ดังนี้
 
$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'test',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
 
การใช้งานของเราในที่นี้จะมีแค่การปรับแต่ง 4 จุด
 
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'test',
 
สำหรับ hostname ใครใช้งาน port อื่นที่ไม่ใช่ 3306 ก็กำหนด port เข้าไปด้วย
เช่น
'hostname' => 'localhost:3316',
 
ส่วนค่าอื่นๆ ก็ตามแต่ละเครืองกำหนด ในที่นี้ username เป็น root password เป้น ค่าว่าง
และก็ชื่อฐานข้อมูล database เป็น test
 
 

การโหลด การเชื่อมต่อฐานข้อมูลอัตโนมัติ

 
ตามรูปแบบ project ของเรามีการใช้งานฐานข้อมูล และ session เสมอ ดังนั้น
เราจะทำการโหลด library ทั้งสองในอัตโนมัติ โดยจะทำที่ไฟล์ 
autoload.php ในโฟลเดอร์ apps > config 
 
โดยให้ปรับเพิ่มค่า library ที่ต้องการ ตามนี้
 
$autoload['libraries'] = array('database','session');
 
เมื่อกำหนด และบันทึกแล้ว เราก็สามารถเรีรยกใช้งาน การเชื่อมต่อฐานข้อมูล และ
ตัวแปร session ได้โดยไม่ต้องทำการโหลดการใช้งานด้วยคำสั่ง
 
$this->load->library('session');  // เรียกใช้งาน session
 
ดังนั้นในไฟล์ Admin,php เราสามารถ ปิดคำสั่งการโหลด session นี้ออกไปได้
 
<?php  
defined('BASEPATH') OR exit('No direct script access allowed');  
  
class Admin extends CI_Controller {  
    
    public function __construct()
    {
            parent::__construct();
//            $this->load->library('session');  // เรียกใช้งาน session
    }  
..........
.....

 

การแสดงรายการจากฐานข้อมูลด้วย Standard Query 

 
เมื่อเราทำการเชื่อมต่อกับฐานข้อมูลและตั้งค่าต่างๆ เรียบร้อยแล้ว ต่อไปเราจะมาที่ไฟล์
admin_user.php ในโฟลเดอร์ apps > views > admin
 
ดูในส่วนของ $action เท่ากับ null หรือก็คือหน้าที่แสดงรายการชื่อในตาราง tbl_admin
มาแสดงในตาราง โดยรูปแบบ Standard Query ใช้งานแบบ array จะเป็นดังนี้
 
<?php
$query = $this->db->query("SELECT * FROM tbl_admin");
foreach ($query->result_array() as $row)
{
        echo $row['admin_id']."<br>";
        echo $row['admin_name']."<br>";
        echo $row['admin_adddate']."<br>";
}                        
?>
 
ทีนี้เรามาแทรกเข้าไปในโครงสร้างตารางที่เราจัดรูปแบบการแสดงผลเอาไว้ จะได้เป้น
 
<?php if($action==null){?>
<a href="<?=base_url('admin/user/create')?>" class="btn btn-primary btn-sm">Create</a>
<br><br>
<table class="table table-striped table-bordered table-condensed">
    <thead>
        <tr>
            <th width="50" class="text-center">#</th>
            <th>Name</th>
            <th width="150" class="text-center">Last Login</th>
            <th width="150" class="text-center">Manage</th>
        </tr>
    </thead>
    <tbody>
        <?php
        $i_num=0;
        $query = $this->db->query("SELECT * FROM tbl_admin");
        foreach ($query->result_array() as $row){
            $i_num++;
        ?>
        <tr>
            <td class="text-center"><?=$i_num?></td>
            <td><?=$row['admin_name']?></td>
            <td class="text-center"><?=$row['admin_adddate']?></td>
            <td class="text-center">
                <a href="<?=base_url('admin/user/edit/'.$row['admin_id'])?>" class="btn btn-success btn-sm">
                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                </a>
                &nbsp;&nbsp;
                 <a href="<?=base_url('admin/user/delete/'.$row['admin_id'])?>" class="btn btn-danger btn-sm">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                </a>
                
            </td>
        </tr>
        <?php } ?>
    </tbody>
</table>
<?php } ?>
 
 

การเพิ่มข้อมูลลงฐานข้อมูลด้วย Standard Insert

 
ให้มาดูในส่วนของ $action เท่ากับ create หรือเงื่อนไขสำหรับการเพิ่มข้อมูลใหม่
รูปแบบการทำงานจะเป็นประมาณนี้
 
<?php
if(isset($_POST['btn_add']) && $_POST['btn_add']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $v_adddate = date("Y-m-d H:i:s");
    $sql = "INSERT INTO tbl_admin (
        admin_id,
        admin_name,
        admin_pass,
        admin_adddate
    ) VALUES (
        NULL,
        ".$this->db->escape($p_username).",
        ".$this->db->escape($p_password).",
        ".$this->db->escape($v_adddate)."
    )";
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
?>
 
ให้เราแทรกโค้ดดังกล่าวไปที่ส่วนของ $action เท่ากับ create ดังนี้
 
<?php if($action=="create"){?>
<?php
if(isset($_POST['btn_add']) && $_POST['btn_add']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $v_adddate = date("Y-m-d H:i:s");
    $sql = "INSERT INTO tbl_admin (
        admin_id,
        admin_name,
        admin_pass,
        admin_adddate
    ) VALUES (
        NULL,
        ".$this->db->escape($p_username).",
        ".$this->db->escape($p_password).",
        ".$this->db->escape($v_adddate)."
    )";
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<form action="<?=base_url('admin/user/create')?>" method="post">
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Create User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username">
        </td>
    </tr>
    <tr>
        <th width="120">Password:</th>
        <td>
        <input type="password" name="password" >
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_add" value="Add User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>
 
 

การแก้ไขข้อมูลในฐานข้อมูลด้วย Standard Update

 
สำหรับการแก้ไขข้อมูล จะอยู่ในส่วน $action เท่ากับ edit ในส่วนนี้ เราจะมีทำงานอยู่ 2 อย่าง
คือ ดึงข้อมูลบางข้อมูลมาแสดงในฟอร์ม อ้างอิงจาก $id ของข้อมูลที่ต้องการ หลังจากนั้น
เมื่อทำการกดปุ่มเพื่อบันทึกข้อมูล ก็จะมีการใช้งานการอัพเดท แก้ไขข้อมูลในฐานข้อมูลด้วย
รูปแบบ standard update จะได้โค้ดประมาณนี้
 
<?php
// เมื่อส่งข้อมูลฟอร์มเพื่อแก้ไขข้อมูล
if(isset($_POST['btn_edit']) && $_POST['btn_edit']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $sql = "UPDATE tbl_admin SET
    admin_name = ".$this->db->escape($p_username).",
    admin_pass = ".$this->db->escape($p_password)."
    WHERE admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){  // เมื่อแก้ไขข้อมูลเรียบร้อยแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
// แสดงข้อมูลของสมาชิกนั้นๆ ก่อนแก้ไข อ้างอิงจากตัวแปร $id 
$query = $this->db->query("SELECT * FROM tbl_admin WHERE admin_id=".$this->db->escape($id));
$row = $query->row_array();
?>
 
ให้เราปรับแก้ในส่วนของ $action เท่ากับ edit ดังนี้
 
<?php if($action=="edit"){?>
<?php
// เมื่อส่งข้อมูลฟอร์มเพื่อแก้ไขข้อมูล
if(isset($_POST['btn_edit']) && $_POST['btn_edit']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $sql = "UPDATE tbl_admin SET
    admin_name = ".$this->db->escape($p_username).",
    admin_pass = ".$this->db->escape($p_password)."
    WHERE admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
// แสดงข้อมูลของสมาชิกนั้นๆ ก่อนแก้ไข อ้างอิงจากตัวแปร $id 
$query = $this->db->query("SELECT * FROM tbl_admin WHERE admin_id=".$this->db->escape($id));
$row = $query->row_array();
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<form action="<?=base_url('admin/user/edit/'.$id)?>" method="post">
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Edit User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username" value="<?=$row['admin_name']?>">
        </td>
    </tr>
    <tr>
        <th width="120">Password:</th>
        <td>
        <input type="password" name="password" value="<?=$row['admin_pass']?>">
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_edit" value="Edit User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>
 

 

การลบข้อมูลจากฐานข้อมูลด้วย Standard Delete

 
ส่วนสุดท้ายคือการลบข้อมูล อยู่ในเงื่อนไข $action เท่ากับ delete โค้ดจะเป็นประมาณนี้
 
<?php if($action=="delete"){?>

<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php
if($id){
    $sql = "DELETE FROM tbl_admin WHERE admin_id='".$this->db->escape($id)."' ";
    if($this->db->query($sql)){
}
?>
<div class="bg-success text-center" style="padding:10px;">
    <p class="text-success">Delete data completed</p>
    <a href="<?=base_url('admin/user')?>" class="text-success">< Back > </a>
</div>
    <?php } ?>
<?php } ?>

</div>
 
 
ไฟล์ admin_user.php สำหรับการทำงาน การแสดงรายการ เพิ่ม ลบ แก้ไขข้อมุล จะได้เป็นดังนี้
 
<div class="container">
    
Admin User
<br><br>
<?php if($action==null){?>
<a href="<?=base_url('admin/user/create')?>" class="btn btn-primary btn-sm">Create</a>
<br><br>
<table class="table table-striped table-bordered table-condensed">
    <thead>
        <tr>
            <th width="50" class="text-center">#</th>
            <th>Name</th>
            <th width="150" class="text-center">Last Login</th>
            <th width="150" class="text-center">Manage</th>
        </tr>
    </thead>
    <tbody>
        <?php
        $i_num=0;
        $query = $this->db->query("SELECT * FROM tbl_admin");
        foreach ($query->result_array() as $row){
            $i_num++;
        ?>
        <tr>
            <td class="text-center"><?=$i_num?></td>
            <td><?=$row['admin_name']?></td>
            <td class="text-center"><?=$row['admin_adddate']?></td>
            <td class="text-center">
                <a href="<?=base_url('admin/user/edit/'.$row['admin_id'])?>" class="btn btn-success btn-sm">
                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                </a>
                &nbsp;&nbsp;
                 <a href="<?=base_url('admin/user/delete/'.$row['admin_id'])?>" class="btn btn-danger btn-sm">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                </a>
                
            </td>
        </tr>
        <?php } ?>
    </tbody>
</table>
<?php } ?>

<?php if($action=="create"){?>
<?php
if(isset($_POST['btn_add']) && $_POST['btn_add']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $v_adddate = date("Y-m-d H:i:s");
    $sql = "INSERT INTO tbl_admin (
        admin_id,
        admin_name,
        admin_pass,
        admin_adddate
    ) VALUES (
        NULL,
        ".$this->db->escape($p_username).",
        ".$this->db->escape($p_password).",
        ".$this->db->escape($v_adddate)."
    )";
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<form action="<?=base_url('admin/user/create')?>" method="post">
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Create User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username">
        </td>
    </tr>
    <tr>
        <th width="120">Password:</th>
        <td>
        <input type="password" name="password" >
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_add" value="Add User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>


<?php if($action=="edit"){?>
<?php
// เมื่อส่งข้อมูลฟอร์มเพื่อแก้ไขข้อมูล
if(isset($_POST['btn_edit']) && $_POST['btn_edit']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $sql = "UPDATE tbl_admin SET
    admin_name = ".$this->db->escape($p_username).",
    admin_pass = ".$this->db->escape($p_password)."
    WHERE admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
// แสดงข้อมูลของสมาชิกนั้นๆ ก่อนแก้ไข อ้างอิงจากตัวแปร $id 
$query = $this->db->query("SELECT * FROM tbl_admin WHERE admin_id=".$this->db->escape($id));
$row = $query->row_array();
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<form action="<?=base_url('admin/user/edit/'.$id)?>" method="post">
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Edit User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username" value="<?=$row['admin_name']?>">
        </td>
    </tr>
    <tr>
        <th width="120">Password:</th>
        <td>
        <input type="password" name="password" value="<?=$row['admin_pass']?>">
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_edit" value="Edit User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>

<?php if($action=="delete"){?>

<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php
if($id){
    $sql = "DELETE FROM tbl_admin WHERE admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){
}
?>
<div class="bg-success text-center" style="padding:10px;">
    <p class="text-success">Delete data completed</p>
    <a href="<?=base_url('admin/user')?>" class="text-success">< Back > </a>
</div>
    <?php } ?>
<?php } ?>

</div>
 
 
การใช้งานฐานข้อมูล และการจัดการข้อมูล ทั้งการแสดง การเพิ่มข้อมูล การแก้ไขข้อมูล และ
การลบข้อมูล ด้วยรูปแบบ standard คร่าวๆ อย่างง่าย ก็จะเป็นไปประมาณนี้ เนื้อหาข้างต้นเป็นแนวทาง
สำหรับประยุกต์และศึกษาเพิ่มเติม 
 
สำหรับการใช้งานคำสั่งหรือฟังก์ชั่นในรูปแบบของ codeigniter คงได้พูดถึงในลำดับต่อๆ ไป


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ













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





คำแนะนำ และการใช้งาน

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


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ