สวัสดีครับ ในบทความนี้จะแจกตัวอย่างระบบเรียกดูข้อมูลจากการเลือกวันที่เริ่มต้นถึงวันที่สิ้นสุดแบบง่ายๆ สำหรับเอาไปทำระบบเรียกดูข้อมูลหรือรายงานในอนาคต โดยเขียนในรูปแบบ PHP PDO รองรับการทำงาน PHP7 และ PHP8 สำหรับเอาไปศึกษาและพัฒนาต่อยอดครับ *ฝึกไว้ครับเผื่อได้ใช้
ตัวอย่างระบบที่มีการเรียกดูข้อมูลจากวันที่
1.ระบบร้านอาหารออนไลน์ (FOOD POS) คลิก
2.ระบบร้านกาแฟออนไลน์ (Coffee POS) คลิก
3.ระบบอีคอมเมิร์ช คลิก
4.ระบบอื่นๆ เพิ่มเติม คลิก
รวมคลิปสอนปรับพื้นฐาน ภาษา php ฟรี 100 คลิป ++ https://devbanban.com/?p=3940
โค้ดประกอบด้วย
- PHP PDO
- MySQL
- HTML
- Bootstrap5 Class form , btn , grid system, table
- ฟอร์มเลือกวันที่
- แสดงข้อมูลในรูปแบบตาราง
- การหาผลรวมภายใน loop
- การแสดงลำดับใหม่แทนไอดีจากตาราง
- CSS ตกแต่ง input type=”date”
- เงื่อนไข
มาเริ่มทำ workshop กันครับ *คอมเม้นอยู่ในโค้ด
0.รวม Workshop PHP PDO ก่อนหน้าคลิก
1.ให้สร้างฐานข้อมูลก่อนครับ เช่น ฐานข้อมูลชื่อ workshop_pdo
2.ตารางเก็บข้อมูลรายการขาย tbl_order พร้อมข้อมูลตัวอย่าง (จากนั้นไปที่เมนู sql คัดลอกโค้ดไปวางและ go)
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 |
CREATE TABLE `tbl_order` ( `no` int(11) NOT NULL, `product_name` varchar(100) NOT NULL, `price_total` float(10,2) NOT NULL, `order_date` date NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tbl_order` (`no`, `product_name`, `price_total`, `order_date`) VALUES (1, 'ชื่อสินค้า', 40.00, '2021-08-06'), (2, 'ชื่อสินค้า', 50.00, '2021-08-06'), (3, 'ชื่อสินค้า', 50.00, '2021-08-13'), (4, 'ชื่อสินค้า', 50.00, '2021-08-13'), (5, 'ชื่อสินค้า', 50.00, '2021-08-13'), (6, 'ชื่อสินค้า', 40.00, '2021-08-13'), (7, 'ชื่อสินค้า', 60.00, '2021-08-13'), (8, 'ชื่อสินค้า', 40.00, '2021-08-13'), (9, 'ชื่อสินค้า', 50.00, '2021-08-13'), (10, 'ชื่อสินค้า', 60.00, '2021-08-13'), (11, 'ชื่อสินค้า', 50.00, '2021-08-19'), (12, 'ชื่อสินค้า', 40.00, '2021-08-19'), (13, 'ชื่อสินค้า', 20.00, '2021-08-19'), (14, 'ชื่อสินค้า', 120.00, '2021-08-26'), (15, 'ชื่อสินค้า', 300.00, '2021-08-26'), (16, 'ชื่อสินค้า', 60.00, '2021-08-26'), (17, 'ชื่อสินค้า', 150.00, '2021-08-26'), (18, 'ชื่อสินค้า', 60.00, '2021-08-26'), (19, 'ชื่อสินค้า', 50.00, '2021-08-30'), (20, 'ชื่อสินค้า', 20.00, '2021-08-30'), (21, 'ชื่อสินค้า', 50.00, '2021-08-30'), (22, 'ชื่อสินค้า', 40.00, '2021-08-30'), (23, 'ชื่อสินค้า', 120.00, '2021-08-30'), (24, 'ชื่อสินค้า', 20.00, '2021-09-02'), (25, 'ชื่อสินค้า', 50.00, '2021-09-03'), (26, 'ชื่อสินค้า', 20.00, '2021-09-03'), (27, 'ชื่อสินค้า', 40.00, '2021-09-05'), (28, 'ชื่อสินค้า', 50.00, '2021-09-05'), (29, 'ชื่อสินค้า', 20.00, '2021-09-05'), (30, 'ชื่อสินค้า', 50.00, '2021-09-05'), (31, 'ชื่อสินค้า', 40.00, '2021-09-05'), (32, 'ชื่อสินค้า', 50.00, '2021-09-05'), (33, 'ชื่อสินค้า', 50.00, '2021-09-05'), (34, 'ชื่อสินค้า', 40.00, '2021-09-05'), (35, 'ชื่อสินค้า', 200.00, '2021-09-09'), (36, 'ชื่อสินค้า', 50.00, '2021-09-09'), (37, 'ชื่อสินค้า', 20.00, '2021-09-09'), (38, 'ชื่อสินค้า', 50.00, '2021-09-09'), (39, 'ชื่อสินค้า', 360.00, '2021-09-09'), (40, 'ชื่อสินค้า', 0.00, '2021-09-15'), (41, 'ชื่อสินค้า', 40.00, '2021-09-15'), (42, 'ชื่อสินค้า', 40.00, '2021-09-19'), (43, 'ชื่อสินค้า', 40.00, '2021-09-19'), (44, 'ชื่อสินค้า', 60.00, '2021-09-19'), (45, 'ชื่อสินค้า', 100.00, '2021-09-19'), (46, 'ชื่อสินค้า', 40.00, '2021-09-21'), (47, 'ชื่อสินค้า', 50.00, '2021-09-21'), (48, 'ชื่อสินค้า', 20.00, '2021-09-21'), (49, 'ชื่อสินค้า', 50.00, '2021-09-21'), (50, 'ชื่อสินค้า', 60.00, '2021-09-21'), (51, 'ชื่อสินค้า', 40.00, '2021-09-23'), (52, 'ชื่อสินค้า', 50.00, '2021-09-23'), (53, 'ชื่อสินค้า', 50.00, '2021-09-23'), (54, 'ชื่อสินค้า', 40.00, '2021-09-23'), (55, 'ชื่อสินค้า', 20.00, '2021-09-28'), (56, 'ชื่อสินค้า', 50.00, '2021-09-28'), (57, 'ชื่อสินค้า', 80.00, '2021-10-02'), (58, 'ชื่อสินค้า', 200.00, '2021-10-02'), (59, 'ชื่อสินค้า', 40.00, '2021-10-04'), (60, 'ชื่อสินค้า', 50.00, '2021-10-04'), (61, 'ชื่อสินค้า', 20.00, '2021-10-04'), (62, 'ชื่อสินค้า', 50.00, '2021-10-04'), (63, 'ชื่อสินค้า', 40.00, '2021-10-06'), (64, 'ชื่อสินค้า', 20.00, '2021-10-08'), (65, 'ชื่อสินค้า', 50.00, '2021-10-08'), (66, 'ชื่อสินค้า', 60.00, '2021-10-08'), (67, 'ชื่อสินค้า', 40.00, '2021-10-21'), (68, 'ชื่อสินค้า', 50.00, '2021-10-21'), (69, 'ชื่อสินค้า', 20.00, '2021-10-24'), (70, 'ชื่อสินค้า', 60.00, '2021-10-24'); ALTER TABLE `tbl_order` ADD PRIMARY KEY (`no`); ALTER TABLE `tbl_order` MODIFY `no` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=71; |
3.สร้างโฟลเดอร์สำหรับทดสอบ เช่น ชื่อโฟลเดอร์ workshop_pdo *สำหรับคนที่เพิ่งฝึกยังไม่เข้าใจข้อนี้ว่าต้องสร้างไว้ที่ไหน ให้ดูคลิปชุดนี้ก่อน รวมคลิปสอนปรับพื้นฐาน ภาษา php ฟรี 100 คลิป ++ https://devbanban.com/?p=3940
4.ไฟล์เชื่อมต่อฐานข้อมูล ชื่อไฟล์ connect.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $servername = "localhost"; $username = "root"; $password = "yourpassword"; //ไม่ได้ตั้งรหัสผ่านก็ลบ yourpassword ออก try { $conn = new PDO("mysql:host=$servername;dbname=workshop_pdo", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } //Set ว/ด/ป เวลา ให้เป็นของประเทศไทย date_default_timezone_set('Asia/Bangkok'); ?> |
5.ไฟล์ Workshop callDataBetweenDate.php
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 130 131 132 133 134 135 136 137 138 139 140 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"> <title>Basic PHP PDO SQL BETWEEN DATES : devbanban.com 2021</title> <style type="text/css"> input[type="date"]::-webkit-datetime-edit, input[type="date"]::-webkit-inner-spin-button, input[type="date"]::-webkit-clear-button { color: #fff; position: relative; } input[type="date"]::-webkit-datetime-edit-year-field{ position: absolute !important; border-left:1px solid #8c8c8c; padding: 2px; color:red; left: 56px; } input[type="date"]::-webkit-datetime-edit-month-field{ position: absolute !important; border-left:1px solid #8c8c8c; padding: 2px; color:red; left: 26px; } input[type="date"]::-webkit-datetime-edit-day-field{ position: absolute !important; color:red; padding: 2px; left: 4px; } /* ตัวอย่าง css จาก : https://stackoverflow.com/questions/7372038/is-there-any-way-to-change-input-type-date-format */ </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-1"></div> <div class="col-md-10"> <br> <h4>Basic PHP PDO SQL BETWEEN DATES : เรียกดูข้อมูลจากการเลือกวันที่เริ่มต้นถึงวันที่สิ้นสุด</h4> <form action="" method="get"> <font color="blue">*เรียกดูข้อมูลระหว่างวันที่ 2021-08-01 ถึง 2021-10-30 (มีข้อมูลตัวอย่างแค่นี้ครับ)</font> <br><br> <div class="row g-9"> <div class="col-auto"> <label class="col-form-label">เริ่มต้น</label> </div> <div class="col-auto"> <!-- ใน value สร้างเงื่อนไขตรวจสอบถ้ามีการส่ง $_GET มาถึงจะแสดงค่าที่เคยเลือก ถ้าไม่มีจะแสดง 2021-08-06--> <input type="date" name="start_date" data-date-format="dd-mm-Y" min="2021-08-01" max="2021-10-30" class="form-control" required value="<?php if(isset($_GET['start_date'])){ echo $_GET['start_date']; }else{ echo '2021-08-06'; } ?>"> </div> <div class="col-auto"> <label class="col-form-label">ถึง</label> </div> <div class="col-auto"> <!-- ใน value สร้างเงื่อนไขตรวจสอบถ้ามีการส่ง $_GET มาถึงจะแสดงค่าที่เคยเลือก ถ้าไม่มีจะแสดง 2021-10-30--> <input type="date" name="end_date" data-date-format="dd-mm-Y" min="2021-08-01" max="2021-10-30" class="form-control" required value="<?php if(isset($_GET['end_date'])){ echo $_GET['end_date']; }else{ echo '2021-10-30'; } ?>"> </div> <div class="col-auto"> <button type="submit" class="btn btn-primary">ค้นหาข้อมูล</button> <a href="callDataBetweenDate.php" class="btn btn-warning">เคลียร์ข้อมูล</a> </div> </div> </form> <?php //ถ้ามีการส่ง $_GET if (isset($_GET['start_date']) && isset($_GET['end_date'])){ //ไฟล์เชื่อมต่อฐานข้อมูล require_once 'connect.php'; //คิวรี่ข้อมูลมาแสดงในตาราง $stmt = $conn->prepare("SELECT * FROM tbl_order WHERE order_date BETWEEN ? AND ?"); $stmt->execute(array($_GET['start_date'], $_GET['end_date'])); $result = $stmt->fetchAll(); //ถ้าเจอข้อมูลมากกว่า 0 if($stmt->rowCount() > 0) { ?> <br> <h3>รายการขายวันที่ : <?= date('d/m/Y',strtotime($_GET['start_date']));?> ถึง <?= date('d/m/Y',strtotime($_GET['end_date']));?> </h3> <table class="table table-striped table-hover table-responsive table-bordered"> <thead> <tr> <th width="5%">ลำดับ</th> <th width="55%">ชื่อสินค้า</th> <th width="20%" class="text-center">ยอดขาย</th> <th width="20%" class="text-center">ว/ด/ป</th> </tr> </thead> <tbody> <?php //ประกาศตัวแปรแสดงลำดับ $i=1; //ประกาศตัวแปรผลรวม $total =0; foreach($result as $row) { //หาผลรวมยอดขายใน loop โดยใข้ += $total += $row['price_total']; ?> <tr> <td class="text-center"><?= $i++; //แสดงลำดับแทนไอดี ?></td> <td><?= $row['product_name'];?></td> <td align="right"><?= $row['price_total'];?></td> <td class="text-center"><?= date('d/m/Y',strtotime($row['order_date']));?></td> </tr> <?php } ?> <tr class="table-danger"> <td colspan="2" class="text-center">Total</td> <td align="right"><?= number_format($total,2);?></td> <td class="text-center">บาท</td> </tr> </tbody> </table> <br> <?php } // if ($stmt->rowCount() > 0) { else{ echo '<center> -ไม่พบข้อมูล !! </center>'; } } //isset ?> <center> <br> <a href="https://devbanban.com/?cat=250" target="_blank">คอร์สออนไลน์ คลิก</a> || <a href="https://devbanban.com/?p=3196" target="_blank">ระบบพร้อมใช้ คลิก</a> </center> </div> </div> </div> </body> </html> |
6.ผลการทำงาน
ลองเอาไปประยุกต์ใช้ดูครับ และฝากติดตาม workshop ต่อๆ ไปด้วยครับผม
Bootstrap5 : https://getbootstrap.com/
ฝึก SQL : https://www.w3schools.com/sql/default.asp
แหล่งศึกษา PDO เพิ่มเติม : https://websitebeaver.com/php-pdo-vs-mysqli
List of PDOStatement::bindParam data_type parameters : https://www.php.net/manual/en/pdo.constants.php
ขอแนะนำระบบพร้อมใช้งาน *รายละเอียดและราคาอยู่ใต้คลิป
ระบบพร้อมใช้ทั้งหมด คลิก
ร่วมสนับสนุน ค่ากาแฟ ค่าโฮส devbanban.com ได้ที่
ธนาคารกรุงไทย สาขาเดอะมอลล์ท่าพระ
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 878-0-17747-6
————————————————————————————
ธนาคารไทยพาณิชย์ สาขามหาวิทยาลัยราชภัฏธนบุรี
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 406-359094-1
fanpage : https://www.facebook.com/sornwebsites/