สอน codeigniter เข้าใจโครงสร้างของ CI ด้วยระบบสมัครสมาชิก
สอน code igniter เขียนระบบสมัครสมาชิกด้วย codeigniter framework แบบ Step By Step
ในบทความนี้เป็นการสอน codeigniter เหมาะสำหรับคนที่อยากจะใช้งาน codeigniter framework
แต่ไม่รู้จะเริ่มยังไง หรือบางที เริ่มลงมือเขียนโค๊ดแล้ว แต่ก็ยังไม่เข้าใจในการทำงานแบบ MVC ของ CI Framework
รองมาทำความเข้าใจกับเฟรมเวิร์คตัวนี้ ด้วยการสร้างโปรเจคแบบง่าย ๆ ดูกันครับ
1. ออกแบบและสร้างฐานข้อมูล
ให้ลองคิดดูว่าแบบฟอร์มสำหรับการสมัครสมาชิกหลัก ๆ แล้วควรจะมีข้อมูลส่วนไหนอยู่บ้าง จากนั้นให้เราสร้าง
ตารางฐานข้อมูลขึ้นมาและเพิ่ม field ต่าง ๆ เข้าไป ในที่นี้จะทดลองสร้างแค่ 5 field ดังนี้
- สร้างฐานข้อมูลตั้งชื่อว่า myweb กำหนด collection ให้เท่ากับ utf8_general_ci
- สร้างตาราง MySQL Table และตั้งชื่อว่า apps_member
- กำหนด field data สำหรับตาราง apps_member เท่ากับ 5
- ตั้งชื่อ field ทั้ง 5 field ดังนี้

- member_id มี type = int ไว้สำหรับเก็บไอดี ตั้งค่าเป็น primary key และ auto increment
- first_name มี type = vachar(100) ไว้เก็บชื่อของสมาชิก
- last_name มี type = vachar(100) ไว้เก็บนามสกุลของสมาชิก
- email มี type = vachar(100) ไว้เก็บอีเมลของสมาชิก
- timestamp มี type = timestamp ไว้เก็บวันเวลาที่สมัครสมาชิก มีค่า default เท่ากับ current_timestamp


2. ตั้งค่าการใช้งานฐานข้อมูล
ทำการติดตั้ง Codeigniter Framework
เสร็จแล้วเปิดไฟล์ application/config/database.php ตั้งค่าต่าง ๆ ดังนี้
'hostname' => 'localhost', 'username' => 'root', // username โปรแกรมจำลองเว็บเซิฟเวอร์ 'password' => 'root', // password โปรแกรมจำลองเว็บเซิฟเวอร์ 'database' => 'myweb', // ชื่อฐานข้อมูลที่เราสร้างไว้ก่อนหน้านี้
เสร็จแล้วเปิดไฟล์ application/config/config.php ค้นหาตัวแปร
$autoload['libraries'] = array();
เพิ่มการโหลดใช้งานการติดต่อฐานข้อมูลแบบอัตโนมัติโดยเปลี่ยนเป็น
$autoload['libraries'] = array('database');
3. สร้าง Register Controller สำหรับรับข้อมูล
สร้างไฟล์ Register.php และวางไว้ในโฟลเด้อ application/controllers/Register.php
โดยในไฟล์ Register.php ให้สร้าง Register Class และ Extends คลาส CI_Controller
และให้มีรูปแบบโครงสร้างของคลาสตามหลักของ CI Framework จะสามารถเขียนได้ดังนี้
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Register extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url')); // โหลดเฮลเปอร์ form และ url ของ ci มาใช้งาน
$this->load->library('form_validation'); // โหลดไลบรารี่ form_validation ของ ci มาใช้งาน
}
public function index()
{
$this->load->view('register_view'); // เข้ามาครั้งแรกให้โหลด register_view มาแสดง
}
public function validate()
{
$this->form_validation->set_rules('first_name', 'Username', 'required');
$this->form_validation->set_rules('last_name', 'Password', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('register_view');
}else{
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$email = $this->input->post('email');
}
}
}
ให้สังเกตุการทำงานในฟังก์ชั่น validate นะครับ ในฟังก์ชั่นนี้เราจะทำการกำหนดกฏเกณฑ์การตรวจสอบตัวแปร
ว่าตัวแปรอะไรบ้างที่จำเป็นต้องกรอกและตัวแปรไหนจำเป็นต้องมี format แบบไหน ตัวอย่างเช่นอีเมล จำเป็นจะต้อง
กรอข้อมูลที่เป็นรูปแบบของ email
4. สร้าง Register View สำหรับกรอกข้อมูลสมัครสมาชิก
หลังจากที่เราได้สร้าง Register Controller ไว้สำหรับรับข้อมูลจาก html form แล้วในขั้นตอนต่อไป
ให้สร้างไฟล์ register_view.php และวางไฟล์ไว้ในโฟลเด้อ application/views/register_view.php
เขียน html form สำหรับรับค่าข้อมูลการสมัครสมาชิกต่าง ๆ จากผู้ใช้งาน และกำหนด form_open
ให้ส่งค่าไปที่ Register Controller ในเมธอดที่ชื่อว่า validate ให้ลองเขียน html form ง่าย ๆ ดังนี้
<html>
<head>
<title>สมัครสมาชิก</title>
</head>
<body>
<?php echo form_open('register/validate'); ?>
<table>
<tr>
<td>First Name : </td>
<td><input type="text" name="first_name"/></td>
<td><?php echo form_error('first_name', '<div class="error">', '</div>'); ?></td>
</tr>
<tr>
<td>Last Name : </td>
<td><input type="text" name="last_name"/></td>
<td><?php echo form_error('last_name', '<div class="error">', '</div>'); ?></td>
</tr>
<tr>
<td>Email : </td>
<td><input type="text" name="email"/></td>
<td><?php echo form_error('email', '<div class="error">', '</div>'); ?></td>
</tr>
<tr>
<td colspan="1"></td>
<td><input type="submit" value="Register Now"/></td>
</tr>
</table>
</form>
</body>
</html>
5. สร้าง Register Model สำหรับบันทึกและคืนข้อมูล
ความเป็นจริงแล้ว ในขั้นตอนของการบันทึกข้อมูลที่ถูกส่งมากจาก Register_view เราสามารถทำได้ทันที
ในส่วนของ Register Controller โดยที่ไม่ต้องสร้าง Model ใด ๆ เลย เราสามารถบันทึกข้อมูล
ได้โดยการใช้คำสั่ง $this->db->insert() ได้ในฟังก์ชั่น validate ได้เลย ตัวอย่างเช่น
if ($this->form_validation->run() == FALSE)
{
$this->load->view('register_view');
}else{
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$email = $this->input->post('email');
$data = array(
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $email
);
$this->db->insert('apps_member', $data);
}
แต่ในบทความนี้ให้ทดลองสร้างคลาส Model_register.php ไว้ใน application/models/Model_register.php
จากนั้นให้สร้าง Method สำหรับบันทึกข้อมูลลงในเทเบิ้ล apps_member จะเขียนตัวอย่างคำสั่งต่าง ๆ ได้ดังนี้
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Model_register extends CI_Model {
public function add($data)
{
$this->db->insert('apps_member', $data);
return $this->db->insert_id();
}
}
จากกนั้นทำการโหลด Model_register เข้าไปใช้งานใน Controller Register.php
$this->load->model('model_register');
ทีนี้เราก็จะสามารถเรียกใช้เมธอด add ใน Model_register ได้ในลักษณะดังนี้
$data = array( 'first_name' => $first_name, 'last_name' => $last_name, 'email' => $email ); $this->model_register->add($data);
ถ้ายังไม่เข้าใจหรืออ่านหลายรอบแล้วยังงงอยู่ ลองดาวน์โหลดโปรเจคตัวอย่างไปเปิดดูครับ น่าจะเห็นภาพมากขึ้น
