PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
// AUTO-MIGRATION: สร้างตารางให้อัตโนมัติหากยังไม่มี
$pdo->exec("
CREATE TABLE IF NOT EXISTS law_categories (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
icon VARCHAR(50) DEFAULT '⚖️',
sort_order INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS law_articles (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
category_id INT UNSIGNED NOT NULL,
title VARCHAR(255) NOT NULL,
section_number VARCHAR(50) DEFAULT NULL,
summary TEXT DEFAULT NULL,
content LONGTEXT NOT NULL,
tags VARCHAR(255) DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS consultations (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
case_code VARCHAR(20) NOT NULL UNIQUE,
fullname VARCHAR(150) NOT NULL,
phone VARCHAR(30) NOT NULL,
email VARCHAR(100) DEFAULT NULL,
service_type VARCHAR(100) NOT NULL,
details TEXT NOT NULL,
status ENUM('pending', 'in_progress', 'scheduled', 'completed', 'cancelled') NOT NULL DEFAULT 'pending',
admin_note TEXT DEFAULT NULL,
appointment_date DATETIME DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");
// SEED DEFAULT CATEGORIES
$catCount = $pdo->query("SELECT COUNT(*) FROM law_categories")->fetchColumn();
if ($catCount == 0) {
$pdo->exec("
INSERT INTO law_categories (name, icon, sort_order) VALUES
('กฎหมายแพ่งและพาณิชย์', '📜', 1),
('กฎหมายอาญา', '⚖️', 2),
('กฎหมายที่ดินและอสังหาริมทรัพย์', '🏡', 3),
('กฎหมายแรงงานและการจ้างงาน', '💼', 4),
('กฎหมายธุรกิจและสัญญาการค้า', '🏢', 5);
INSERT INTO law_articles (category_id, title, section_number, summary, content, tags) VALUES
(1, 'การทำสัญญาจะซื้อจะขายที่ดินและสิ่งปลูกสร้าง', 'ป.พ.พ. มาตรา 456', 'หลักเกณฑ์และข้อควรระวังในการทำสัญญาจะซื้อจะขาย และการวางเงินมัดจำ', 'รายละเอียดตามประมวลกฎหมายแพ่งและพาณิชย์ มาตรา 456 กำหนดให้สัญญาจะซื้อจะขายอสังหาริมทรัพย์ต้องมีหลักฐานเป็นหนังสือลงลายมือชื่อฝ่ายผู้ต้องรับผิด จึงจะสามารถฟ้องร้องบังคับคดีได้...', 'ที่ดิน, สัญญา, ซื้อขาย, มัดจำ'),
(5, 'สัญญารับเหมาก่อสร้างและการคิดค่าปรับงานล่าช้า', 'สัญญาทางธุรกิจ', 'แนวทางการกำหนดงวดงาน ค่าปรับ และการตรวจรับมอบงานก่อสร้าง', 'ในการทำสัญญารับเหมาก่อสร้าง ควรกำหนดขอบเขตงานและงวดการจ่ายเงินให้สอดคล้องกับเนื้องานจริง พร้อมทั้งระบุอัตราค่าปรับต่อวันกรณีส่งมอบงานล่าช้าอย่างชัดเจน...', 'รับเหมาก่อสร้าง, สัญญาจ้าง, ค่าปรับ');
");
}
} catch (PDOException $e) {
die("
Database Connection Error: " . htmlspecialchars($e->getMessage()) . "
");
}
// --- 2. BACKEND LOGIC CONTROLLER ---
$alert_msg = '';
$alert_type = 'success';
$active_view = $_GET['view'] ?? 'portal'; // portal | admin
// ACTION: ยื่นขอคำปรึกษา
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'submit_consult') {
$fullname = trim($_POST['fullname'] ?? '');
$phone = trim($_POST['phone'] ?? '');
$email = trim($_POST['email'] ?? '');
$service_type = trim($_POST['service_type'] ?? '');
$details = trim($_POST['details'] ?? '');
if (!empty($fullname) && !empty($phone) && !empty($service_type)) {
$case_code = 'LAW-' . strtoupper(substr(uniqid(), -6));
$stmt = $pdo->prepare("INSERT INTO consultations (case_code, fullname, phone, email, service_type, details) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$case_code, $fullname, $phone, $email, $service_type, $details]);
$alert_msg = "ส่งข้อมูลเรียบร้อยแล้ว รหัสเคสของคุณคือ: {$case_code} (โปรดบันทึกไว้สำหรับตรวจสอบสถานะ)";
} else {
$alert_msg = "กรุณากรอกข้อมูลสำคัญให้ครบถ้วน";
$alert_type = 'error';
}
}
// ACTION ADMIN: อัปเดตสถานะเคส
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_case') {
$id = intval($_POST['id']);
$status = $_POST['status'];
$admin_note = trim($_POST['admin_note'] ?? '');
$appointment_date = !empty($_POST['appointment_date']) ? $_POST['appointment_date'] : null;
$stmt = $pdo->prepare("UPDATE consultations SET status = ?, admin_note = ?, appointment_date = ? WHERE id = ?");
$stmt->execute([$status, $admin_note, $appointment_date, $id]);
$alert_msg = "อัปเดตข้อมูลเคสเรียบร้อยแล้ว";
}
// ACTION ADMIN: เพิ่มบทความกฎหมาย
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_article') {
$category_id = intval($_POST['category_id']);
$title = trim($_POST['title']);
$section_number = trim($_POST['section_number'] ?? '');
$summary = trim($_POST['summary'] ?? '');
$content = trim($_POST['content'] ?? '');
$tags = trim($_POST['tags'] ?? '');
if (!empty($title) && !empty($content)) {
$stmt = $pdo->prepare("INSERT INTO law_articles (category_id, title, section_number, summary, content, tags) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$category_id, $title, $section_number, $summary, $content, $tags]);
$alert_msg = "เพิ่มข้อกฎหมายเข้าสู่ระบบเรียบร้อยแล้ว";
}
}
// ACTION ADMIN: ลบบทความกฎหมาย
if (isset($_GET['del_article'])) {
$pdo->prepare("DELETE FROM law_articles WHERE id = ?")->execute([intval($_GET['del_article'])]);
header("Location: index.php?view=admin");
exit;
}
// QUERY DATA
$categories = $pdo->query("SELECT * FROM law_categories ORDER BY sort_order ASC")->fetchAll();
// ข้อมูลค้นหากฎหมาย
$search_q = trim($_GET['q'] ?? '');
$cat_filter = intval($_GET['category'] ?? 0);
$query_sql = "SELECT a.*, c.name as category_name, c.icon as category_icon FROM law_articles a JOIN law_categories c ON a.category_id = c.id WHERE 1=1";
$params = [];
if (!empty($search_q)) {
$query_sql .= " AND (a.title LIKE ? OR a.summary LIKE ? OR a.tags LIKE ? OR a.section_number LIKE ?)";
$p = "%{$search_q}%";
$params = [$p, $p, $p, $p];
}
if ($cat_filter > 0) {
$query_sql .= " AND a.category_id = ?";
$params[] = $cat_filter;
}
$query_sql .= " ORDER BY a.id DESC";
$stmt = $pdo->prepare($query_sql);
$stmt->execute($params);
$articles = $stmt->fetchAll();
// ข้อมูลเคสที่ค้นหา
$case_tracking = null;
if (isset($_GET['track_code']) && !empty(trim($_GET['track_code']))) {
$stmt = $pdo->prepare("SELECT * FROM consultations WHERE case_code = ? LIMIT 1");
$stmt->execute([trim($_GET['track_code'])]);
$case_tracking = $stmt->fetch();
}
// ข้อมูล Admin
$cases = [];
if ($active_view === 'admin') {
$cases = $pdo->query("SELECT * FROM consultations ORDER BY created_at DESC")->fetchAll();
}
?>
ระบบศูนย์รวมกฎหมาย & ที่ปรึกษากฎหมายออนไลน์
= $alert_type === 'success' ? '✅' : '⚠️' ?>
= $alert_msg ?>
รวบรวมตัวบทกฎหมาย มาตราสำคัญ สาระน่ารู้ และระบบยื่นเรื่องขอคำปรึกษาตรงถึงทีมกฎหมาย
📚 คลังข้อมูลกฎหมายและบทวิเคราะห์
(ผลค้นหา: "= htmlspecialchars($search_q) ?>")
พบ = count($articles) ?> รายการ
ไม่พบข้อมูลกฎหมายที่ตรงกับเงื่อนไขการค้นหา
= $art['category_icon'] ?>
= htmlspecialchars($art['category_name']) ?>
= htmlspecialchars($art['section_number']) ?>
= htmlspecialchars($art['title']) ?>
= htmlspecialchars($art['summary'] ?: mb_substr(strip_tags($art['content']), 0, 140)) ?>
= date('d/m/Y', strtotime($art['created_at'])) ?>
= $art['category_icon'] ?> = htmlspecialchars($art['category_name']) ?> = $art['section_number'] ? '('.htmlspecialchars($art['section_number']).')' : '' ?>
= htmlspecialchars($art['title']) ?>
📌 สรุปสาระสำคัญ: = nl2br(htmlspecialchars($art['summary'])) ?>
= htmlspecialchars($art['content']) ?>
#= trim(htmlspecialchars($tag)) ?>
🔍 ตรวจสอบสถานะคำปรึกษา / เคส
❌ ไม่พบข้อมูลรหัสเคสนี้ในระบบ
รหัสเคส:
= htmlspecialchars($case_tracking['case_code']) ?>
สถานะ:
['bg-amber-100 text-amber-800', '⏳ รอดำเนินการ'],
'in_progress' => ['bg-blue-100 text-blue-800', '🔍 กำลังตรวจสอบข้อกฎหมาย'],
'scheduled' => ['bg-purple-100 text-purple-800', '📅 นัดหมายเวลาแล้ว'],
'completed' => ['bg-emerald-100 text-emerald-800', '✅ ดำเนินการเสร็จสิ้น'],
'cancelled' => ['bg-slate-100 text-slate-600', '❌ ยกเลิก']
];
$st = $status_map[$case_tracking['status']] ?? ['bg-slate-100 text-slate-800', $case_tracking['status']];
?>
= $st[1] ?>
เวลานัดหมาย:
= date('d/m/Y H:i', strtotime($case_tracking['appointment_date'])) ?>
บันทึกข้อความจากทีมกฎหมาย:
= nl2br(htmlspecialchars($case_tracking['admin_note'])) ?>
⚙️ แผงควบคุมระบบหลังบ้าน (Admin App)
จัดการข้อมูลเคสคำปรึกษาและคลังความรู้กฎหมาย
📋 รายการเคสขอคำปรึกษาทั้งหมด (= count($cases) ?>)
| รหัสเคส |
ผู้ติดต่อ / เบอร์โทร |
ประเภทเรื่อง |
รายละเอียด |
วันนัด / บันทึกทนาย |
สถานะ |
จัดการ |
| ยังไม่มีรายการขอรับคำปรึกษา |
📚 ข้อกฎหมายในระบบ (= count($articles) ?>)
= htmlspecialchars($art['category_name']) ?>
= htmlspecialchars($art['title']) ?>
= htmlspecialchars($art['section_number']) ?>
= htmlspecialchars($art['summary'] ?: $art['content']) ?>
ลบ