ผลลัพธ์ของโปรแกรมดังภาพ เกิดการเขียนโปรแกรม PHP ดึงข้อมูลจากฐานข้อมูล MySQL มาเก็บไว้ใน Array จากนั้นก็วนลูปอาร์เรย์ออกมาแสดงผลและเปรียบเทียบรหัสพนักงานใน $allReportData หากตรงกันก็แสดงยอดที่พนักงานทำได้ออกมาตามวันที่
วิดีโอแสดงการทำงาน
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", "db_tobedev"); //ข้อมูลนี้ได้มาจากตอนติดตั้งเว็บเซิร์ฟเวอร์
mysqli_set_charset($conn, "utf8");//ส่วนนี้คือการตั้งค่า encoding แบบสากล ถ้าฐานข้อมูลเป็น tis-620 ก็ต้องเปลี่ยนด้วย
?>
<html>
<head>
<title>FB : PHP สำหรับผู้เริ่มต้น</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>
<p>ข้อมูลทดสอบอยู่ในเดือน <b>กรกฎาคม</b> ปี <b>2556</b></p>
<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);//ปิดการเชื่อมต่อฐานข้อมูล
?>
ความคิดเห็น
แสดงความคิดเห็น