สอน 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);
ถ้ายังไม่เข้าใจหรืออ่านหลายรอบแล้วยังงงอยู่ ลองดาวน์โหลดโปรเจคตัวอย่างไปเปิดดูครับ น่าจะเห็นภาพมากขึ้น