สอน codeigniter ทำระบบสมัครสมาชิก

ระบบสมัครสมาชิก-4
ระบบสมัครสมาชิก-4

สอน 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

ดูวิธีการติดตั้ง 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);

ถ้ายังไม่เข้าใจหรืออ่านหลายรอบแล้วยังงงอยู่ ลองดาวน์โหลดโปรเจคตัวอย่างไปเปิดดูครับ น่าจะเห็นภาพมากขึ้น

ดาวน์โหลดตัวอย่างระบบสมัครสมาชิก CI