CodeIgniter Generator การส่งค่าไปประมวลผลที่ Controller ด้วย AJAX เพื่อคำนวณอายุตามวันเกิดที่เลือก

โดย SONGCHAI SAETERN
ตัวอย่างการเพิ่มอีเวนต์ On Change ให้กับ DatePicker เพื่อส่งค่าวันที่ไปประมวลผลใน Controller ผ่าน AJAX เพื่อหาอายุตามวันที่เลือก



เพิ่มฟังก์ชั่นที่ไฟล์ application/helpers/ci_utilities_helper.php

function ci_date_diff($start_date, $end_date = ''){
if($end_date == ''){
$end_date = date('Y-m-d');
}
$datetime1 = new DateTime($start_date);
$datetime2 = new DateTime($end_date);
$interval = $datetime1->diff($datetime2);
$diff = array();
$diff['year'] = $interval->format('%y');
$diff['month'] = $interval->format('%m');
$diff['day'] = $interval->format('%d');
$diff['hour'] = $interval->format('%h');
$diff['min'] = $interval->format('%i');
$diff['second'] = $interval->format('%s');
return $diff;
}


เพิ่มฟังก์ชั่นใน Controller ของโมดูลที่เราสร้างขึ้นมา เช่น
application/modules/test/controllers/Product.php 


public function get_age()
{
$thai_date = $this->input->post('select_date', TRUE);
$start_date = setDateToStandard($thai_date);
$end_date = date('Y-m-d');
$arr = ci_date_diff($start_date, $end_date);
echo "$arr[year] ปี $arr[month] เดือน $arr[day] วัน";
}



ที่ไฟล์ JavaScript ของโมดูลที่เราสร้างมา ให้เพิ่มโค้ดนี้ไว้ก่อน setDatePicker() ที่เป็นค่าเริ่มต้น
#order_date  คือ ไอดีของ INPUT ที่เป็นวันที่
#display_age คือ ไอดีของ Element ที่เราจะนำค่าอายุไปแสดง


// คำนวณอายุผ่าน AJAX (ต้องเอาไว้ก่อน setDatePicker() ทั่วไป )
setDatePicker('#order_date', {
yearRange : "-100:+0",
onSelect : Product.getAge('#order_date', '#display_age')
});


เพิ่มอีกคำสั่งเพื่อให้มีการคำนวณใหม่ เมื่อเปลี่ยนแปลงค่า
// Event On Change
$(document).on('change','#order_date', function(){
Product.getAge('#order_date', '#display_age') // <-- มีผลเมื่อมีการเปลี่ยนแปลง
});


ส่วนของฟังก์ชั่น Product.getAge()
Product คือชื่อเดียวกับ Controller จะเปลี่ยนไปตามการตั้งค่า Generate ในหน้า MVC


getAge: function(elem_date, elem_loading){
var obj_loading = $(elem_loading);
loading_on(obj_loading);
var frm_action = site_url('test/product/get_age');
var frm_data = 'select_date=' + $(elem_date).val();
frm_data += '&' + csrf_token_name + '=' + $.cookie(csrf_cookie_name);
$.ajax({
method: 'POST',
url: frm_action,
data : frm_data,
success: function (results) {
$(obj_loading).html(results);
},
error : function(jqXHR, exception){
loading_on_remove(obj_loading);
ajaxErrorMessage(jqXHR, exception);
}
});
}




ส่วนที่จะต้องแก้ไขก็คือ

var frm_action = site_url('test/product/get_age');


test/product/get_age  เป็นเพียงตัวอย่าง ต้องแก้ไขให้ตรงกับ URL ของหน้าเว็บที่เราสร้าง และฟังก์ชั่นที่เพิ่มเติมใน Controller








สรุปตำแหน่งของฟังก์ชั่น

การสร้างอีเวนต์ On Change ให้กับ Datepicker (จะต้องวางไว้ก่อนบรรทัด setDatePicker('.datepicker');)


ส่วนของชื่อ Class จะเปลี่ยนไปตาม Controller ของเรา (เช่นโมดูล Product หรือโมดูล Employee)



ส่วนของฟังก์ชั่น getAge (หรือฟังก์ชั่นใดๆที่เพิ่มขึ้น) ต้องอยู่ในคลาสที่สร้าง และต้องไม่ลืมเติม , (คอมม่า) ถ้าฟังก์ชั่นก่อนหน้านั้น ยังไม่มี (เครื่องหมายต่อฟังก์ชั่น)

ย้ายไปก่อนบรรทัด $(document).ready(function() {


อย่าลืมเปลี่ยน URL ให้ตรงกับ Controller ของเราด้วย


ส่วนของ Controller สร้างฟังก์ชั่น get_age() เพื่อคำนวณอายุ


PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

การเปลี่ยนแปลง Title Tag ของ Website ใน PHP CI MANIA

โดย SONGCHAI SAETERN
ตัวอย่างการเปลี่ยน Title ของหน้าเว็บในแต่ละหน้า


ที่แท็ก <title></title> ในไฟล์ homepage_view.php กำหนดเป็น {page_title}


การวางไว้ส่วนของฟังก์ชั่น __construct() จะมีผลกับทุกหน้าของ Controller นั้นๆ


หน้าค้นหา แสดงรายการ


หน้าแสดงรายละเอียด


หน้าแบบฟอร์มเพิ่มข้อมูล

หน้าแบบฟอร์มแก้ไขข้อมูล



นอกจากที่ยกตัวอย่างมานี้ หากต้องการแสดงในหน้าอื่นๆ ก็สามารถนำไปวางไว้ในตำแหน่งก่อนที่จะถึงบรรทัด $this->render_view()










PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

PHP Fast Coding สร้างฟังก์ชั่น ตรวจสอบค่าซ้ำ (UNIQUE KEY) ก่อนเพิ่มข้อมูล

โดย SONGCHAI SAETERN
เริ่มจากการเพิ่มส่วนของการเรียกฟังก์ชั่นใหม่ที่ใช้ตรวจสอบค่าซ้ำ เช่น

$message .= $this->formValidateUser();

คือการตรวจสอบชื่อ User ซ้ำกันหรือไม่


สร้างฟังก์ชั่น formValidateUser() ตรวจสอบ User


โดยที่เขียนเงื่อนไขการค้นหา ด้วย User ที่ผ่านค่า POST มา ถ้าพบแสดงว่าชื่อซ้ำกัน



ตัวอย่างโค้ดตรวจสอบ User ซ้ำ



public function formValidateUser()
{
$message = '';

$username = $this->input->post('username', TRUE);

$this->Portfolio->set_table_name('YOUR_TABLE_USER');
$this->Portfolio->set_where("username = '$username'");
$count = $this->Portfolio->count_record();
if($count > 0){
$message .= "ชื่อ $username ซ้ำกัน";
}
return $message;
}



หากต้องการสร้างฟังก์ชั่นที่เช็คพร้อมกันมากกว่า 1 ฟิลด์ ให้เพิ่มตัวแปรรับค่า POST และเพิ่มเงื่อนไขในส่วนของ WHERE ตามจำนวนฟิลด์ที่ต้องการ

public function formValidateBooking()
{
$message = '';
$staff_name = $this->input->post('staff_name', TRUE);
$booking_start_date = $this->input->post('booking_start_date', TRUE);
$booking_start_date = setDateToStandard($booking_start_date);//กรณีต้องแปลง พ.ศ. เป็น ค.ศ.
  
$this->Work->set_table_name('tb_booking');
//DATE(booking_start_date) กรณีที่ฟิลด์มีเวลาอยู่ด้วย แต่ต้องการเช็คแค่วันที่
$this->Work->set_where("staff_name = '$staff_name' AND DATE(booking_start_date) = '$booking_start_date' ") ;
  
$count = $this->Work->count_record();
//echo $this->db->last_query();// แสดง SQL
if($count > 0){
  $message .= "คุณ $staff_name ไปราชการวันที่ $booking_start_date ซ้ำกันครับ";
}
return $message;
}








PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

phpMyAdmin ขั้นตอนการกำหนด UNIQUE KEY ให้กับตาราง MySQL ที่ฟิลด์ต้องไม่ซ้ำกัน

โดย SONGCHAI SAETERN
ถ้าใช้เครื่องมือจัดการฐานข้อมูลด้วย phpMyAdmin การจะกำหนดให้ฟิลด์ที่มีค่าไม่ซ้ำกันเป็น UNIQUE KEY นั้นจะสามารถทำได้ดังต่อไปนี้


1. คลิกที่แท็ป Structure เพื่อปรับแต่งโครงสร้างตาราง เลื่อนไปยังด้านล่าง จะมีส่วนของการกำหนด Indexes เราจะเพิ่มแก้ไขฟิลด์ให้เป็น PRIMARY หรือ UNIQUE ได้จากการกดปุ่ม Go


2. ตั้งชื่อ Index เลือกประเภทเป็น UNIQUE และระบุฟิลด์ที่ต้องการ จากนั้นก็กดปุ่ม GO


3. เมื่อการเพิ่ม UNIQUE เรียบร้อย จะพบรายการใหม่ขึ้นมาต่อท้าย






PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

CodeIgniter Generator สร้างเงื่อนไขการจัดเรียงอ้างอิงเลขตัวท้ายด้วยฟังก์ชั่น RIGHT()

โดย SONGCHAI SAETERN
เริ่มจากการกำหนดฟิลด์ที่ต้องการจัดเรียงในแท็ป Views ส่วนของตารางรายการ (list_view.php)



แก้ไขโค้ดที่ Model ฟังก์ชั่น read() สำหรับการค้นหาหน้า List view


$order_by = '';
if($this->order_field != ''){
$order_field = $this->order_field;
$order_sort = $this->order_sort;
// Order by with Function if($order_field == 'portfolio_subject'){
$order_by = "RIGHT($this->my_table.portfolio_subject, 3) $order_sort";
}else{
$order_by = " $this->my_table.$order_field $order_sort";
}
}


ก็จะได้การจัดเรียงด้วยเลขตัวท้าย



วิดีโอตัวอย่างขั้นตอนการแก้ไขโค้ดเพื่อจัดเรียงด้วยฟังก์ชั่น RIGHT()






PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

วิธีการส่งข้อมูลการตั้งค่า MVC เพื่อตรวจสอบการทำงานของ PHP CI MANIA (CodeIgniter Generator)

โดย SONGCHAI SAETERN
เมื่อการทำงานของระบบ PHP CI MANIA เกิดข้อผิดพลาด สามารถส่งข้อมูลให้แอดมินตรวจสอบได้ตามขั้นตอนดังต่อไปนี้

1) แคปเจอร์หน้าจอการตั้งค่า MVC และ บันทึกการตั้งค่า ให้เรียบร้อย


2) ทำการ Export ตารางการตั้งค่าในฐานข้อมูล db_ci_gen ตาราง tb_ci_setting


3) ต่อด้วยการ Export ตารางที่เกี่ยวข้องกับการ Generate ครั้งนั้นทั้งหมดมาพร้อมกันด้วย
(ซึ่งตารางที่เกี่ยวข้อง จะอยู่กับฐานข้อมูลใดๆ ที่อาจจะไม่ใช่ db_ci_gen ให้ระบุชื่อฐานข้อมูลมาด้วย)


เมื่อได้ไฟล์ 3 ส่วนนี้แล้ว ให้ส่งไปที่อีเมล sunzandesign@gmail.com 
หรือส่งผ่าน Messenger ที่เพจ facebook.com/ToBeDeveloper




ขั้นตอนการส่งโค้ดจากระบบ PHP CI MANIA ให้แอดมินตรวจสอบ
(กรณีที่ไม่ได้ Error จากการ Generate)





PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

ตัวอย่างการปรับแต่ง ความกว้าง-ความสูง ของ Select Box ใน PHP CI MANIA (CodeIgniter + Bootstrap + Select2) (Option List)

โดย SONGCHAI SAETERN
ตัวอย่างการปรับแต่งความกว้างของ Select Box ที่ทำงานกับ Select2()

ค่าเริ่มต้นในระบบ PHP CI MANIA จะกำหนดเป็น Auto คือปรับขนาดตามข้อมูลที่แสดง
ดังนั้น ความกว้างจะสั้นยาว ไม่คงที่แล้วแต่ข้อมูลที่เลือก


หากต้องการกำหนดค่าคงที่ ให้ปรับเปลี่ยนโดยการค้นหา setDropdownList()
หรือค้นหาชื่อ Select box ตัวนั้นๆ เพราะอาจจะมีการกำหนดหลายที่ด้วยคำสั่ง select2() เพิ่มเติม


หลังจากทดลองใส่พารามิเตอร์ตัวที่สอง เป็นความยาว 600
เมื่อบันทึก และกลับมารีเฟรชที่หน้าเว็บก็จะพบว่าความกว้างของ Select box ได้เปลี่ยนแปลงตามต้องการ


สำหรับการปรับความสูง ใช้ CSS กำหนดดังนี้

/* Select2 */
.select2-container .select2-choice {
height: 38px;
line-height: 36px;
}
.select2-container .select2-choice .select2-arrow b {
background-position: 0 5px;
}

ถ้าจะให้มีผลทุกที่ ให้ใส่ไว้ที่ Template ที่เราใช้งานเช่น ไฟล์

template/sb-admin-bs4/homepage_view.php


sb-admin-bs4  คือโฟลเดอร์ Template ที่เลือกใช้
homepage_view.php  คือไฟล์ที่เป็นหน้า Homepage หลักของเรามีผลกับทุกหน้า



วิธีสังเกตว่าเราใช้ Template ตัวไหน??







PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini

โดย SONGCHAI SAETERN
วิธีแก้ไขค่า max_input_vars  ใน XAMPP

ที่ Control Panel ของ XAMP
คลิกที่ปุ่ม Config แล้วเลือก PHP (php.ini)


หลังจาก Text Editor เปิดขึ้นมาก็เปิดการค้นหา



ค้นหาด้วยคำว่า max_input_vars  


ให้เอาช่องว่างและเครื่องหมาย ; ด้านหน้าออกไป
และเปลี่ยนตัวเลขด้านหลังให้เป็นค่าที่ต้องการ จะเพิ่มทีละเท่าไหร่ก็ได้


จากนั้นก็ทำการ Save


และ Stop / Start การทำงานของ XAMP อีกครั้งก็เป็นอันเรียบร้อยครับ







PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

การเปลี่ยนหน้าด้วยคำสั่งใน JavaScript ใน PHP CI MANIA

โดย SONGCHAI SAETERN
การเปลี่ยนหน้าด้วยคำสั่งใน JavaScript



จะใช้วิธีการแทรกคำสั่งเปลี่ยนหน้า ไปยังจุดที่ทำงานเสร็จเรียบร้อย

window.location = site_url('student/address');



สังเกตว่าถ้าเป็น Ajax จะอยู่ในฟังก์ชั่น success: 

และถ้าเป็นหลังจากบันทึกเรียบร้อย
ก็จะต้องอยู่หลังจากตรวจสอบว่าเรียบร้อยแล้วจริงๆ


if(results.is_successful){
       window.location = site_url('student/address');
}





PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

การแสดงคำสั่ง SQL ที่คิวรี่ล่าสุด ใน CodeIgniter

โดย SONGCHAI SAETERN
ตัวอย่างนี้เป็นการแสดงคำสั่ง SQL ในหน้าค้นหารายการ



ซึ่งจะอยู่ใน Model ฟังก์ชั่น read()





หากต้องการแสดงคำสั่ง SQL ที่จุดใดก็ตาม
เพียงแค่นำคำสั่ง echo $this->db->last_query();
ไปวางต่อจากบรรทัดที่ Query ก็จะได้ข้อมูลออกมาดังในภาพแรก


PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com

Ajax select OnChange การสร้าง option list และนำไปแสดงผลใน Select box ตัวที่กำหนด ( CodeIgniter )

โดย SONGCHAI SAETERN

Ajax select OnChange การสร้าง option list และนำไปแสดงผลใน Select box ตัวที่กำหนด ( CodeIgniter )









PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
 http://fastcoding.phpcodemania.com/index.php/#purchase-order
ราคาสุดคุ้ม  4,500  บาท
http://fastcoding.phpcodemania.com