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

สร้างปฏิทิน รายงานยอดที่พนักงานทำได้ในแต่ละเดือนแบบง่ายๆ

ดัดแปลงบทความสร้างปฏิทินนะครับ
แต่ในส่วนของการเช็กตรวจสอบว่าครบ 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. สร้างคอลัมน์ แสดงชื่อ และ วันที่ ตามจำนวนวันของเดือนนั้นๆ
  3. วนลูปดึงข้อมูลของพนักงานทีละคน โดยเริ่มจากวันที่ 1 ถึง วันที่สุดท้ายของเดือน
  4. แสดงจำนวนยอดที่พนักงานได้ ลงในแต่ละคอลัมน์ ตามวันที่นั้นๆ


แบบที่ 2. การเขียนแบบพักข้อมูลไว้ในตัวแปรอาร์เรย์ (แบบใหม่ที่อยากจะแนะนำ)
  1. วนลูปดึงข้อมูลรายชื่อพนักงานขายทั้งหมด
  2. สร้างคอลัมน์วันที่ ตามจำนวนวันของเดือนนั้นๆ
  3. เก็บข้อมูลยอดจองของพนักงานแต่ละคน ในแต่ละวัน ไว้ในอาร์เรย์
  4. วนลูปข้อมูลในอารเรย์ออกมาแสดงในรูปแบบตาราง


อ่านบทความใหม่ 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>');
//เปิดการเชื่อมต่อฐานข้อมูล sunzandesign
mysql_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>';//เปิดแถวใหม่ ตาราง HTML
echo '<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>');
//เปิดการเชื่อมต่อฐานข้อมูล sunzandesign
mysql_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>';//เปิดแถวใหม่ ตาราง HTML
echo '<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 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้มเพียง 3,990 บาท 
http://www.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 ช่วยให้งานคุณง่ายขึ้นต