PHP CI MANIA 0.8.4.4 การนำโค้ดไปใช้กับ CodeIgniter 3 เวอร์ชั่นล่าสุด

โดย SONGCHAI SAETERN •
ขั้นตอนการนำโค้ดจาก Project เดิมที่เป็น CodeIgniter 3 เวอร์ชั่นเก่า ไปใช้ในเวอร์ชั่น 3.1.11

1. ดาวน์โหลดที่ http://www.codeigniter.com


2. คลายซิปไปยังโฟลเดอร์ที่เก็บโปรเจ็กต์ของเรา


3. ซึ่งถ้าใช้ XAMPP แบบติดตั้งปกติจะอยู่ที่ C:\xampp\htdocs



4. จากนั้นก็เปลี่ยนชื่อเป็น Project ที่ต้องการ



5. คัดลอกไฟล์จาก Project ที่เป็น CodeIgniter 3 เวอร์ชั่นเก่าไปยัง CodeIgniter 3 เวอร์ชั่นใหม่ โดยเริ่มจาก application/config เลือกไฟล์ตามในภาพ


6. ต่อมาก็เลือกไฟล์ส่วนที่เราสร้างขึ้นมาเอง ซึ่งอยู่ใน application โดยมีด้วยกัน 8 โฟลเดอร์




7. ส่วนสุดท้ายก็คือโฟลเดอร์ assets ที่เราใช้เก็บไฟล์เทมเพลต และ JavaScript, CSS, รูปภาพ และอื่นๆที่ที่เกี่ยวกับส่วนของ Front-end เพิ่มเติม


8. หลังจากนำไฟล์ไปวางทับใน CodeIgniter 3 เวอร์ชั่นล่าสุดที่เราดาวน์โหลดมาเรียบร้อยแล้ว ให้ทำการลบโฟลเดอร์ที่เก็บคู่มือการใช้งาน CodeIgniter ออกจากโปรเจ็กต์ของเรา เพราะไม่จำเป็นต้องใช้ก็ได้




เพียงเท่านี้เราก็สามารถนำโค้ดจากเทมเพลตใน CodeIgniter 3 เวอร์ชั่นเดิม ไปใช้กับ CodeIgniter 3 เวอร์ชั่นล่าสุดได้แล้วครับ



สมาชิกสามารถดาวน์โหลด PHP CI MANIA : PATCH 0.8.4.04 เพื่ออัพเดตเทมเพลตที่ใช้กับ CodeIgniter 3.1.11 ได้ที่หน้า Downloads ได้เลยครับ






PHP CI MANIA - PHP Code Generator 

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

PHP CI MANIA อัพเดตระบบสมาชิก พร้อมระบบล็อกอิบ แบบลืมรหัสผ่านทั้งอีเมล และตอบคำถาม

โดย SONGCHAI SAETERN •
สิ่งที่เปลี่ยนแปลงในเทมเพลตเวอร์ชั่นนี้คือ การล็อกอินจะย้ายเข้าไปอยู่ใน Modules
ซึ่งถ้าจะเอาไปใช้กับเทมเพลตเดิม ก็จะต้องคัดลอกโฟลเดอร์ 2 โฟลเดอร์ คือ

1. application/modules/member
2. assets/js_modules/member

และนอกจากนี้ยังต้องเปลี่ยนลิงค์สำหรับ Login และ Logout อีก 2 จุดด้วยกัน คือ
1. application/views/template/sb-admin-bs4/top_navbar_view.php
2. application/views/template/sb-admin-bs4/homepage_view.php


หากต้องการใช้กับ example_project ที่เป็นเวอร์ชั่นก่อนหน้านี้ มีขั้นตอนดังต่อไปนี้

เริ่มจากการเปลี่ยนลิงค์สำหรับ Logint ไปที่ /member/login


โดยเข้าไปแก้ไขที่ไฟล์ application/views/template/sb-admin-bs4/top_navbar_view.php


ต่อมาส่วนของการ Logout ให้ไปที่ /member/logout
โดยเข้าไปแก้ไขที่ไฟล์ application/views/template/sb-admin-bs4/homepage_view.php



คัดลอกไฟล์ส่วนของ PHP ที่ตำแหน่ง application/modules/member  ชื่อโฟลเดอร์ member ไปวางในตำแหน่งเดียวกันของโปรเจ็กต์ที่ต้องการ


คัดลอกไฟล์ส่วนของ JavaScript ที่ตำแหน่ง assets/js_modules/member  ชื่อโฟลเดอร์ member ไปวางในตำแหน่งเดียวกันของโปรเจ็กต์ที่ต้องการ






สมาชิกดาวน์โหลดได้ที่ http://fastcoding.phpcodemania.com/index.php/downloads




การส่งอีเมล์ด้วย PHP โดยมีการเรียกใช้งาน Authen Account ของ Gmail
https://phpcodemania.blogspot.com/2015/11/php-authen-account-gmail.html


PHP กับการเขียนโปรแกรมส่ง Email ด้วย CodeIgniter - email library
https://phpcodemania.blogspot.com/2018/02/php-email-codeigniter-email-library.html


PHP CI MANIA - PHP Code Generator 

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



วิดีโอตัวอย่างการทำงาน




PHP ประมวลผลไฟล์ zip จาก Google Form

โดย SONGCHAI SAETERN •
ดาวน์โหลดข้อมูลจาก Google Form เอามาอัพโหลดประมวลผลใน PHP



ตัวอย่างโค้ด
<?php


if( isset($_FILES) && isset($_FILES["FileUpload1"]["name"]) && $_FILES["FileUpload1"]["name"] != '' ){
    $zip = zip_open($_FILES["FileUpload1"]["tmp_name"]);

    if ($zip)
      {
        while ($zip_entry = zip_read($zip))
        {
            echo "<p>";
            echo "<b>ชื่อไฟล์ : </b> <span class='text-primary'>" . zip_entry_name($zip_entry) . "</span><br />";

            if (zip_entry_open($zip, $zip_entry))
            {
                echo "File Contents:<br/>";
             
                $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                $data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $contents));
                echo '<pre>';
                print_r($data);
                echo '</pre>';
                echo '<hr/>';
             
                zip_entry_close($zip_entry);
            }
           
            echo "</p>";
        }

    zip_close($zip);
    }
}

?>

<form enctype="multipart/form-data" action="index.php?page=gfmis&m=satisfaction_process" method="post">
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h2 class="panel-title">
                <b>อัพโหลดข้อมูลแบบฟอร์มสำรวจความพึงพอใจ</b>
            </h2>
        </div>
        <div class="panel-body">
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td width="20">&nbsp;</td>
                        <td class="title" style="text-align:left">เลือกไฟล์ Excel</td>
                    </tr>
                    <tr>
                        <td></td>
                        <td class="title_content">
                            <input type="file" id="FileUpload1" name="FileUpload1">
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2" class="title_content">
                            <br/>
                            <input type="submit" id="Button1" value="ตรวจสอบข้อมูล" name="Button1">
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</form>


แหล่งอ้างอิง

PHP zip_entry_read() Function
https://www.w3schools.com/php/func_zip_entry_read.asp

Import CSV zipped file date to mysql
https://www.webmasterworld.com/php/4078430.htm

Converting CSV to array
https://stackoverflow.com/questions/7502370/converting-csv-to-array

PHP CI MANIA สร้างฟังก์ชั่นค้นหาข้อมูลจากตารางอื่น และทำการตรวจสอบเพื่อแสดงสถานะในรูปแบบปุ่มสีต่างๆ

โดย SONGCHAI SAETERN •
เขียนโปรแกรมเว็บแอพพลิเคชั่นด้วยภาษา PHP




ตรวจสอบชื่อตัวแปรที่ใช้ใน list_view.php ตัวอย่างนี้คือ {status}


สร้างตัวแปรอาร์เรย์รับค่าจากฟังก์ชั่น $this->getStatus() ที่ไปค้นหาข้อมูลจากตารางอื่น



        private function setDataListFormat($lists_data, $start_row=0)
{
$data = $lists_data;
$count = count($lists_data);
for($i=0;$i<$count;$i++){
$start_row++;
$data[$i]['record_number'] = $start_row;
$pk1 = $data[$i]['id'];
$data[$i]['url_encrypt_id'] = urlencode(encrypt($pk1));

if($pk1 != ''){
$pk1 = encrypt($pk1);
}
$data[$i]['encrypt_id'] = $pk1;
$data[$i]['preview_ref_province_id'] = $this->setRefProvinceIdSubject($data[$i]['ref_province_id']);
$data[$i]['preview_ref_amphur_id'] = $this->setRefAmphurIdSubject($data[$i]['ref_amphur_id']);
$data[$i]['preview_ref_district_id'] = $this->setRefDistrictIdSubject($data[$i]['ref_district_id']);
//เพิ่มตัวแปรใหม่
$data[$i]['status'] = $this->getStatus($data[$i]['ref_student_id']); //ส่งเงื่อนไขที่ใช้ค้นหา ตัวอย่างค้นด้วยไอดีนักเรียน
}
return $data;
}


สร้างฟังก์ชั่น เพื่อค้นหาข้อมูลจากตารางอื่น และตรวจสอบ แสดงสถานะในรูปแบบปุ่มสี

private function getStatus($value)
        {
$cause = $this->Address_list->getValueOf('tb_results', 'id', "ref_student_id = '$value'");
if($cause == ''){
$result = '<a class="btn btn-warning">อยู่ในระหว่างดำเนินการ</a>';
}else{
$result = '<a class="btn btn-success">ดำเนินการเรียบร้อย</a>';
}
return $result;
}


ก็จะได้สถานะจากตารางอื่นมาแสดงในตารางรายการ





กรณีที่ต้องการมากกว่า 1 ฟิลด์ ให้ใช้คำสั่ง  getRowOf() นะครับ

ตัวอย่าง

$titleRow = $this->Resume->getRowOf('tb_members', 'username, fullname, lastname, email', "userid =  $data[member_id]", $this->db); 
if(!empty($titleRow)){ 
    $memberIdUsername = $titleRow['username'];     
    $memberIdFullname = $titleRow['fullname'];            
    $memberIdLastname = $titleRow['lastname'];     
    $memberIdEmail = $titleRow['email']; 
}else{             
    $memberIdUsername = ''; 
    $memberIdFullname = '';     
    $memberIdLastname = ''; 
    $memberIdEmail = ''; 
}





PHP CI MANIA - PHP Code Generator 

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

CodeIgniter 3 เรียนรู้พื้นฐาน MVC กับการประยุกต์ใช้จริงด้วย Shopping Cart (Codeigniter for Beginners)

โดย SONGCHAI SAETERN •


CodeIgniter 3 เรียนรู้พื้นฐานกับการประยุกต์ใช้จริง 

บทนำ
            สิ่งที่จะได้หลังจากเรียนรู้จากหนังสือเล่มนี้

บทที่ 1 ทำความรู้จักกับ CodeIgniter 3
            - การเขียน PHP แบบธรรมดา
            - การเขียน PHP แบบใช้ CodeIgniter Framework
            - สรุปความน่าสนใจของ CodeIgniter Framework

บทที่ 2 เริ่มต้นใช้งาน CodeIgniter 3
            - ดาวน์โหลดและติดตั้งใช้งาน
            - MVC คืออะไร (มาลองฝึกเขียนแบบแยกส่วนออกจากกัน)
            - Helper ที่ใช้ต้องรู้จัก ( Functions )
                - File
                - URL
                - การสร้าง Helper ไว้ใช้เอง
            - Library ที่ได้ใช้งานบ่อยๆ
                - Form Validation
                - Database
                - Session
                - Parser
                - File upload
                - E-Mail
                - การสร้าง Library ไว้ใช้เอง
            - การส่งค่าผ่าน Form และ URL
            - การเชื่อมต่อและจัดการฐานข้อมูล MySQL
                - การตั้งค่า Config เพื่อเชื่อมต่อฐานข้อมูล
                - การเพิ่ม/แสดง/แก้ไข/ลบ ข้อมูล ( CRUD )
                - การตรวจสอบค่าซ้ำ / นับจำนวน / หาผลรวม ( UNIQUE / COUNT / SUM)
                - การแสดงข้อมูลเชื่อมกันตั้งแต่ 2 ตารางขึ้นไป ( JOIN )
                - โปรแกรมจัดการฐาน HeidiSQL

บทที่ 3 ดาวน์โหลด Bootstrap Front-End Framework สำหรับสร้างเทมเพลตเว็บไซต์
            - ขั้นตอนการดาวน์โหลด
            - วิธีใช้งานใน CodeIgniter
            - การค้นหา Template มาใช้งาน

บทที่ 4 ออกแบบองค์ประกอบหน้าเว็บสำหรับขายสินค้าโดยใช้ Bootstrap template
            - ออกแบบแผนผังเว็บไซต์ขายของออนไลน์
            - สร้าง Views สำหรับหน้าเว็บส่วนต่างๆ
                - Home
                - Product List
                - Product Detail
                - Cart
                - Checkout
                - Order Tracking
                - Stock Management

บทที่ 5 การออกบบฐานข้อมูล
            - ออกแบบแผนผังข้อมูลอย่างย่อ (Data Flow Diagram)
            - ออกแบบความสัมพันธ์ของข้อมูลแต่ละตาราง (ER Diagram)
            - สร้างฐานข้อมูลตามแผนผังที่ได้ออกแบบไว้

บทที่ 6 เริ่มต้นเขียนโค้ดเชื่อมต่อฐานข้อมูล MySQL
            - ออกแบบฟังก์ชั่นใน Controller ที่จะใช้งานในแต่ละหน้า (ตามแผนผังเว็บไซต์)
            - ออกแบบฟังก์ชั่นใน Model ที่จะต้องใช้ในแต่ละส่วน (ตามฐานข้อมูลที่ออกแบบไว้)
            - นำส่วนต่างๆมารวมเข้าด้วยกันสำหรับเรียกใช้งานในแต่ละเมนู

บทที่ 7 ทดสอบการทำงานของระบบ
            - กำหนดเงื่อนไขที่ต้องการทดสอบ
            - ทดสอบทุกเมนูตามเงื่อนไขที่กำหนดไว้
            - แก้ไขข้อผิดพลาดและทดสอบจนครบทุกเงื่อนไขที่กำหนดเพิ่มเติม

ภาคผนวก ก ติดตั้ง XAMPP ใน Windows แบบ Portable
ภาคผนวก ข รวมข้อความ Error และวิธีการแก้ไข
ภาคผนวก ค รวมรายชื่อ Libraries
            




แก้ปัญหาการ submit ส่งค่าใน Form แต่ไม่มีค่าไปด้วย readonly & disabled

โดย SONGCHAI SAETERN •
การใช้งาน Select box กับคำสั่งของ select2() จำเป็นจะต้องสั่ง readonly อีกครั้ง เพราะ select2 จะมีผลแค่กับคำสั่ง disabled แต่ถ้าหากเรา diabled ค่าในแบบฟอร์มก็จะไม่ส่งไปด้วย!!

เพิ่มฟังก์ชั่นใน JavaScript เพื่อทำการเซ็ต Readonly ให้กับ Select Box ที่กำหนดเป็น readonly เอาไว้

var Menulevel = {

current_page : 0,
current_path : '',

// load preview to modal
loadPreview: function(id){
$.ajax({
method: 'GET',
url: site_url('menulevel/menulevel/preview/'+ id),
success: function (results) {
$('#divPreview').html(results);
},
error : function(jqXHR, exception){
ajaxErrorMessage(jqXHR, exception);
}
});
$('#modalPreview').modal('show');
},

// 
//
//
//
//Add another function
setDropdownReadonly: function(){
$(document).ready(function() {
$("select[readonly]").select2("readonly", true);
});
}

}

แก้ไขส่วนของ Controller เพิ่มการเรียกใช้งานฟังก์ชั่นใน JavaScript

public function edit($encrypt_id = '')
{
//JavaScript
$this->another_js .= '<script>Menulevel.setDropdownReadonly();</script>';

                //
                //
                //
        }


ในส่วนของแบบฟอร์ม HTML

                <select id='menu_id'  name='menu_id' value="{record_menu_id}" diabled>
<option value="">- เลือก เมนู -</option>
{tb_menu_item_menu_id_option_list}
</select>

เปลี่ยนเป็น readonly

                <select id='menu_id'  name='menu_id' value="{record_menu_id}" readonly >
<option value="">- เลือก เมนู -</option>
{tb_menu_item_menu_id_option_list}
</select>


วิดีโอประกอบคำอธิบาย






PHP CI MANIA - PHP Code Generator 

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

การค้นหาแบบระบุ ช่วงวันที่ - CodeIgniter ( PHP CI MANIA )

โดย SONGCHAI SAETERN •


ส่วนของ Controller เมื่อเกิดการค้นหาจะตรวจสอบค่า POST
if (isset($_POST['submit'])) {
$search_field =  $this->input->post('search_field', TRUE);
$value = $this->input->post('txtSearch', TRUE);
$arr = array($this->Portfolio->session_name . '_search_field' => $search_field, $this->Portfolio->session_name . '_value' => $value );
$this->session->set_userdata($arr);
} else {
$search_field = $this->session->userdata($this->Portfolio->session_name . '_search_field');
$value = $this->session->userdata($this->Portfolio->session_name . '_value');
}


เพิ่มค่า POST อื่นๆเข้าไปใน Controller

if (isset($_POST['submit'])) {
$search_field =  $this->input->post('search_field', TRUE);
$value = $this->input->post('txtSearch', TRUE);
// เพิ่มตัวแปรอื่นๆ
$begin_date = $this->input->post('begin_date', TRUE);
$final_date = $this->input->post('final_date', TRUE);
$arr = array(
$this->Portfolio->session_name . '_search_field' => $search_field, 
$this->Portfolio->session_name . '_value' => $value,
$this->Portfolio->session_name . '_begin_date' => $begin_date, //<- วันที่เริ่มต้น
$this->Portfolio->session_name . '_final_date' => $final_date  //<- วันที่สิ้นสุด
);
$this->session->set_userdata($arr);
} else {
$search_field = $this->session->userdata($this->Portfolio->session_name . '_search_field');
$value = $this->session->userdata($this->Portfolio->session_name . '_value');
// เพิ่มตัวแปรอื่นๆ
$begin_date = $this->session->userdata($this->Portfolio->session_name . '_begin_date');
$final_date = $this->session->userdata($this->Portfolio->session_name . '_final_date');
}


ส่วนของ Model ที่ต้องแก้ไข
สังเกตที่ตัวแปร $where
ส่วนนี้จะเป็นค่าเริ่มต้นของระบบที่ตรวจสอบฟิลด์ที่ใช้ค้นหาแบบฟิลด์เดียว

if($search_field != '' && $value != ''){
$search_method_field = "$this->my_table.$search_field";
$search_method_value = '';
if($search_field == 'portfolio_id'){
if(!is_numeric($value)){
$value = 0;
}
$value = $value + 0;
$search_method_value = "= $value";
}
$where .= ($where != '' ? ' AND ' : '') . " $search_method_field $search_method_value "; 
if($order_by == ''){
$order_by = " $this->my_table.$search_field";
}
}
// เพิ่มเงื่อนไขอื่นๆที่นี่
// รับค่าจาก SESSION
$begin_date = $this->session->userdata($this->session_name . '_begin_date');
$final_date = $this->session->userdata($this->session_name . '_final_date');
$begin_date = setDateToStandard($begin_date);
$final_date = setDateToStandard($final_date);

if($begin_date  != '' && $final_date != ''){
$where .= ($where != '' ? ' AND ' : '') . " your_date_field BETWEEN $begin_date AND $final_date "; 
}


เราสามารถเพิ่มโค้ดต่อท้ายโดยเช็คจาก SESSION ที่เราเพิ่มเข้าไปใน Controller แล้วก็เพิ่มคำสั่งเงื่อนไขที่ต้องการในตัวแปร $where เพิ่มจากเดิมได้เลยครับ







PHP CI MANIA - PHP Code Generator 

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