สำหรับเนื้อหาตอนนี้ เรามาดูในเรื่องของการเชื่อมต่อกับฐานข้อมูล และการใช้งาน
ในรูปแบบอย่างง่าย
จากตอนที่แล้ว เราได้สร้างรูปแบบโครงสร้างไฟล์ระบบสมาชิกผู้ดูแลระบบ
การกำหนด routing เพิ่มเติม เพื่อจัดการ URL ในระบบ admin
https://www.ninenik.com/content.php?arti_id=665 via @ninenik
ก่อนอื่นให้เราสร้างตาราง สำหรับระบบสมาชิก 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>
<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>
<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 คงได้พูดถึงในลำดับต่อๆ ไป