| Server IP : 172.67.187.206 / Your IP : 172.71.28.156 Web Server : Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.30 System : Windows NT WIN-ECQAAA40806 6.2 build 9200 (Windows Server 2012 Standard Edition) i586 User : SYSTEM ( 0) PHP Version : 5.6.30 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Inetpub/www/school_budget/admin/ |
Upload File : |
<?php
include '../template/header.php';
// ป้องกันการเข้าถึง
if (!isset($_SESSION['user_id']) || $_SESSION['role'] != 'admin') {
header("Location: ../login.php");
exit();
}
$message = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_FILES["alloc_file"])) {
if (isset($_FILES['alloc_file']) && $_FILES['alloc_file']['error'] == UPLOAD_ERR_OK) {
$file_tmp_path = $_FILES['alloc_file']['tmp_name'];
$file_ext = strtolower(pathinfo($_FILES['alloc_file']['name'], PATHINFO_EXTENSION));
if ($file_ext == 'xlsx' || $file_ext == 'xls') {
require_once '../libs/PHPExcel/Classes/PHPExcel.php';
try {
$objPHPExcel = PHPExcel_IOFactory::load($file_tmp_path);
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$success_count = 0; $error_count = 0; $error_messages = [];
mysqli_begin_transaction($conn);
for ($row = 2; $row <= $highestRow; $row++) {
$school_name = trim($sheet->getCell('A'.$row)->getValue());
$type_name = trim($sheet->getCell('B'.$row)->getValue());
$plan_name = trim($sheet->getCell('C'.$row)->getValue());
$item_name = trim($sheet->getCell('D'.$row)->getValue());
$amount = trim($sheet->getCell('E'.$row)->getValue());
$excel_date = trim($sheet->getCell('F'.$row)->getValue());
if (empty($school_name) && empty($item_name)) continue;
if (empty($school_name) || empty($type_name) || empty($plan_name) || empty($item_name) || !is_numeric($amount) || empty($excel_date)) {
$error_messages[] = "แถวที่ $row: ข้อมูลไม่ครบถ้วนหรือไม่ถูกต้อง"; $error_count++; continue;
}
$school_id = null; $type_id = null; $plan_id = null;
$school_res = mysqli_query($conn, "SELECT id FROM schools WHERE school_name = '".mysqli_real_escape_string($conn, $school_name)."'");
$type_res = mysqli_query($conn, "SELECT id FROM budget_types WHERE type_name = '".mysqli_real_escape_string($conn, $type_name)."'");
$plan_res = mysqli_query($conn, "SELECT id FROM plans WHERE plan_name = '".mysqli_real_escape_string($conn, $plan_name)."'");
if(mysqli_num_rows($school_res) > 0) $school_id = mysqli_fetch_assoc($school_res)['id'];
if(mysqli_num_rows($type_res) > 0) $type_id = mysqli_fetch_assoc($type_res)['id'];
if(mysqli_num_rows($plan_res) > 0) $plan_id = mysqli_fetch_assoc($plan_res)['id'];
if (!$school_id || !$type_id || !$plan_id) {
$error_messages[] = "แถวที่ $row: ไม่พบข้อมูล โรงเรียน/ประเภทงบ/แผนงาน ในระบบ"; $error_count++; continue;
}
$allocation_date = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($excel_date));
$sql = "INSERT INTO allocations (school_id, budget_type_id, plan_id, item_name, amount, allocation_date)
VALUES ('$school_id', '$type_id', '$plan_id', '".mysqli_real_escape_string($conn, $item_name)."', '$amount', '$allocation_date')";
if (mysqli_query($conn, $sql)) {
$success_count++;
} else {
$error_messages[] = "แถวที่ $row: ไม่สามารถบันทึกข้อมูลลงฐานข้อมูลได้"; $error_count++;
}
}
if ($error_count == 0) {
mysqli_commit($conn);
$message = "<div class='alert alert-success'><strong>การนำเข้าเสร็จสิ้น!</strong><br>นำเข้าข้อมูลสำเร็จ: $success_count รายการ</div>";
} else {
mysqli_rollback($conn);
$message = "<div class='alert alert-warning'><strong>การนำเข้าไม่สำเร็จ!</strong> พบข้อผิดพลาด $error_count รายการ จึงไม่ได้บันทึกข้อมูลใดๆ</div>";
$message .= "<div class='alert alert-danger'><strong>รายละเอียดข้อผิดพลาด:</strong><br><ul>";
foreach ($error_messages as $err) $message .= "<li>" . htmlspecialchars($err) . "</li>";
$message .= "</ul></div>";
}
} catch(Exception $e) {
mysqli_rollback($conn);
$message = "<div class='alert alert-danger'>เกิดข้อผิดพลาดในการอ่านไฟล์ Excel: " . $e->getMessage() . "</div>";
}
} else {
$message = "<div class='alert alert-danger'>ข้อผิดพลาด: กรุณาอัปโหลดไฟล์นามสกุล .xlsx หรือ .xls เท่านั้น</div>";
}
} else {
$message = "<div class='alert alert-danger'>ข้อผิดพลาดในการอัปโหลดไฟล์</div>";
}
}
?>
<div class="container-fluid px-4">
<h1 class="mt-4">นำเข้าข้อมูลการจัดสรรงบประมาณ</h1>
<ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="index.php">แดชบอร์ด</a></li>
<li class="breadcrumb-item"><a href="manage_allocations.php">จัดการการจัดสรรงบประมาณ</a></li>
<li class="breadcrumb-item active">นำเข้าข้อมูล</li>
</ol>
<?php if(!empty($message)) echo $message; ?>
<div class="card mb-4">
<div class="card-header"><i class="bi bi-info-circle-fill me-1"></i>ขั้นตอนการนำเข้าข้อมูล</div>
<div class="card-body">
<p><strong>เลือก Template ที่ต้องการดาวน์โหลด:</strong></p>
<div class="mb-3">
<a href="generate_allocation_template.php" class="btn btn-success"><i class="bi bi-file-earmark-excel-fill me-1"></i>ดาวน์โหลด Template (แบบมี Dropdown)</a>
<small class="d-block mt-1">ใช้สำหรับจัดสรรงบประมาณให้บางโรงเรียน หรือแต่ละโรงเรียนได้งบไม่เหมือนกัน</small>
</div>
<div class="mb-3">
<a href="generate_allocation_template_all_schools.php" class="btn btn-primary"><i class="bi bi-file-earmark-spreadsheet-fill me-1"></i>ดาวน์โหลด Template (แบบมีรายชื่อทุกโรงเรียน)</a>
<small class="d-block mt-1">ใช้สำหรับจัดสรรงบประมาณรายการเดียวกัน **ให้ครบทุกโรงเรียน** ในครั้งเดียว</small>
</div>
<hr>
<p><strong>คำแนะนำ:</strong></p>
<ol>
<li>เปิดไฟล์ที่ดาวน์โหลดและกรอกข้อมูลให้ครบถ้วน</li>
<li>คอลัมน์ที่มี Dropdown List ให้เลือกจากข้อมูลที่มีอยู่เท่านั้น</li>
<li>คอลัมน์ `Allocation Date` ต้องกรอกในรูปแบบ **YYYY-MM-DD** (เช่น 2025-10-06)</li>
<li>บันทึกไฟล์ Excel และอัปโหลดในฟอร์มด้านล่างนี้</li>
</ol>
</div>
</div>
<div class="card">
<div class="card-header"><i class="bi bi-upload me-1"></i>อัปโหลดไฟล์ Excel</div>
<div class="card-body">
<form action="import_allocations.php" method="post" enctype="multipart/form-data">
<div class="mb-3">
<label for="alloc_file" class="form-label">เลือกไฟล์ Excel ที่ต้องการนำเข้า:</label>
<input class="form-control" type="file" id="alloc_file" name="alloc_file" accept=".xlsx, .xls" required>
</div>
<button type="submit" class="btn btn-primary"><i class="bi bi-cloud-arrow-up-fill me-1"></i> เริ่มนำเข้าข้อมูล</button>
</form>
</div>
</div>
</div>
<?php include '../template/footer.php'; ?>