File: //var/www/w230/html/attendance/report_preview.php
<?php
include 'db.php';
session_start();
$teacher_id = $_SESSION["teacher_id"];
$full_name = $_SESSION["full_name"];
//echo"$full_name. $teacher_id";
$conn->set_charset("utf8");
/**ส่งออก pdf file */
// รับค่าจากฟอร์ม
$class_level = $_GET['class_level'] ?? '';
$start_date = $_GET['start_date'] ?? '';
$end_date = $_GET['end_date'] ?? '';
//echo "ห้อง:".$class_level."จากวันที่:". $start_date."ถึงวันที่:". $end_date;
// เงื่อนไข WHERE
$where1 = "WHERE a.date BETWEEN '$start_date' AND '$end_date'";
if (!empty($class_level)) {
$where1 .= " AND s.class_level = '$class_level'";
}
// ดึงข้อมูลรายชื่อ
$sql1 = "SELECT s.fullname, s.class_level, a.date, a.status
FROM attendance a
JOIN students s ON a.student_id = s.id
$where1
ORDER BY a.date DESC, s.fullname ASC";
$result1 = $conn->query($sql1);
// เก็บข้อมูลสถิติ
$summary = [];
$total1 = 0;
$statuses = ['มา', 'ขาด', 'ลา', 'สาย', 'ป่วย'];
foreach ($statuses as $status) {
$summary[$status] = 0;
}
?>
<!--cccccccc--->
<?php
// สร้างเงื่อนไข SQL ตามช่วงเวลาและชั้นเรียน
$where = "WHERE attendance.date BETWEEN '$start_date' AND '$end_date'";
if ($class_level != '') {
$where .= " AND students.class_level = '$class_level'";
}
// SQL รวมข้อมูลรายงานแยกตามระดับชั้น พร้อมนับเพศโดยอ่านจาก fullname
$sql1 = "SELECT
students.class_level,
COUNT(DISTINCT students.id) AS total_students,
SUM(CASE WHEN students.fullname LIKE 'ด.ญ.%' OR students.fullname LIKE 'นางสาว%' THEN 1 ELSE 0 END) AS female_students,
SUM(CASE WHEN students.fullname LIKE 'ด.ช.%' OR students.fullname LIKE 'นาย%' THEN 1 ELSE 0 END) AS male_students,
SUM(CASE WHEN attendance.status = 'มา' THEN 1 ELSE 0 END) AS present,
SUM(CASE WHEN attendance.status = 'ลา' THEN 1 ELSE 0 END) AS leave_count,
SUM(CASE WHEN attendance.status = 'ขาด' THEN 1 ELSE 0 END) AS absent,
SUM(CASE WHEN attendance.status = 'สาย' THEN 1 ELSE 0 END) AS late,
SUM(CASE WHEN attendance.status = 'ป่วย' THEN 1 ELSE 0 END) AS sick
FROM students
LEFT JOIN attendance ON attendance.student_id = students.id
$where
GROUP BY students.class_level
ORDER BY students.class_level";
$result = $conn->query($sql1);
// เก็บข้อมูลสำหรับแสดงผลและสรุป
$data = [];
$sum = [
'total_students' => 0,
'female_students' => 0,
'male_students' => 0,
'present' => 0,
'leave_count' => 0,
'absent' => 0,
'late' => 0,
'sick' => 0
];
while ($row = $result->fetch_assoc()) {
$data[] = $row;
// รวมยอดสรุป
foreach ($sum as $key => &$value) {
$value += (int)$row[$key];
}
}
// ฟังก์ชันคำนวณร้อยละ
function percent($num, $total) {
return $total > 0 ? number_format(($num / $total) * 100, 2) : '0.00';
}
?>
<?php
$logoPath = __DIR__ . '/logo.jpg';
$logoBase64 = '';
if (file_exists($logoPath)) {
$logoData = file_get_contents($logoPath);
$logoBase64 = 'data:image/jpg;base64,' . base64_encode($logoData);
}
?>
<?php
require_once __DIR__ . '/vendor/autoload.php';
$defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'tempDir' => __DIR__ . '/tmp', // หรือ path ที่คุณกำหนดเอง
'margin_top' => 10, // หน่วยเป็นมิลลิเมตร (เช่น 20 = 2 เซนติเมตร)
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/tmp',
]),
'fontdata' => $fontData + [
'sarabun' => [
'R' => 'THSarabunNew.ttf',
'I' => 'THSarabunNew Italic.ttf',
'B' => 'THSarabunNew Bold.ttf',
'BI' => 'THSarabunNew BoldItalic.ttf'
]
],
'default_font' => 'sarabun'
]);
// สิ้นสุดคำสั่ง Export ไฟล์ PDF ในส่วนบน เริ่มกำหนดตำแหน่งเริ่มต้นในการนำเนื้อหามาแสดงผลผ่าน
$mpdf->SetFont('sarabun','',14);
ob_start(); //ฟังก์ชัน ob_start()
?>
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<title>รายงานสถิติการมาเรียน</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
<style>
body { font-size: 18px; }
.center { text-align: center; }
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
th, td { font-size: 20px; border: 2px solid black; padding: 5px; text-align: center; }
.signature-table { margin-top: 20px; width: 100%; text-align: center; }
.signature-space { height: 80px; }
.btn-submit {
background:rgb(0, 25, 252);
color: white;
border: none;
margin-top: 10px;
cursor: pointer;
border-radius: 8%;
}
.btn-submit:hover {
background: #00c6ff;
}
.signature-table {
margin-top: 30px;
font-size: 14px;
}
.signature-row {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 20px;
margin-bottom: 40px;
}
.signature-cell {
flex: 1 1 30%;
min-width: 200px;
text-align: center;
}
.signature-director {
text-align: center;
margin-top: 40px;
}
</style>
</head>
<body>
<!--<a href="Report.pdf"><button class="btn-submit">Export PDF</button></a>
<a href="attendance_report.php"><button class="btn-submit">BACK</button></a>-->
<div class="container">
<div class="center">
<?php if ($logoBase64): ?>
<img src="<?= $logoBase64 ?>" style="width:120px;"><br>
<?php endif; ?>
<h3>รายงานสถิติการมาเรียน</h3>
<?php
//echo !empty($class_level) ? "ชั้น: $class_level" : "ทุกชั้น";
echo "ระหว่างวันที่: " . date("d/m/Y", strtotime($start_date)) . " ถึง " . date("d/m/Y", strtotime($end_date));
?>
</div>
<?php if (!empty($class_level)): ?>
<table class="table table-bordered">
<thead>
<tr style="border:1px solid #000;">
<th style="border:1px solid #000;">วันที่</th>
<?php if (!empty($class_level)): ?>
<th style="border:1px solid #000;">ชื่อนักเรียน</th>
<?php endif; ?>
<th style="border:1px solid #000;">สถานะ</th>
</tr>
</thead>
<tbody>
<?php while($row = $result1->fetch_assoc()):
$summary[$row['status']]++;
$total1++;
?>
<tr style="border:1px solid #000;">
<td style="border:1px solid #000;"><?= date("d/m/Y", strtotime($row['date'])) ?></td>
<?php if (!empty($class_level)): ?>
<td style="border:1px solid #000;"><?= htmlspecialchars($row['fullname']) ?></td>
<?php endif; ?>
<td><?= htmlspecialchars($row['status']) ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<!-- สรุปสถิติ -->
<h5>สถิติการมาเรียน</h5>
<table class="table table-bordered">
<thead>
<tr style="border:1px solid #000;">
<?php foreach ($statuses as $s): ?>
<th style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $s ?></th>
<?php endforeach; ?>
<th style="border-right:1px solid #000;padding:3px;text-align:center;">รวม</th>
</tr>
</thead>
<tbody>
<tr style="border:1px solid #000;">
<?php foreach ($statuses as $s): ?>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $summary[$s] ?> (<?= $total1 ? round(($summary[$s]/$total1)*100, 2) : 0 ?>%)</td>
<?php endforeach; ?>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $total1 ?></td>
</tr>
</tbody>
</table>
<?php endif; ?>
<!--cccc-->
<table class="table table-bordered table-striped table-hover">
<thead class="table-dark text-center align-middle">
<tr style="border:1px solid #000;">
<th style="border:1px solid #000;">ระดับชั้น</th>
<th style="border:1px solid #000;">จำนวนนักเรียนทั้งหมด</th>
<th style="border:1px solid #000;">เพศหญิง</th>
<th style="border:1px solid #000;">เพศชาย</th>
<th style="border:1px solid #000;">มา</th>
<th style="border:1px solid #000;">ลา</th>
<th style="border:1px solid #000;">ขาด</th>
<th style="border:1px solid #000;">สาย</th>
<th style="border:1px solid #000;">ป่วย</th>
</tr>
</thead>
<tbody>
<?php foreach ($data as $row): ?>
<tr class="text-center" style="border:1px solid #000;" >
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= htmlspecialchars($row['class_level']) ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['total_students'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['female_students'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['male_students'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['present'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['leave_count'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['absent'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['late'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $row['sick'] ?></td>
</tr>
<?php endforeach; ?>
</tbody>
<tfoot class="table-secondary text-center fw-bold">
<tr style="border:1px solid #000;">
<td style="border-right:1px solid #000;padding:3px;text-align:center;">รวมทั้งหมด</td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['total_students'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['female_students'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['male_students'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['present'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['leave_count'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['absent'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['late'] ?></td>
<td style="border-right:1px solid #000;padding:3px;text-align:center;"><?= $sum['sick'] ?></td>
</tr>
</tfoot>
</table>
<div>มาเรียนร้อยละ: <u><?= percent($sum['present'], $sum['total_students']) ?></u> %
ลาร้อยละ: <u><?= percent($sum['leave_count'], $sum['total_students'])?></u> %
ขาดร้อยละ: <u><?= percent($sum['absent'], $sum['total_students']) ?></u> %
สายร้อยละ: <u><?= percent($sum['late'], $sum['total_students']) ?></u> %
ป่วยร้อยละ: <u><?= percent($sum['sick'], $sum['total_students']) ?></u> %
</div>
<!--cccc-->
<!-- ลายเซ็น -->
<!-- พื้นที่สำหรับลายเซ็น วันจันทร์-->
<?php if($teacher_id == 1):?>
<div class="signature-table">
<div class="signature-row">
<div class="signature-cell">
ลงชื่อ<img src="sign/phachan.jpg" style="width:120px;"><br>
( นายประชัญ สีทา )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/monladda.jpg" style="width:100px;"><br>
( นางสาวมนลัดดา สีบุญเรือง )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/kunatya.jpg" style="width:120px;"><br>
( นางสาวคุณัญญา ประถมภาส )<br>
คุณครูเวรประจำวัน
</div>
</div>
<div class="signature-director">
ลงชื่อ<img src="sign/director.jpg" style="width:150px;"><br>
( นายกิตติศักดิ์ มครนันท์ )<br>
ผู้อำนวยการโรงเรียนบ้านหัววัวหนองนารีตาตวด
</div>
</div>
</div> <!-- ปิด container -->
<?php endif; ?>
<!-- พื้นที่สำหรับลายเซ็นs-->
<?php if($teacher_id == 2):?>
<div class="signature-table">
<div class="signature-row">
<div class="signature-cell">
ลงชื่อ<img src="sign/nisachon.jpg" style="width:120px;"><br>
( นางนิศาชล อนุพันธ์ )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/worawut.jpg" style="width:100px;"><br>
( นายวรวุฒิ สุทนต์ )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/pornpinya.jpg" style="width:120px;"><br>
( นางสาวพรภิญญา มั่นจิตร )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/patthama.jpg" style="width:120px;"><br>
( นางสาวปัทมาพร สงคราม )<br>
คุณครูเวรประจำวัน
</div>
</div>
<div class="signature-director">
ลงชื่อ<img src="sign/director.jpg" style="width:150px;"><br>
( นายกิตติศักดิ์ มครนันท์ )<br>
ผู้อำนวยการโรงเรียนบ้านหัววัวหนองนารีตาตวด
</div>
</div>
</div> <!-- ปิด container -->
<?php endif; ?>
<!-- พื้นที่สำหรับลายเซ็นs-->
<?php if($teacher_id == 3):?>
<div class="signature-table">
<div class="signature-row">
<div class="signature-cell">
ลงชื่อ<img src="sign/knote.jpg" style="width:120px;"><br>
( นายวชิรวิชญ์ พิมทา )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/nucharee.jpg" style="width:100px;"><br>
( นางสาวนุชชะลี มะโนรัตน์ )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/oranuch.jpg" style="width:120px;"><br>
( นางสาวอรนุช นรสาร )<br>
คุณครูเวรประจำวัน
</div>
</div>
<div class="signature-director">
ลงชื่อ<img src="sign/director.jpg" style="width:150px;"><br>
( นายกิตติศักดิ์ มครนันท์ )<br>
ผู้อำนวยการโรงเรียนบ้านหัววัวหนองนารีตาตวด
</div>
</div>
</div> <!-- ปิด container -->
<?php endif; ?>
<!-- พื้นที่สำหรับลายเซ็นs-->
<?php if($teacher_id == 4):?>
<div class="signature-table">
<div class="signature-row">
<div class="signature-cell">
ลงชื่อ<img src="sign/sarawut.jpg" style="width:120px;"><br>
( นายสราวุธ สมพงษ์ )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/sukanda.jpg" style="width:100px;"><br>
( นางสุกานดา สมพงษ์ )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/ramita.jpg" style="width:120px;"><br>
( นางสาวรมิตา ผลาผล )<br>
คุณครูเวรประจำวัน
</div>
</div>
<div class="signature-director">
ลงชื่อ<img src="sign/director.jpg" style="width:150px;"><br>
( นายกิตติศักดิ์ มครนันท์ )<br>
ผู้อำนวยการโรงเรียนบ้านหัววัวหนองนารีตาตวด
</div>
</div>
</div> <!-- ปิด container -->
<?php endif; ?>
<?php if($teacher_id == 5):?>
<div class="signature-table">
<div class="signature-row">
<div class="signature-cell">
ลงชื่อ<img src="sign/tanawat.jpg" style="width:120px;"><br>
( นายธนวัตร ตามบุญ )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/patiya.jpg" style="width:100px;"><br>
( นางสาวปฏิญญา สารโท )<br>
คุณครูเวรประจำวัน
</div>
<div class="signature-cell">
ลงชื่อ<img src="sign/vilasinee.jpg" style="width:120px;"><br>
( นางวิลาสีนี คำเลิศ )<br>
คุณครูเวรประจำวัน
</div>
</div>
<div class="signature-director">
ลงชื่อ<img src="sign/director.jpg" style="width:150px;"><br>
( นายกิตติศักดิ์ มครนันท์ )<br>
ผู้อำนวยการโรงเรียนบ้านหัววัวหนองนารีตาตวด
</div>
</div>
</div> <!-- ปิด container -->
<?php endif; ?>
</div>
</body>
</html>
<?php
// คำสั่งการ Export ไฟล์เป็น PDF
$html = ob_get_contents(); // เรียกใช้ฟังก์ชัน รับข้อมูลที่จะมาแสดงผล
$mpdf->WriteHTML($html); // รับข้อมูลเนื้อหาที่จะแสดงผลผ่านตัวแปร $html
$mpdf->Output('Report.pdf'); //สร้างไฟล์ PDF ชื่อว่า myReport.pdf
ob_end_flush(); // ปิดการแสดงผลข้อมูลของไฟล์ HTML ณ จุดนี้
?>
<!--การสร้างลิงค์ เรียกไฟล์ myReport.pdf แสดงผลไฟล์ PDF -->
<a href="Report.pdf"><button class="btn btn-primary">Export PDF</button> </a>