PHP Array นำข้อมูล Array วันที่ หลายๆวัน มาหาช่วงวันที่ต่อเนื่อง

โดย SONGCHAI SAETERN

ประกาศค่าตัวแปรวันที่

$results = array();
$all_date = array(
'2017-10-31',
'2017-12-29','2017-12-30','2017-12-31','2018-01-01','2018-01-02',
'2018-03-12', '2018-03-13', '2018-03-14', '2018-03-15',
'2018-02-28', '2018-03-01', '2018-03-02', '2018-03-07', '2018-03-09',
'2019-03-20', '2019-03-21'
);

ผลลัพธ์ที่ต้องการ


สร้างตัวแปรเดือนแบบย่อ

$short_month = array('01' => 'ม.ค.', '02' => 'ก.พ.', '03' => 'มี.ค.', '04' => 'เม.ย.', '10' => 'ต.ค.', '12' => 'ธ.ค.');

1. เรียงวันที่จากน้อยไปมากเพื่อวนลูป

sort($all_date);

 2. นับจำนวนวัน เพื่อใช้ตรวจสอบกรณีต่อเนื่องกันทั้งหมด

$num_date = count($all_date);


3. ตรวจสอบว่า วันแรก และวันสุดท้าย ห่างกันเท่ากันหรือไม่
ถ้าเท่ากัน แสดงว่าต่อเนื่องทั้งหมด นำวันที่แรก กับวันที่สุดท้ายมาต่อกันได้เลย

$date1 = $all_date[0];
$date2 = end($all_date);
$diff_mydate = my_diff_date($date1, $date2);
if($diff_mydate == $num_date){//ถ้าเท่ากัน นำวันที่แรก กับวันที่สุดท้ายมาต่อกันได้เลย
$arr_date1 = explode('-', $date1);
$arr_date2 = explode('-', $date2);
$results[] = $arr_date1[2] . ' ' . $short_month[$arr_date1[1]] . ' - ' . $arr_date2[2] . ' ' . $short_month[$arr_date2[1]] . ' ' . ($arr_date2[0]+543);
}else{
       //แทรกโค้ดข้อ 4.
}

4. วนลูปจากวันที่เริ่มต้น ไปจนถึงวันสุดท้าย เพื่อบวกค่าที่ละ 1 วัน แล้วเช็คว่าต่อเนื่องกันหรือไม่
$data = array();
$check_date = '';//วันที่ถัดไป สำหรับตรวจสอบ
$prev_date = '';
$prev_year = 0;
$start_year = 0;
$no = 0;
foreach($all_date as $date){
$arr = explode('-', $date);
$new =  $arr[2] . ' ' . $short_month[$arr[1]];
if($date != $check_date){//ถ้าวันที่ถัดไป ไม่ตรงกันแสดงว่าไม่ต่อเนื่อง
$results[$no] = $new;// ให้เซ็ตวันที่ใหม่เข้าไปใน Array
$current_year = ($arr[0]+543);
$year = '';
if($start_year != $prev_year){// ตรวจสอบปี ว่ามีการข้ามปีหรือไม่
$year = ' ' . $start_year;//ถ้าข้ามปี ให้เอาปีเก่า ต่อไปในวันที่แรก ก่อนจะเพิ่มวันทีสุดท้ายเข้าไป
}
// Set Last of prev array
if($no > 0){
if($prev_date != ''){//มีการกำหนดค่าวันที่ตรวจสอบก่อนหน้านี้ เมื่อไม่ต่อเนื่องกัน ให้แทรกไปยัง Array ตัวก่อนหน้า
$results[$no-1] .= $year . ' - ' . $prev_date;
$prev_date = '';//Reset
}else{//แต่ถ้าก่อนหน้านั้น ไม่ใช่วันที่ต่อเนื่องจะไม่มีการเก็บวันที่ ให้แทรก ปีต่อท้าย Array ก่อนหน้าไปเลย
$results[$no-1] .= ' ' . $prev_year;
}
}
//echo '<br>year : ', $start_year , ', ' , $current_year;
$start_year = $current_year;
$no++;
}else{ //ถ้าวันที่ยังต่อเนื่องกันอยู่ เก็บวันปัจจุบันเอาไว้ ต่อท้ายกรณีเปลี่ยนค่าไม่ต่อเนื่อง
$prev_date = $new . ' ' .  ($arr[0]+543);
$new = '';
}
//echo '<br/>Current '. $date , ' != '. ($date != $check_date) .' : ' , $check_date.', ' , $new;
//สร้างวันที่ถัดไป เพื่อใช้ตรวจสอบความต่อเนื่อง
$prev_year = ($arr[0]+543);
$dateAdd = new DateTime($date);
$dateAdd->add(new DateInterval('P1D'));
$check_date = $dateAdd->format('Y-m-d');
}
//LAST Date  กรณีครบรอบ วันที่สุดท้ายยังไม่ได้ถูกเซ็ตเข้าไปใน Array ให้เพิ่มเข้าไปตำแหน่งก่อนหน้านี้เลย
if($prev_date != ''){
$results[$no-1] .= ' - ' . $prev_date;
}else{
$results[$no-1] .= ' ' . $prev_year;
}



ส่วนของการแสดงผล
<!DOCTYPE html>
<html>
<head>
<title><?php echo $web_title;?></title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
<h1><?php echo $web_title;?></h1>
<p>วันที่ระหว่าง <?php echo $start_date . ' - ' . $end_date . ' ห่างกัน ' . $diff;?> วัน</p>
<h1>มาหาวันที่ต่อเนื่องกัน</h1>
<?php echo implode(', ', $all_date);?>
<p><strong>ผลลัพธ์ที่ต้องการ </strong></p>
28 ก.พ. - 2 มี.ค. 2561<br/>
7 มี.ค. 2561<br/>
9 มี.ค. 2561<br/>
12 มี.ค. - 15 มี.ค. 2561<br/>
<p><strong>ผลลัพธ์ที่ได้ </strong></p>
<pre style="background-color : #efefef; padding : 10px">
<?php print_r($results);?>
</pre>
</body>
</html>

ผลลัพธ์ที่ได้


ต้องการซอร์สโค้ดฉบับเต็มคลิกที่นี่
แล้ว Inbox มาในเพจนะครับ


PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/

PHP CodeIgniter เพิ่ม form validation สำหรับวันที่รูปแบบไทย DD/MM/YYYY HH:MM:SS

โดย SONGCHAI SAETERN

เพิ่ม datetime สำหรับ รูปแบบสากล  YYYY-MM-DD HH:MM:SS
datetime_th สำหรับรูปแบบไทย DD/MM/YYYY HH:MM:SS


<?php defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{
function __construct()
{
parent::__construct();
}
public function datetime($str)
{
$date_time = explode(' ',$str);
if(sizeof($date_time)==2)
{
$date = $date_time[0];
$date_values = explode('-',$date);
if((sizeof($date_values)!=3) || !checkdate( (int) $date_values[1], (int) $date_values[2], (int) $date_values[0]))
{
return FALSE;
}
$time = $date_time[1];
$time_values = explode(':',$time);
if((int) $time_values[0]>23 || (int) $time_values[1]>59 || (int) $time_values[2]>59)
{
return FALSE;
}
return TRUE;
}
return FALSE;
}
public function datetime_th($str)
{
$date_time = explode(' ',$str);
if(sizeof($date_time)==2)
{
$date = $date_time[0];
$date_values = explode('/',$date);
$date_values[2] = (int)$date_values[2] - 543;
if((sizeof($date_values)!=3) || !checkdate( (int) $date_values[1], (int) $date_values[0], (int) $date_values[2]))
{
return FALSE;
}
$time = $date_time[1];
$time_values = explode(':',$time);
if((int) $time_values[0]>23 || (int) $time_values[1]>59 || (int) $time_values[2]>59)
{
return FALSE;
}
return TRUE;
}
return FALSE;
}
}

เวลาเรียกใช้


$this->load->library('form_validation');
$frm = $this->form_validation; 
         $frm->set_rules('date_pay', 'วันที่โอน', 'trim|required|datetime_th');

          $frm->set_message('datetime', 'กรุณากรอก %s ในรูปแบบวันที่ DD/MM/YYYY HH:MM:SS');

แก้ปัญหาเวลาแก้ไข JavaScrip, CSS อัพขึ้นโฮสต์แล้วต้องกด CTRL + F5 เพื่อโหลดไฟล์ใหม่ทุกครั้ง

โดย SONGCHAI SAETERN

แก้ปัญหาเวลาแก้ไข JavaScript, CSS อัพขึ้นโฮสต์แล้วต้องกด CTRL + F5 เพื่อโหลดไฟล์ใหม่ทุกครั้ง

JavaScript CSS ไม่อัพเดต

PHP Booking ตัวอย่างการแสดงข้อมูลการจองห้อง ของช่วงเวลาต่างๆในแต่ละวัน

โดย SONGCHAI SAETERN
#PHP #Booking #Schedule

ตัวอย่างการแสดงข้อมูลการจอง
ของช่วงเวลาต่างๆในแต่ละวัน ของห้องแต่ละห้อง

- วนลูปแสดงตามจำนวนห้อง
- วนลูปแสดงข้อมูลตามช่วงเวลา start , end ที่บันทึกไว้
- หน้าตาแบบสะอาดๆ ดูดีขึ้นกว่าเวอร์ชั่นก่อน

วิดีโอแนะนำการเขียนโค้ดทีละขั้นตอน




ดูซอร์สโค้ดเวอร์ชั่นเก่าได้ที่นี่
ตารางแสดงการจองห้องประชุม


สำหรับโค้ดที่ปรับแต่งแล้ว จะได้หน้าตาดังนี้



โครงสร้างฐานข้อมูลตัวอย่างทั้งหมด 2 ตาราง




สำหรับซอร์สโค้ดที่ปรับแต่งเรียบร้อย ดูหน้าตาสะอาดสะอ้านขึ้นนั้น หากท่านใดสนใจก็สามารถเลี้ยงกาแฟแอดมินได้ที่นี่ครับ



 


หลังจากเลี้ยงกาแฟแล้วส่ง Inbox เพื่อขอรับโค้ดที่นี่



[ SQL สำหรับสร้างฐานข้อมูลทดสอบโปรแกรม ]


-- Dumping database structure for tobedev_example
CREATE DATABASE IF NOT EXISTS `tobedev_example` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
USE `tobedev_example`;



-- Dumping structure for table tobedev_example.tb_booking
CREATE TABLE IF NOT EXISTS `tb_booking` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`booking_date` date NOT NULL COMMENT 'วันที่จอง',
`room_id` int(11) NOT NULL COMMENT 'ไอดีห้อง',
`start_time` varchar(5) NOT NULL COMMENT 'เวลาเริ่ม',
`end_time` varchar(5) NOT NULL COMMENT 'เวลาสิ้นสุด',
`title` varchar(150) NOT NULL COMMENT 'หัวข้อ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;



-- Dumping data for table tobedev_example.tb_booking: ~3 rows (approximately)
/*!40000 ALTER TABLE `tb_booking` DISABLE KEYS */;
INSERT INTO `tb_booking` (`id`, `booking_date`, `room_id`, `start_time`, `end_time`, `title`) VALUES
(1, '2018-02-24', 1, '09:00', '12:00', 'อบรม เทคโนโลยีสารสนเทศ และการสื่อสาร'),
(2, '2018-02-24', 3, '11:45', '16:10', 'หัวข้อพิเศษเกี่ยวกับวิทยาการคอมพิวเตอร์'),
(3, '2018-02-24', 5, '15:30', '19:45', 'สอนเขียน PHP แสดงการจองห้องประชุมแบบไฮไลท์ตามช่วงเวลา');
/*!40000 ALTER TABLE `tb_booking` ENABLE KEYS */;



-- Dumping structure for table tobedev_example.tb_room
CREATE TABLE IF NOT EXISTS `tb_room` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL COMMENT 'ชื่อห้อง',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;



-- Dumping data for table tobedev_example.tb_room: ~5 rows (approximately)
/*!40000 ALTER TABLE `tb_room` DISABLE KEYS */;
INSERT INTO `tb_room` (`id`, `name`) VALUES
(1, 'ห้องประชุม 1'),
(2, 'ห้องประชุม 2'),
(3, 'ห้องประชุม 3'),
(4, 'ห้องประชุม 4'),
(5, 'ห้องประชุม 5');


/*!40000 ALTER TABLE `tb_room` ENABLE KEYS */;




PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/

 

เรียกฟังก์ชั่น click ใน jQuery หลังโหลด AJAX มาแล้วไม่ทำงาน

โดย SONGCHAI SAETERN


ลืมตลอด JavaScript พวก onclick onchange ต่างๆ 
ถ้าสร้างไว้ก่อนจะไม่มีผลกับ element ที่โหลดมาด้วย AJAX

ถ้าจะให้มันทำงานต้องดักด้วยการเพิ่ม .on()

$(document).on('click', '#target_button', function(){
      //Your code here
});


เช่นเดิมทีหน้าหลักมีแค่

<div id="main_content">
 <!-- AJAX Content
</div>

แล้วเมื่อโหลดข้อมูล Ajax เรียบร้อย

<div id="main_content">
  <button id="target_button">TEST</button>
</div>

 <script>
 $("#target_button").click(function(){
     alert("555+ เงี๊ยบปิ๊ง!!");
});
</script> 


ในส่วน Script ต้องใช้ .on เข้าช่วย


<script>
$(document).on('click', '#target_button', function(){
      alert('เย้ๆๆๆ ทำงานแล้ว');
});
</script>


ก็เอวัง ด้วยประการฉะนี้แล

PHP Array การแทนที่ข้อมูล Array ชุดแรก ด้วยข้อมูล Array ชุดใหม่ แบบ associative

โดย SONGCHAI SAETERN

เมื่อเรามีข้อมูล Array อยู่แล้วชุดหนึ่ง แต่ในการทำงานครั้งต่อไปต้องการนำ Array ชุดใหม่ใส่เพิ่มเข้าไปจะทำอย่างไร?

ฟังก์ชั่นที่เกี่ยวกับ Array ฟังก์ชั่นแรกที่โผล่ขึ้นในหัวก็คือ array_push();
แต่เดี๋ยวก่อน!! มันเพิ่มเข้าไปจริง แต่มันไม่แทนที่ Array ชุดเดิมที่ key เหมือนกัน การเพิ่ม Array มิติใหม่เข้าไปอีกชุดหนึ่ง


<?php
$a = array('a' => 'hello', 'b' => 'world');
$b = array('a' => 'person', 'b' => 'thing', 'c'=>'other', '15'=>'x');
echo '<pre>', print_r(array_push($a, $b), true),'</pre>';
?>


Array
(
    [a] => hello
    [b] => world
    [0] => Array
        (
            [a] => person
            [b] => thing
            [c] => other
            [15] => x
        )
)


แต่ที่ต้องการคือแบบนี้ กรณีที่มีข้อมูลเดิมอยู่แล้วก็แทนที่ด้วยข้อมูลใหม่ไปเลย เช่น ตำแหน่ง a เดิมทีเป็น hello เมื่อเรียกใช้ฟังก์ชั่น array_merge(); ก็จะแทนด้วยค่าใหม่คือ person


<?php
$a = array('a' => 'hello', 'b' => 'world');
$b = array('a' => 'person', 'b' => 'thing', 'c'=>'other', '15'=>'x');
print_r(array_merge($a, $b));
/*Array
(
    [a] => person
    [b] => thing
    [c] => other
    [0] => x
)*/
สังเกตว่า $b จะมีตำแหน่งที่ 15 มีค่าเป็น x แต่เมื่อมา merge กันชื่อตำแหน่ง หรือ key ของ Array จะถูกเปลี่ยนไปอัตโนมัติ ซึ่งยังไม่ใช่ที่ต้องการ



งั้นมาดูอีกหนึ่งฟังก์ชั่นที่ตรงกับที่ต้องการกันว่าจะเป็นเช่นไร

ฟังก์ชั่นที่ว่านี้ก็คือ array_replace(); อ่านจากชื่อก็บอกอยู่แล้วว่า "แทนที่" ดังนั้นก็ไม่ต้องกังวลว่าชื่อตำแหน่ง key จะหายอีกต่อไป ดังตัวอย่างด้านล่างนี้

<?php
$a = array('0'=>'a', '1'=>'c');
$b = array('0'=>'b');
print_r(array_merge($a, $b));
/*Array
(
  [0] => a
  [1] => c
  [2] => b
)*/
print_r(array_replace($a, $b));
/*Array
(
  [0] => b
  [1] => c
)*/

สังเกตว่าข้อมูลที่ได้เมื่อใช้ array_replace() จะคงสภาพเหมือน Array ชุดที่ 1 หรือชุดต้นฉบับที่เราต้องการนำไปใช้งาน จะเปลี่ยนก็แต่ข้อมูลใหม่ที่ต้องการเพิ่มเข้าไปเท่านั้น


ข้อสังเกตอีกอย่างคือ array_merge() จะทำการรวมข้อมูล Array แบบไม่สนใจ key ที่เป็นแบบตัวเลข จะนำข้อมูลมารวมกันแล้วสร้าง key ตัวเลขให้ใหม่อัตโนมัติ แต่ถ้าชื่อ key เป็นตัวอักษร จะมีการแทนที่ให้คล้ายกับ array_replace()

ดังนั้น หากต้องการให้ Array ชุดแรกเป็นต้นฉบับไม่เปลี่ยนแปลงชื่อ key เดิม แม้จะเป็นตัวเลข (ซึ่งก็รวมถึง Array ชุดใหม่ด้วย) ก็ให้ใช้ array_replace() เพิ่มข้อมูลเข้าไปนั่นเอง


ที่มา : https://stackoverflow.com/questions/34367511/differences-between-array-replace-and-array-merge-in-php



PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/

เขียนโปรแกรม PHP แก้สมการรูปภาพ

โดย CyberMAN

ผลลัพธ์ที่ได้

รองเท้า 1 คู่       = 10
คนคล้องนกหวีด  = 5
นกหวีด 2 อัน      = 4
นกหวีด 1 อัน      = 2
คนไม่มีนกหวีด    = 3

คำตอบคือ = 10 + 3 x 2 = 16

โค้ด PHP ถอดสมการตามภาพ


<?php
$a = 0;//รองเท้า1คู่
$b = 0;//คนกับนกหวีด
$c = 0;//นกหวีด 2 อัน
$d = 0;//คนไม่มีนกหวีด
$e = 0;//นกหวีด 1 อัน

$resultA = 30;
$resultB = 20;
$resultC = 13;

$answer = 0;//คำตอบที่ต้องการ

//สมการแรก รองเท้า 1 คู่ ($a + $a + $a == $resultA)
$checkA = 0;
while($checkA != $resultA){
    $a++;
    $checkA = $a + $a + $a;
}
echo '<br/> รองเท้า 1 คู่ = ' . $a;

//สมการที่ 2 คนคล้องนกหวีด $a + $b + $b == $resultB
$checkB = 0;
while($checkB != $resultB){
    $b++;
    $checkB = $a + $b + $b;
}
echo '<br/> คนคล้องนกหวีด = ' . $b;

//สมการที่ 3 นกหวีด 2 อัน b + $c + $c == $resultC
$checkC = 0;
while($checkC != $resultC){
    $c++;
    $checkC = $b + $c + $c;
}
echo '<br/> นกหวีด 2 อัน = ' . $c;

//สมการที่ 4 นกหวีด 1 อัน
$x = $c/2;
echo '<br/> นกหวีด 1 อัน = ' . $x;

//สมการที่ 5 คนไม่ใส่นกหวีด
$y = $b - $x;
echo '<br/> คนไม่มีนกหวีด = ' . $y;

echo "<br/><br/> คำตอบคือ = $a + $y x $x = " . ($a + $y * $x);
?>


สำหรับการนำไปใช้แก้สมการในรูปภาพอื่นๆอีกนั้น คงต้องทำเป็นแบบฟอร์มรับค่าตัวแปร ที่สามารถเพิ่มลดตามที่ต้องการได้ แล้วก็สร้างส่วนของการตรวจสอบเป็นฟังก์ชั่นๆไป เรียกใช้ตามชนิดของค่าที่ส่งเข้ามาว่า เป็นสมการวนลูปแบบ 1-3 หรือ หาจำนวนต่อชิ้นแบบ 4-5 ซึ่งก็น่าจะเขียนให้ครอบคลุมได้สับสนวุ่นวายมากๆเลยทีเดียว


ปล. ได้สมการมาจากสมาชิกแฟนเพจ เลยลองเขียนใหม่ รู้สึกง่ายกว่าเดิมเยอะ

<?php
$resultA = 30;
$resultB = 20;
$resultC = 13;
$answer  = 0;//คำตอบที่ต้องการ

$num   = 3;  //รองเท้า 3 คู่
$x     = $resultA / $num;   // 3x = 30
$y2    = ($resultB - $x);    // x + 2y = 20
$y     = ($y2 / 2);               // y = 5
$z4    = $resultC - $y;       // z4 = 13 - y
$z     = $z4 / 4;                  // z = 2
$z2    = $z * 2;                  // z2 = 4
$m     = $y - $z;                // m = y -z

echo '<br/> รองเท้า 1 คู่ = ' . $x;
echo '<br/> คนคล้องนกหวีด = ' . $y;
echo '<br/> นกหวีด 2 อัน = ' . $z2;
echo '<br/> นกหวีด 1 อัน = ' . $z;
echo '<br/> คนไม่มีนกหวีด = ' . $m;
echo "<br/><br/> คำตอบ (รองเท้า 1 คู่ + คนไม่มีนกหวีด x นกหวีด 1 อัน) = $x + $m x $z = " . ($x + $m * $z);
?>




PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/

 

fsockopen(): unable to connect to ssl://smtp.gmail.com:465

โดย CyberMAN

หลังจากที่แชร์วิธีการเขียนโปรแกรมส่งอีเมลด้วย PHP CodeIgniter ไปเมื่อหลายวันก่อน พอลองอัพขึ้นทดสอบบนเว็บโฮสติ้งเท่านั้นแหละ ปัญหาก็เกิดขึ้นมาโดยที่ตอนรันบน Localhost ไม่ยักกะเจอ!!

fsockopen(): unable to connect to ssl://smtp.gmail.com:465

ก็เลยลองค้นหาดูว่า มีใครเจอเหมือนกันบ้างไหม แล้วเขาแก้ไขมันด้วยวิธีใด

และแล้วก็เจออยู่ 2 วิธีด้วยกันดังต่อไปนี้

วิธีที่ 1 จับใส่ไฟล์ config   (application/config/email.php)




วิธีที่ 2 เอา config มาใส่ในตอน $this->load->library('email');



ซึ่งดูจากทั้ง 2 วิธีแล้ว ถ้าวิธีที่ 1 สามารถใช้งานได้จริงก็ถือว่าง่ายกว่าเยอะ ไม่ต้องคอนโหลด config ทุกครั้งที่เรียกใช้ไลบรารี่ email


ส่วนวิธีที่ 2 ถ้าหากต้องการส่งอีเมลด้วยหลาย user ก็คงต้องใช้ตามนี้ หรืออาจจะใช้วิธีสร้าง MY_Email.php  ไว้ที่ application/core เพื่อรับค่าเพิ่มเติมกรณีต้องการเปลี่ยน user แต่ละครั้งที่ส่ง


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

Sending email with gmail smtp with codeigniter email library
https://forum.codeigniter.com/thread-23655.html

fsockopen(): unable to connect to ssl://smtp.gmail.com:465
https://stackoverflow.com/questions/38203839/fsockopen-unable-to-connect-to-ssl-smtp-gmail-com465

PHP กับการเขียนโปรแกรมส่ง Email ด้วย CodeIgniter - email library

โดย SONGCHAI SAETERN

PHP Sending email via SMTP server


จากบทความการตั้งค่าเพื่อเขียนโปรแกรม ส่งอีเมล์ด้วย PHP วิธีเปิดใช้งาน Authen Account ของ Gmail  ซึ่งเป็นการส่งผ่าน PHPMailer แต่สำหรับ CodeIgniter 3 สามารถเรียกใช้งานไลบรารี่ email ได้เลย ซึ่งมีการเขียนแนะนำไว้ดังนี้

ที่มา : https://stackoverflow.com/questions/37492272/how-to-use-phpmailer-in-codeigniter

และก็ลองค้นหาบทความเพิ่มเติมเกี่ยวกับการเขียนโปรแกรมส่งอีเมลด้วย PHP CodeIgntier ผ่าน Gmail ก็ได้ตัวอย่างโค้ดดังนี้

//Load email library$this->load->library('email');
//SMTP & mail configuration$config = array(
    'protocol'  => 'smtp',
    'smtp_host' => 'ssl://smtp.googlemail.com',
    'smtp_port' => 465,
    'smtp_user' => 'user@gmail.com',
    'smtp_pass' => 'gmail_password',
    'mailtype'  => 'html',
    'charset'   => 'utf-8');$this->email->initialize($config);$this->email->set_mailtype("html");$this->email->set_newline("\r\n");
//Email content$htmlContent '<h1>Sending email via SMTP server</h1>';$htmlContent .= '<p>This email has sent via SMTP server from CodeIgniter application.</p>';
$this->email->to('recipient@example.com');$this->email->from('sender@example.com','MyWebsite');$this->email->subject('How to send email via SMTP server in CodeIgniter');$this->email->message($htmlContent);
//Send email$this->email->send();

ซึ่งไลบรารี่ email ใน CodeIgntier นี้ ยังสามารถปรับค่า config เพื่อส่งอีเมลโดยใช้ระบบอีเมลของเซิร์ฟเวอร์ หรือเว็บโฮสติ้งก็ได้ด้วยเช่นกัน


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

public function send_email($to, $subject, $message) {
    $config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'mail.gmx.com',
        'smtp_port' => 587, //465,
        'smtp_user' => 'myself@gmx.com',
        'smtp_pass' => 'PASSWORD',
        'smtp_crypto' => 'tls',
        'smtp_timeout' => '20',
        'mailtype'  => 'html', 
        'charset'   => 'iso-8859-1'
    );
    $config['newline'] = "\r\n";
    $config['crlf'] = "\r\n";
    $this->CI->load->library('email', $config);
    $this->CI->email->from('myself@gmx.com', 'Admin');
    $this->CI->email->to($to);
    $this->CI->email->subject($subject);
    $this->CI->email->message($message);

    //$this->email->send();
    if ( ! $this->CI->email->send()) {
        return false;
    }
    return true;
}


กรณีส่งแล้ว Error : fsockopen(): unable to connect to ssl://smtp.gmail.com:465 ดูที่บทความนี้นะครับ   http://phpcodemania.blogspot.com/2018/02/codeigniter-mail-fsockopen-unable-to-connect-to-gmail.html


:: อ้างอิง ::

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

Sending Email via SMTP Server in CodeIgniter
https://www.codexworld.com/codeigniter-send-email-gmail-smtp-server/

How to use PHPMailer in codeigniter?
https://stackoverflow.com/questions/37492272/how-to-use-phpmailer-in-codeigniter


PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/