ดัดแปลงบทความสร้างปฏิทินนะครับ
แต่ในส่วนของการเช็กตรวจสอบว่าครบ 7 คอลัมน์ขึ้นแถวใหม่ ให้ตัดออก เราจะมาสร้างปฏิทินที่แสดงวันที่แถวเดียว เพื่อแสดงยอดของแต่ละวันของเดือนที่เลือกครับ
โดยเวลาส่งค่าวันที่เดือนไหนก็ดึงค่าวันที่เริ่มต้น และวันที่สุดท้ายของเดือนออกมาเก็บไว้ และใช้คำสั่งวนลูป for() ให้ครบตั้งแต่วันที่ 1 จนถึงวันที่สุดท้ายของเดือน ก็จะได้หัวตารางที่แสดงวันที่ทั้งหมดของเดือน
และเราจะกำหนดให้แสดงข้อมูลแต่ละแถว เป็นรายชื่อพนักงานละกันนะครับ โดยจะดึงข้อมูลมาจากฐานข้อมูลยอดขายของเดือนที่กำหนดนี้ออกมาจัดกลุ่มตามรายชื่อพนักงาน ว่าแต่ละวันพนักงานแต่ละคนมียอดขายเท่าไหร่กันบ้าง
สำหรับการเก็บข้อมูลยอดต่างๆ นั้นให้เก็บข้อมูลด้วยอาร์เรย์ครับ
$data[รหัสพนักงาน] = array('วันที่' => จำนวน );
เราจะไม่วนลูปดึงข้อมูลมาแสดงพร้อมกับสร้างตารางนะครับ
เพราะถ้าเดือนหนึ่งๆ มี 30 วัน
และมีพนักงาน 30 คน ถ้าเอามาคูณกัน
30x30 = 900 ครั้งที่จะต้องสั่งคิวรี่ข้อมูลออกมา
ดังนั้นเราจะหายอดออกมาเก็บไว้ก่อน แล้วใช้คีย์เป็นวันที่
และเช็กว่าคีย์ไหนมีข้อมูลก็แสดงออกมาจะทำให้ เราคิวรี่แค่ครั้งเดียว
ตัวอย่างการเก็บข้อมูล
Code (PHP)
1.$data['emp0012'] = array('09' => 453, '10' => 12, '11' => 12);
2.$data['emp0015'] = array('09' => 12, '10' => 12, '11' => 452);
มาเริ่มเขียนโค๊ดกันเลย...
แบบที่ 1. การเขียนแบบตามลำดับขั้น (แบบเดิมที่ผมเคยใช้)
ซอร์สโค๊ด แบบที่ 1
ซอร์สโค๊ด แบบที่ 2
วิเคราะห์โค๊ดแบบที่ 1
คำสั่ง while จะได้รายชื่อพนักงาน 7 คน
คำสั่ง for อยู่ในลูป while จะทำงานอยู่ 7 ครั้ง และแต่ละครั้ง จะวนจนถึงสิ้นเดือนของเดือนนั้นๆ
อย่างต่ำก็ 30 วันต่อเดือนโดยประมาณ
จำนวนการทำงานของ
วิเคราะห์โค๊ดแบบที่ 2
การคิวรี่จะเกิดขึ้นเพียงครั้งเดียว และเก็บข้อมูลทั้งหมดไว้ใน
และเรียกใช้งานในลูปโดยเทียบว่ามีข้อมูลตามคีย์ที่เป็นวันที่ตรงกันหรือไม่
แต่ในส่วนของการเช็กตรวจสอบว่าครบ 7 คอลัมน์ขึ้นแถวใหม่ ให้ตัดออก เราจะมาสร้างปฏิทินที่แสดงวันที่แถวเดียว เพื่อแสดงยอดของแต่ละวันของเดือนที่เลือกครับ
โดยเวลาส่งค่าวันที่เดือนไหนก็ดึงค่าวันที่เริ่มต้น และวันที่สุดท้ายของเดือนออกมาเก็บไว้ และใช้คำสั่งวนลูป for() ให้ครบตั้งแต่วันที่ 1 จนถึงวันที่สุดท้ายของเดือน ก็จะได้หัวตารางที่แสดงวันที่ทั้งหมดของเดือน
และเราจะกำหนดให้แสดงข้อมูลแต่ละแถว เป็นรายชื่อพนักงานละกันนะครับ โดยจะดึงข้อมูลมาจากฐานข้อมูลยอดขายของเดือนที่กำหนดนี้ออกมาจัดกลุ่มตามรายชื่อพนักงาน ว่าแต่ละวันพนักงานแต่ละคนมียอดขายเท่าไหร่กันบ้าง
สำหรับการเก็บข้อมูลยอดต่างๆ นั้นให้เก็บข้อมูลด้วยอาร์เรย์ครับ
$data[รหัสพนักงาน] = array('วันที่' => จำนวน );
เราจะไม่วนลูปดึงข้อมูลมาแสดงพร้อมกับสร้างตารางนะครับ
เพราะถ้าเดือนหนึ่งๆ มี 30 วัน
และมีพนักงาน 30 คน ถ้าเอามาคูณกัน
30x30 = 900 ครั้งที่จะต้องสั่งคิวรี่ข้อมูลออกมา
ดังนั้นเราจะหายอดออกมาเก็บไว้ก่อน แล้วใช้คีย์เป็นวันที่
และเช็กว่าคีย์ไหนมีข้อมูลก็แสดงออกมาจะทำให้ เราคิวรี่แค่ครั้งเดียว
ตัวอย่างการเก็บข้อมูล
Code (PHP)
1.$data['emp0012'] = array('09' => 453, '10' => 12, '11' => 12);
2.$data['emp0015'] = array('09' => 12, '10' => 12, '11' => 452);
มาเริ่มเขียนโค๊ดกันเลย...
แบบที่ 1. การเขียนแบบตามลำดับขั้น (แบบเดิมที่ผมเคยใช้)
- วนลูปดึงข้อมูลรายชื่อพนักงานทั้งหมด จากตารางที่เก็บข้อมูลผู้ใช้ทั้งหมด
- สร้างคอลัมน์ แสดงชื่อ และ วันที่ ตามจำนวนวันของเดือนนั้นๆ
- วนลูปดึงข้อมูลของพนักงานทีละคน โดยเริ่มจากวันที่ 1 ถึง วันที่สุดท้ายของเดือน
- แสดงจำนวนยอดที่พนักงานได้ ลงในแต่ละคอลัมน์ ตามวันที่นั้นๆ
แบบที่ 2. การเขียนแบบพักข้อมูลไว้ในตัวแปรอาร์เรย์ (แบบใหม่ที่อยากจะแนะนำ)
- วนลูปดึงข้อมูลรายชื่อพนักงานขายทั้งหมด
- สร้างคอลัมน์วันที่ ตามจำนวนวันของเดือนนั้นๆ
- เก็บข้อมูลยอดจองของพนักงานแต่ละคน ในแต่ละวัน ไว้ในอาร์เรย์
- วนลูปข้อมูลในอารเรย์ออกมาแสดงในรูปแบบตาราง
อ่านบทความใหม่ PHP + MySQLi Function ได้ >> ที่นี่
ซอร์สโค๊ด แบบที่ 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
| <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']) ? mysql_real_escape_string($_POST['txt_year']) : '';$month = isset($_POST['txt_month']) ? mysql_real_escape_string($_POST['txt_month']) : '';if($year == '' || $month == '') exit('<p class="fail">กรุณาระบุ "เดือน-ปี" ที่ต้องการเรียกรายงาน</p>');//เปิดการเชื่อมต่อฐานข้อมูล sunzandesignmysql_connect("localhost","root","abcd1234"); //ข้อมูลนี้ได้มาจากตอนติดตั้งเว็บเซิร์ฟเวอร์mysql_select_db("sunzandesign");mysql_query("SET NAMES UTF8");echo "<table border='0' id='test_report' cellpadding='0' cellspacing='0'>";echo '<tr>';//เปิดแถวใหม่ ตาราง HTMLecho '<th>รายชื่อพนักงาน</th>';//วันที่สุดท้ายของเดือน$timeDate = strtotime($year.'-'.$month."-01"); //เปลี่ยนวันที่เป็น timestamp$lastDay = date("t", $timeDate); //จำนวนวันของเดือน//สร้างหัวตารางตั้งแต่วันที่ 1 ถึงวันที่สุดท้ายของดือนfor($day=1;$day<=$lastDay;$day++){ echo '<th>' . substr("0".$day, -2) . '</th>';}//เรียกข้อมูลการจองของเดือนที่ต้องการ //++ ต้องดึงมาจากฐานข้อมูลผู้ใช้ ++$strSQL = "SELECT user_code,user_fullname FROM `tb_user` ";$qry = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());while($row = mysql_fetch_assoc($qry)){ echo '<tr>';//เปิดแถวใหม่ ตาราง HTML echo '<td>'. $row['user_fullname'] .'</td>'; //เรียกข้อมูลการจองของพนักงานแต่ละคน ในเดือนนี้ for($j=1;$j<=$lastDay;$j++){ $d = substr("0".$j, -2); $strSQL = "SELECT COUNT(*) AS numBook FROM `tb_report_booking` "; $strSQL.= "WHERE `bk_date` = '$year-$month-$d' AND bk_user_code = '". $row['user_code'] ."' "; $strSQL.= "GROUP by DAY(`bk_date`)"; $qry2 = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error()); $row2 = mysql_fetch_assoc($qry2); $numBook = ($row2['numBook'] > 0) ? '<div>'. $row2['numBook'] . '</div>' : 0; echo "<td class='number'>", $numBook, "</td>"; } echo '</tr>';//ปิดแถวตาราง HTML}echo "</table>"; mysql_close();//ปิดการเชื่อมต่อฐานข้อมูล?> |
ซอร์สโค๊ด แบบที่ 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
| <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']) ? mysql_real_escape_string($_POST['txt_year']) : '';$month = isset($_POST['txt_month']) ? mysql_real_escape_string($_POST['txt_month']) : '';if($year == '' || $month == '') exit('<p class="fail">กรุณาระบุ "เดือน-ปี" ที่ต้องการเรียกรายงาน</p>');//เปิดการเชื่อมต่อฐานข้อมูล sunzandesignmysql_connect("localhost","root","abcd1234"); //ข้อมูลนี้ได้มาจากตอนติดตั้งเว็บเซิร์ฟเวอร์mysql_select_db("sunzandesign");mysql_query("SET NAMES UTF8");//ดึงข้อมูลพนักงานทั้งหมด$allEmpData = array();$strSQL = "SELECT user_code,user_fullname FROM `tb_user` ";$qry = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());while($row = mysql_fetch_assoc($qry)){ $allEmpData[$row['user_code']] = $row['user_fullname'];}//เรียกข้อมูลการจองของเดือนที่ต้องการ $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 = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());while($row = mysql_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>';//เปิดแถวใหม่ ตาราง HTMLecho '<th>รายชื่อพนักงาน</th>';//วันที่สุดท้ายของเดือน$timeDate = strtotime($year.'-'.$month."-01"); //เปลี่ยนวันที่เป็น timestamp$lastDay = date("t", $timeDate); //จำนวนวันของเดือน//สร้างหัวตารางตั้งแต่วันที่ 1 ถึงวันที่สุดท้ายของดือนfor($day=1;$day<=$lastDay;$day++){ echo '<th>' . substr("0".$day, -2) . '</th>';}echo "</tr>";foreach($allEmpData as $empCode=>$empName){ echo '<tr>';//เปิดแถวใหม่ ตาราง HTML echo '<td>'. $empName .'</td>'; //เรียกข้อมูลการจองของพนักงานแต่ละคน ในเดือนนี้ for($j=1;$j<=$lastDay;$j++){ $numBook = isset($allReportData[$empCode][$j]) ? '<div>'.$allReportData[$empCode][$j].'</div>' : 0; echo "<td class='number'>", $numBook, "</td>"; } echo '</tr>';//ปิดแถวตาราง HTML}echo "</table>";mysql_close();//ปิดการเชื่อมต่อฐานข้อมูล?> |
ดาวน์โหลดซอร์สโค๊ดตัวอย่าง ที่นี่
วิเคราะห์โค๊ดแบบที่ 1
while($row = mysql_fetch_assoc($qry)){ echo '<tr>';//เปิดแถวใหม่ ตาราง HTML echo '<td>'. $row['user_fullname'] .'</td>'; //เรียกข้อมูลการจองของพนักงานแต่ละคน ในเดือนนี้ for($j=1;$j<=$lastDay;$j++){$qry2 = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error()); } echo '</tr>';//ปิดแถวตาราง HTML}คำสั่ง while จะได้รายชื่อพนักงาน 7 คน
คำสั่ง for อยู่ในลูป while จะทำงานอยู่ 7 ครั้ง และแต่ละครั้ง จะวนจนถึงสิ้นเดือนของเดือนนั้นๆ
อย่างต่ำก็ 30 วันต่อเดือนโดยประมาณ
จำนวนการทำงานของ
$qry2 จะเท่ากับ 7 x 30 = 210 ครั้ง
วิเคราะห์โค๊ดแบบที่ 2
การคิวรี่จะเกิดขึ้นเพียงครั้งเดียว และเก็บข้อมูลทั้งหมดไว้ใน
$allReportData และเรียกใช้งานในลูปโดยเทียบว่ามีข้อมูลตามคีย์ที่เป็นวันที่ตรงกันหรือไม่
"PHP ไม่ได้สร้างสุดยอดโปรแกรมแต่ PHP ช่วยให้งานคุณง่ายขึ้นต่างหาก"
PHP CI MANIA - PHP Code Generatorโปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม
สนใจสั่งซื้อเพียง 3,990 บาท
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
บทความที่เกี่ยวข้อง
- PHP Calendar : ฝีกสร้างปฏิทินไว้ใช้ในงานต่างๆ
- PHP Calendar : สร้างปฏิทินมุมมองแบบสัปดาห์
- สร้างปฏิทิน รายงานยอดที่พนักงานทำได้ในแต่ละเดือนแบบง่ายๆ
- สร้างตารางเรียน ตารางสอนด้วย PHP
- PHP Calendar : การสร้างปฏิทินเพื่อแสดงสถานะการจองในแต่ละวัน




ความคิดเห็น
แสดงความคิดเห็น