ข้ามไปที่เนื้อหาหลัก

สร้างตารางแสดงยอดจองในแต่ละเดือน PHP + mysqli

จากบทความเมื่อหลายปีก่อน สร้างปฏิทิน รายงานยอดที่พนักงานทำได้ในแต่ละเดือนแบบง่ายๆ จนถึงทุกวันนี้ฟังก์ชั่น mysql_xxx() ก็เริ่มเลิกใช้กันแล้ว เพราะเว็บโฮสติ้งรองรับ PHP 5.5 ได้เป็นอย่างต่ำก็เลยต้องปรับปรุงโค้ดกันสักหน่อย

ในครั้งนี้ก็จะนำเสนอเป็นวิดีโอเพื่อให้เห็นภาพการทำงานที่ชัดเจนขึ้น
ท่านสามารถเปิดเข้าไปดูได้ตามด้านล่างนี้เลยครับ








คำสั่ง SQL สำหรับสร้างตารางที่ใช้ในตัวอย่าง

--
-- Table structure for table `tb_report_booking`
--
CREATE TABLE IF NOT EXISTS `tb_report_booking` (
  `bk_id` int(13) NOT NULL AUTO_INCREMENT,
  `bk_user_code` bigint(10) NOT NULL,
  `bk_date` date NOT NULL,
  `bk_customer_code` bigint(10) NOT NULL,
  `bk_customer_name` varchar(40) NOT NULL,
  `bk_remark` varchar(225) NOT NULL,
  PRIMARY KEY (`bk_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
--
-- Dumping data for table `tb_report_booking`
--
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(1, 2556020001, '2013-07-01', 2147483647, 'Mr.Brain', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(2, 2556020001, '2013-07-04', 32123, 'Mr.BomBae', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(3, 2556020001, '2013-07-05', 2147483647, 'Mr.Brain', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(4, 2556020001, '2013-07-17', 32123, 'Mr.BomBae', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(5, 2556020001, '2013-07-04', 25560, 'Mr.Brain', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(6, 2556020001, '2013-07-05', 121212, 'Mr.Brain333', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(7, 2556020002, '2013-07-05', 32123, 'asdfasdf', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(8, 2556020003, '2013-07-02', 20002, 'Mr.Brain44', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(9, 2556020005, '2013-07-25', 5601249, 'Mr.Lee JungKi', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(10, 2556020005, '2013-07-10', 5601249, 'Mr.Jang Okjong', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(11, 2556020005, '2013-07-10', 5601249, 'Mr.Jang Okjong', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(12, 2556020005, '2013-07-10', 5601249, 'Mr.Jang Okjong', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(13, 2556020001, '2013-07-10', 5601249, 'Mr.Jang Okjong', '');
INSERT INTO `tb_report_booking` (`bk_id`, `bk_user_code`, `bk_date`, `bk_customer_code`, `bk_customer_name`, `bk_remark`) VALUES(14, 2556020003, '2013-07-21', 5601249, 'Mr.Jang Okjong', '');
-- --------------------------------------------------------
--
-- Table structure for table `tb_user`
--
CREATE TABLE IF NOT EXISTS `tb_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'อัตโนมัติ',
  `user_code` varchar(20) NOT NULL COMMENT 'รหัสสมาชิก',
  `user_name` varchar(30) NOT NULL COMMENT 'ชื่อล็อกอิน',
  `user_password` varchar(60) NOT NULL COMMENT 'รหัสผ่าน',
  `user_fullname` varchar(100) NOT NULL COMMENT 'ชื่อนามสกุล',
  `user_nickname` varchar(30) NOT NULL COMMENT 'ชื่อเล่น',
  `user_school` varchar(50) NOT NULL COMMENT 'โรงเรียน',
  `user_level` int(1) NOT NULL COMMENT 'ระดับ',
  `user_active_status` int(1) NOT NULL COMMENT 'สถานะ',
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='ข้อมูลสมาชิก' AUTO_INCREMENT=8 ;
--
-- Dumping data for table `tb_user`
--
INSERT INTO `tb_user` (`user_id`, `user_code`, `user_name`, `user_password`, `user_fullname`, `user_nickname`, `user_school`, `user_level`, `user_active_status`) VALUES(6, '2556020006', 'sunzandesign6', 'abc123', 'นายณัฐพงษ์ คงรี', '', '', 2, 1);
INSERT INTO `tb_user` (`user_id`, `user_code`, `user_name`, `user_password`, `user_fullname`, `user_nickname`, `user_school`, `user_level`, `user_active_status`) VALUES(5, '2556020005', 'sunzandesign5', 'abc123', 'นางสาวอรทัย ใจเย็น', '', '', 2, 1);
INSERT INTO `tb_user` (`user_id`, `user_code`, `user_name`, `user_password`, `user_fullname`, `user_nickname`, `user_school`, `user_level`, `user_active_status`) VALUES(4, '2556020004', 'sunzandesign4', 'abc123', 'นางสาวสุวิมล สุดใจ', '', '', 2, 1);
INSERT INTO `tb_user` (`user_id`, `user_code`, `user_name`, `user_password`, `user_fullname`, `user_nickname`, `user_school`, `user_level`, `user_active_status`) VALUES(3, '2556020003', 'sunzandesign3', 'abc123', 'นางสาวรุ่งนภา พงษ์พันธ์', '', '', 2, 1);
INSERT INTO `tb_user` (`user_id`, `user_code`, `user_name`, `user_password`, `user_fullname`, `user_nickname`, `user_school`, `user_level`, `user_active_status`) VALUES(2, '2556020002', 'sunzandesign2', 'abc1234', 'นายรณพีร์ พณรี', '', '', 2, 1);
INSERT INTO `tb_user` (`user_id`, `user_code`, `user_name`, `user_password`, `user_fullname`, `user_nickname`, `user_school`, `user_level`, `user_active_status`) VALUES(1, '2556020001', 'sunzandesign', 'abc123', 'ซันซาน ดีไซน์', '', '', 1, 1);
INSERT INTO `tb_user` (`user_id`, `user_code`, `user_name`, `user_password`, `user_fullname`, `user_nickname`, `user_school`, `user_level`, `user_active_status`) VALUES(7, '2556020007', 'sunzandesign7', 'abc123', 'นายนิคม  บุญส่ง', '', '', 2, 1);


คำสั่งในไฟล์ PHP สำหรับแสดงผล

<?php
//เปิดการเชื่อมต่อฐานข้อมูล sunzandesign
//mysql_connect("localhost","root","abcd1234");  //ข้อมูลนี้ได้มาจากตอนติดตั้งเว็บเซิร์ฟเวอร์
$conn = mysqli_connect("localhost","tobedev","abcd.1234", "sunzandesign");  //ข้อมูลนี้ได้มาจากตอนติดตั้งเว็บเซิร์ฟเวอร์
mysqli_set_charset($conn, "utf8");//ส่วนนี้คือการตั้งค่า encoding แบบสากล ถ้าฐานข้อมูลเป็น tis-620 ก็ต้องเปลี่ยนด้วย
?>
<html>
<head>
<title>SunZan-Desgin.Com</title>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<style>
.number{ text-align : right;}
.number div{
background: #91F7A4;
color : #ff0000;
}
#test_report th{ background-color : #21BBD6; color : #ffffff;}
#test_report{
border-right : 1px solid #eeeeee;
border-bottom : 1px solid #eeeeee;
}
#test_report td,#test_report th{
border-top : 1px solid #eeeeee;
border-left : 1px solid #eeeeee;
padding : 2px;
}
#txt_year{ width : 70px;}
.fail{ color : red;}
</style>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
<table>
<tr>
<td>ระบุเดือน-ปี : </td>
<td>
<select name="txt_month">
<option value="">--------------</option>
<?php
$month = array('01' => 'มกราคม', '02' => 'กุมภาพันธ์', '03' => 'มีนาคม', '04' => 'เมษายน',
'05' => 'พฤษภาคม', '06' => 'มิถุนายน', '07' => 'กรกฎาคม', '08' => 'สิงหาคม',
'09' => 'กันยายน ', '10' => 'ตุลาคม', '11' => 'พฤศจิกายน', '12' => 'ธันวาคม');
$txtMonth = isset($_POST['txt_month']) && $_POST['txt_month'] != '' ? $_POST['txt_month'] : date('m');
foreach($month as $i=>$mName) {
$selected = '';
if($txtMonth == $i) $selected = 'selected="selected"';
echo '<option value="'.$i.'" '.$selected.'>'. $mName .'</option>'."\n";
}
?>
</select>
</td>
<td>
<select name="txt_year">
<option value="">--------------</option>
<?php
$txtYear = (isset($_POST['txt_year']) && $_POST['txt_year'] != '') ? $_POST['txt_year'] : date('Y');
$yearStart = date('Y');
$yearEnd = $txtYear-5;
for($year=$yearStart;$year > $yearEnd;$year--){
$selected = '';
if($txtYear == $year) $selected = 'selected="selected"';
echo '<option value="'.$year.'" '.$selected.'>'. ($year+543) .'</option>'."\n";
}
?>
</select>
</td>
<td><input type="submit" value="ค้นหา" /></td>
</tr>
</table>
</form>
<?php
//รับค่าตัวแปรที่ส่งมาจากแบบฟอร์ม HTML
$year = isset($_POST['txt_year']) ? mysqli_real_escape_string($conn, $_POST['txt_year']) : '';
$month = isset($_POST['txt_month']) ? mysqli_real_escape_string($conn, $_POST['txt_month']) : '';
if($year == '' || $month == '') exit('<p class="fail">กรุณาระบุ "เดือน-ปี" ที่ต้องการเรียกรายงาน</p>');


//ดึงข้อมูลพนักงานทั้งหมด
//ในส่วนนี้จะเก็บข้อมูลโดยใช้คีย์ เป็นรหัสพนักงาน และ value คือชื่อพนักงาน
$allEmpData = array();
$strSQL = "SELECT user_code,user_fullname FROM `tb_user` ";
$qry = mysqli_query($conn, $strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysqli_error());
while($row = mysqli_fetch_assoc($qry)){
$allEmpData[$row['user_code']] = $row['user_fullname'];
}
/*
echo "<pre>";
print_r($allEmpData);
echo "</pre>";
*/
//เรียกข้อมูลการจองของเดือนที่ต้องการ
$allReportData = array();
$strSQL = "SELECT bk_user_code, DAY(`bk_date`) AS bk_day, COUNT(*) AS numBook FROM `tb_report_booking` ";
$strSQL.= "WHERE `bk_date` LIKE '$year-$month%' ";
$strSQL.= "GROUP by bk_user_code,DAY(`bk_date`)";
$qry = mysqli_query($conn, $strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysqli_error());
while($row = mysqli_fetch_assoc($qry)){
$allReportData[$row['bk_user_code']][$row['bk_day']] = $row['numBook'];
}
echo "<table border='0' id='test_report' cellpadding='0' cellspacing='0'>";
echo '<tr>';//เปิดแถวใหม่ ตาราง HTML
echo '<th>รายชื่อพนักงาน</th>';
//วันที่สุดท้ายของเดือน
$timeDate = strtotime($year.'-'.$month."-01");  //เปลี่ยนวันที่เป็น timestamp
$lastDay = date("t", $timeDate);   //จำนวนวันของเดือน
echo "$timeDate";
//สร้างหัวตารางตั้งแต่วันที่ 1 ถึงวันที่สุดท้ายของดือน
for($day=1;$day<=$lastDay;$day++){
echo '<th>' . substr("0".$day, -2) . '</th>';
}
echo "</tr>";
//วนลูปเพื่อสร้างตารางตามจำนวนรายชื่อพนักงานใน Array
foreach($allEmpData as $empCode=>$empName){
echo '<tr>';//เปิดแถวใหม่ ตาราง HTML
echo '<td>'. $empName .'</td>';
//เรียกข้อมูลการจองของพนักงานแต่ละคน ในเดือนนี้
for($j=1;$j<=$lastDay;$j++){
//ตรวจสอบว่าวันที่แต่ละวัน $j ของ พนักงานแต่ละรหัส  $empCode มีข้อมูลใน  $allReportData หรือไม่ ถ้ามีให้แสดงจำนวนในอาร์เรย์ออกมา ถ้าไม่มีให้เป็น 0
$numBook = isset($allReportData[$empCode][$j]) ? '<div>'.$allReportData[$empCode][$j].'</div>' : 0;
echo "<td class='number'>", $numBook, "</td>";
}
echo '</tr>';//ปิดแถวตาราง HTML
}
echo "</table>";
/*
echo "<pre>";
print_r($allReportData);
echo "</pre>";
*/
mysqli_close($conn);//ปิดการเชื่อมต่อฐานข้อมูล
?>

PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 4,500 บาท
http://fastcoding.phpcodemania.com/



PHP CI MANIA PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้ม  
http://fastcoding.phpcodemania.com

 

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

PHP กับการคิดส่วนลดเป็นเปอร์เซ็น 5%, 10%, 20% ตามช่วงราคาที่กำหนด

<?php     $total_price = 1000;     $discount = 0;         if($total_price >= 500 && $total_price < 1001){         $discount = 5;     }elseif($total_price >= 1001 && $total_price <= 5000){         $discount = 10;     }elseif($total_price >= 5001){         $discount = 20;     }         $discount_bath = ($total_price*$discount)/100; ?> <pre> ซื้อสินค้าครบ 0 ถึง 499 บาท ไม่ได้ส่วนลด ซื้อสินค้าครบ 500 ถึง 1000 บาท ได้ส่วนลด 5% ซื้อสินค้าครบ 1001 ถึง 5000บาท ได้ส่วนลด 10% ซื้อสินค้าครบ 5001 บาทขึ้นไป ได้ส่วนลด 20% </pre> <h3>รวมราคาสินค้า = <?php echo number_format($total_price,2);?></h3> <h5>ส่วนลด = <?php echo $discount;?>%  (<?php echo $discount_bath;?> บาท)</h5> <h2>ราคาหลังส่วนลด = <?php echo number_format($total_price - $discount_bath,2);?>บาท</h2> "PHP ไม่ได้สร้างสุดยอดโปรแกรม แต่ PHP ช่วยให้งานคุณง่ายขึ้นต