วันอังคารที่ 10 มกราคม พ.ศ. 2555

[CakePHP] สอนทำระบบสมัครสมาชิก (Register) ด้วยCakePHP

         บทความนี้จะสอนท่านทำระบบสมัครสมาชิกด้วยCakePHP เพื่อให้เห็นการใช้งาน Controller,Model,View และ การใช้ Validation  ซึ่งจะเป็นฟังก์ชั่นที่เรียกใช้ในส่วนของModel เพื่อใช้ตรวจสอบความถูกต้องจากการกรอกข้อมูลในฟอร์มสมัครสมาชิกครับ แต่คุณต้องเรียนรู้พื้นฐานการใช้งานต่างๆของCakePHP จากเว็บ www.cakephp.in.th ก่อนครับ จะทำให้ไม่งงกับCodeของโปรแกรมที่ผมจะสอน เนื่องจากผมจะไม่สอนในระดับBasicครับ แต่จะข้ามไประดับAdvanceเลย เพื่อให้เห็นภาพการนำCakePHPมาใช้งานจริงกับโปรเจ็คของเราครับ

          อันดับแรก  ดูวิธีสร้างฐานข้อมูลและวิธีเชื่อมต่อกับฐานข้อมูลได้จากที่นี่ และให้สร้างไฟล์ขึ้นมาดังรูป

1.ให้สร้างไฟล์ user_controller.php ใน app/Controller เพราะเทเบิลในฐานข้อมูลของเราชื่อ users ครับ ให้พิมพ์Codeดังนี้
<?php class UsersController extends AppController {
 public $name = 'Users';
 public $helpers = array("Html","Form");
 public function register() {
   if ($this->request->is('post')) {
           if ($this->User->save($this->request->data)) {
                $this->Session->setFlash('สมัครสมาชิกเรียบร้อยแล้ว');
                $this->redirect(array('action' => 'register'));
   }
  }
 }
}
?>
2.ให้สร้างไฟล์ user.php ใน app/Model ให้พิมพ์Codeดังนี้
<?php class User extends AppModel{
  public  $name = 'User';
  public  $validate = array(
   'username' => array (
    'notEmpty'=>array(
        'rule' => 'notEmpty','message'=>'กรุณากรอกUsername'
    ),'between'=>array(
   'rule'=>array('between',5,10),'message'=>'กรอกUsernameระหว่าง 5 - 10 ตัวอักษรเท่านั้น'//,'allowEmpty' => true
  ),'isUnique'=>array(
   'rule'=>'isUnique','message'=>'Username นี้มีผู้ใช้งานแล้ว'
  )
 ),'password'=>array(
  'notEmpty'=>array(
   'rule' => 'notEmpty','message'=>'กรุณากรอกPassword'
  ),'minLength'=>array(
   'rule'=>array('minLength', '5'),'message'=>'กรอกรหัสผ่านไม่น้อยกว่า 5 ตัวอักษร'
  ),'pass_equal'=>array(
   'rule' =>'chkPassEqual','message' => 'รหัสผ่านทั้งสองช่องไม่ตรงกัน'
  )
 ),'email'=>array(
  'notEmpty'=>array(
   'rule' => 'notEmpty','message'=>'กรุณากรอกอีเมล'
  ),'chkEmail'=>array(
   'rule'=>array('email',true),'message'=>'กรุณากรอกอีเมลให้ถูกต้อง'
  )
 ),'name'=>array(
  'notEmpty'=>array(
   'rule' => 'notEmpty','message'=>'กรุณากรอกชื่อสกุลให้ถูกต้อง'
  )
 ),'tel'=>array(
  'notEmpty'=>array(
   'rule' => 'notEmpty','message'=>'กรุณากรอกเบอร์โทรศัพท์'
  ),'chkPhone'=>array(
   'rule'=>'numeric','message'=>'กรอกเบอร์โทรศัพท์ไม่ถูกต้อง ตัวอย่าง 0823232323'
  )
 ),'address'=>array(
  'notEmpty'=>array(
   'rule' => 'notEmpty','message'=>'กรุณากรอกที่อยู่ให้ชัดเจน'
  )
 )
);
 public function chkPassEqual(){//ตรวจสอบว่ารหัสผ่านทั้งสองช่องตรงกันหรือไม่
  if($this->data['User']['password']==$this->data['User']['password_confirm'])
  {
      return true;
  }
  return false;
 }
}
?>
3.สร้างโฟลเดอร์ users และไฟล์ register.ctp ใน app/View ให้พิมพ์Codeดังนี้
<h2>สมัครสมาชิก</h2>
<div style="float:left;width:450px;"> <?php echo $this->Form->create('User',array('action' => 'register'));?>
  <table>
    <tr>
      <td colspan="2"><?php echo $this->Form->input('username',array('label'=>'Username','style'=>'width:250px'));//หากไม่อยากให้แสดงlabel ให้ใช้คำสั่ง 'label'=>false?></td>
    </tr>
    <tr>
      <td><?php echo $this->Form->input('password',array('label'=>'รหัสผ่าน','type' => 'password'));?></td>
      <td><?php echo $this->Form->input('password_confirm',array('label'=>'ยืนยันรหัสผ่าน','type' => 'password'));?></td>
    </tr>
    <tr>
      <td colspan="2"><?php echo $this->Form->input('name',array('label'=>'ชื่อ-นามสกุล'));?></td>
    </tr>
    <tr>
      <td><?php echo $this->Form->input('tel',array('label'=>'เบอร์โทร'));?></td>
      <td><?php echo $this->Form->input('email',array('label'=>'อีเมล'));?></td>
    </tr>
    <tr>
      <td colspan="2"><?php
 echo $this->Form->input('address',array('label'=>'ที่อยู่','type'=>'textarea','escape' => false));
 echo $this->Form->end(__('สมัครสมาชิก', true));
 ?></td>
    </tr>
  </table>
</div>
เมื่อพิมพ์Codeทั้งหมดได้ถูกต้องแล้ว เวลาเรียกใช้งานให้พิมพ์URLดังนี้ http://localhost/cakephp/users/register  จะได้ผลลัพธ์ดังนี้

ไม่มีความคิดเห็น :

แสดงความคิดเห็น