สอบถามการใช้งาน function ตรวจสอบวันหยุด และวันหยุดราชการครับ
สวัสดีครับ พอดีผมมีปัญหาเกี่ยวกับการเรียกใช้งาน function ตรวจสอบวันหยุด วันหยุดราชการ
จากตัวอย่างในลิงค์นี้นะครับ
https://www.thaicreate.com/community/php-workday-holiday-sunday-saturday.html
ผมทำแบบตัวอย่างที่ 2 นะครับ คือ มีการบันทึกข้อมูลวันหยุดราชการเอาไว้ในฐานข้อมูลครับ
ทีนี้ เมื่อมีการตรวจสอบวันหยุดราชการ โดยกำหนดช่วงวันเริ่มต้นและสิ้นสุด มีการแจ้ง error ข้อความต่อไปนี้ครับ
Code
Notice: Undefined variable: mysqli in D:\xampp\htdocs\ileave\config\query.php on line 731
Fatal error: Uncaught Error: Call to a member function query() on null in D:\xampp\htdocs\ileave\config\query.php:731 Stack trace: #0 D:\xampp\htdocs\ileave\config\query.php(766): CheckPublicHoliday('2020-10-09') #1 {main} thrown in D:\xampp\htdocs\ileave\config\query.php on line 731
ในบรรทัดที่ 731 คือ การดึงข้อมูลวันหยุดราชการจากตารางครับ
Code (PHP)
//ตรวจสอบวันหยุดเสาร์ อาทิตย์ และวันหยุดราชการ
function CheckPublicHoliday($strChkDate){
//ดึงข้อมูลวันหยุดราชการ
$pubday=$mysqli->query("SELECT * FROM ".$fcf->cftprefix."annualday WHERE addate='".$strChkDate."' ");
$fpubday=$pubday->fetch_array();
if(!$fpubday){
return false;
}else{
return true;
}
}
จากที่อ่านใน error บรรทัดที่ 731 คือ มันแจ้งว่าไม่มีตัวแปร mysqli
แต่จริงๆ แล้ว ตัวแปรนี้ถูกกำหนดไว้ในไฟล์ connectdb.php ตามด้านล่างนี้ครับ
Code (PHP)
$mysqli = new mysqli($db_config["host"], $db_config["user"], $db_config["pass"], $db_config["dbname"]);
if(mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
exit;
}
ส่วน error บรรทัดที่ 766 คือในส่วนของ
Code (PHP)
$strStartDate="$newexstart"; //<== ตรงนี้แปลงวันที่จาก พ.ศ. มาเป็น ค.ศ. (ซึ่งลอง echo ออกมาดูแล้ว ก็ตรงตามรูปแบบ 0000-00-00
$strEndDate="$newexend";
$intWorkDay=0;
$intHoliday=0;
$intPublicHoliday=0;
$intTotalDay=((strtotime($strEndDate) - strtotime($strStartDate))/ ( 60 * 60 * 24 )) + 1;
while(strtotime($strStartDate) <= strtotime($strEndDate)){
$DayOfWeek = date("w", strtotime($strStartDate));
// 0 = Sunday, 6 = Saturday
if($DayOfWeek == 0 or $DayOfWeek ==6){
$intHoliday++;
}elseif(CheckPublicHoliday($strStartDate)){ //<=== ERROR บรรทัดนี้ ที่ 766
$intPublicHoliday++;
}else{
$intWorkDay++;
}
//$DayOfWeek = date("l", strtotime($strStartDate)); // return Sunday, Monday,Tuesday....
$strStartDate=date("Y-m-d", strtotime("+1 day", strtotime($strStartDate)));
}
อันนี้มีส่วนไหนที่ผมกำหนดไม่ถูกต้องมั้ยครับ
รบกวนช่วยดูให้ทีครับผม
ขอบคุณครับTag : PHP, MySQL, HTML, XAMPP
Date :
2020-09-06 22:18:39
By :
yomaster
View :
766
Reply :
5
ตัวแปรที่กำหนดไว้มันอยู่นอกขอบเขตครับ ควรทำความเข้าใจเรื่องขอบเขตตัวแปรด้วย
Code (PHP)
$var = 'abc';
echo $var;// abc
function showMe()
{
echo $var;// error undefined variable.
}
showMe();// error
class MyClass
{
public function showMe()
{
echo $var;// error undefined variable.
}
}
$myClass = new MyClass();
$myClass->showMe();// error.
ถ้าจะส่งตัวแปรเข้าไปทำงานในฟังก์ชั่นก็เลือกเอาว่าจะใช้ global หรือส่งผ่าน argument
Code (PHP)
$var = 'abc';
$var2 = '123';
function showMe($var2)
{
global $var;
echo $var;// abc
echo $var2;// 123
}
showMe($var2);// 123
Date :
2020-09-07 07:41:54
By :
mr.v
กำลังนั่งศึกษาอยู่ครับ ขอบคุณมากนะครับ
Date :
2020-09-07 07:52:50
By :
yomaster
ได้แล้วครับ
ขอบคุณสำหรับคำแนะนำนะครับ
Date :
2020-09-07 10:43:01
By :
yomaster
เพื่อจะเป็นประโยชน์
Code (PHP)
<?php
function db(){ // function จะสามารถเรียกได้ทุกที่
global $con;
return $con;
}
$con = new mysqli('localhost','adminweb','xxxxxxx','TestDB');
if($con->error){
die($con->error);
}
$con->set_charset('utf-8');
//-----------------------------------------------------------------
// ตัวอย่างการเรียกใช้
function test(){
$rs=db()->query('select * from users');
while($ro = $rs->fetch_object()){
print_r($ro);
}
}
test();
ประวัติการแก้ไข 2020-09-07 11:15:24
Date :
2020-09-07 11:14:41
By :
Chaidhanan
ขอบคุณมากๆ ครับ
Date :
2020-09-07 11:17:22
By :
yomaster
Load balance : Server 05