Mini Shell
<?php
// ==========================================
// 1. ส่วนประมวลผลข้อมูลเบื้องหลัง (PHP Backend)
// ==========================================
include 'db/database.php';
if (isset($_POST['action'])) {
header('Content-Type: application/json; charset=utf-8');
$action = $_POST['action'];
// -----------------------------------------
// ฟังก์ชัน: บันทึกข้อมูลผู้ใช้งาน
// -----------------------------------------
if ($action == 'save_user') {
$id = $_POST['user_id'];
$name = mysqli_real_escape_string($link, $_POST['name']);
$last_name = mysqli_real_escape_string($link, $_POST['last_name']);
$position = mysqli_real_escape_string($link, $_POST['position']);
$agency = mysqli_real_escape_string($link, $_POST['agency']);
$username = mysqli_real_escape_string($link, $_POST['username']);
$password = $_POST['password']; // รับค่ารหัสผ่านดิบ
$login_status = mysqli_real_escape_string($link, $_POST['login_status']);
$admin_status = mysqli_real_escape_string($link, $_POST['admin_status']);
// 1. เช็ค Username ซ้ำ
if (empty($id)) {
$check_dup = "SELECT COUNT(*) AS total FROM user WHERE username = '$username'";
} else {
$check_dup = "SELECT COUNT(*) AS total FROM user WHERE username = '$username' AND user_id != '$id'";
}
$res_dup = mysqli_query($link, $check_dup);
$row_dup = mysqli_fetch_assoc($res_dup);
if ($row_dup['total'] > 0) {
echo json_encode(['status' => 'error', 'message' => 'Username นี้มีผู้ใช้งานในระบบแล้ว กรุณาใช้ชื่ออื่น!']);
exit();
}
// 2. เข้ารหัสผ่าน (ตามที่คุณกำหนด)
$salt = 'tikde78uj4ujuhlaoikiksakei896';
if (empty($id)) {
// กรณี: เพิ่มผู้ใช้งานใหม่ (บังคับเข้ารหัสและบันทึกรหัสผ่าน)
$hash_password = hash_hmac('sha256', $password, $salt);
$sql = "INSERT INTO user (name, last_name, position, agency, username, password, login_status, admin_status)
VALUES ('$name', '$last_name', '$position', '$agency', '$username', '$hash_password', '$login_status', '$admin_status')";
} else {
// กรณี: แก้ไขข้อมูล
if (!empty($password)) {
// ถ้ามีการกรอกรหัสผ่านใหม่เข้ามา ให้เข้ารหัสแล้วอัปเดตทับรหัสเดิม
$hash_password = hash_hmac('sha256', $password, $salt);
$sql = "UPDATE user SET
name='$name', last_name='$last_name', position='$position', agency='$agency',
username='$username', password='$hash_password', login_status='$login_status', admin_status='$admin_status'
WHERE user_id='$id'";
} else {
// ถ้าปล่อยช่องรหัสผ่านว่างไว้ ให้อัปเดตแค่ข้อมูลอื่นๆ (รักษารหัสผ่านเดิมไว้)
$sql = "UPDATE user SET
name='$name', last_name='$last_name', position='$position', agency='$agency',
username='$username', login_status='$login_status', admin_status='$admin_status'
WHERE user_id='$id'";
}
}
if (mysqli_query($link, $sql)) {
echo json_encode(['status' => 'success', 'message' => 'บันทึกข้อมูลผู้ใช้งานสำเร็จ']);
} else {
echo json_encode(['status' => 'error', 'message' => 'เกิดข้อผิดพลาดในการบันทึก: ' . mysqli_error($link)]);
}
exit();
}
// -----------------------------------------
// ฟังก์ชัน: ลบผู้ใช้งาน
// -----------------------------------------
if ($action == 'delete_user') {
$id = mysqli_real_escape_string($link, $_POST['id']);
$sql = "DELETE FROM user WHERE user_id='$id'";
if (mysqli_query($link, $sql)) {
echo json_encode(['status' => 'success', 'message' => 'ลบข้อมูลผู้ใช้งานสำเร็จ']);
} else {
echo json_encode(['status' => 'error', 'message' => 'ไม่สามารถลบข้อมูลได้: ' . mysqli_error($link)]);
}
exit();
}
}
?>
<!doctype html>
<html lang="en">
<?php include 'head.php'; ?>
<body>
<div class="wrapper">
<?php include 'leftside.php'; ?>
<div class="main-panel">
<?php include 'header.php'; ?>
<div class="content">
<div class="container-fluid">
<div class="col-md-12">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="home.php">หน้าหลัก</a></li>
<li class="breadcrumb-item active" aria-current="page">จัดการข้อมูลผู้ใช้งาน</li>
</ol>
</nav>
<button type="button" class="btn btn-primary" id="btnAddUser">
<i class="material-icons"><i class="fas fa-user-plus"></i></i> เพิ่มผู้ใช้งาน
</button>
<?php
$sql_user = "SELECT * FROM user ORDER BY user_id DESC";
$result_user = mysqli_query($link, $sql_user);
?>
<div class="card">
<div class="card-header card-header-icon" data-background-color="rose">
<i class="material-icons"><i class="fas fa-users"></i></i>
</div>
<h4 class="card-title">จัดการข้อมูลผู้ใช้งาน</h4>
<div class="card-content">
<table class="table table-striped table-no-bordered table-hover dt-table" width="100%" style="width: 100%;">
<thead>
<tr>
<th class="text-center" style="width: 5%; font-size: 15px;">ลำดับ</th>
<th style="font-size: 15px;">ชื่อ - นามสกุล</th>
<th style="font-size: 15px;">ชื่อผู้ใช้งาน (Username)</th>
<th style="font-size: 15px;">ตำแหน่ง</th>
<th style="font-size: 15px;">หน่วยงาน</th>
<th class="text-center" style="font-size: 15px;">สิทธิ์การใช้งาน</th>
<th class="text-right" style="width: 10%; font-size: 15px;">จัดการ</th>
</tr>
</thead>
<tbody>
<?php
$i=1;
if($result_user) {
while ($row = mysqli_fetch_array($result_user)) {
// เช็คสิทธิ์การใช้งาน
$admin_text = ($row['admin_status'] == '1') ? '<span class="label label-danger" style="font-size: 12px; border-radius: 12px; padding: 4px 10px;">ผู้ดูแลระบบ (Admin)</span>' : '<span class="label label-info" style="font-size: 12px; border-radius: 12px; padding: 4px 10px;">ผู้ใช้งานทั่วไป</span>';
?>
<tr>
<td class="text-center" style="font-size: 15px;"><?php echo $i; ?></td>
<td style="font-size: 15px; color: #333;"><b><?php echo $row['name'] . ' ' . $row['last_name']; ?></b></td>
<td style="font-size: 15px;"><?php echo $row['username']; ?></td>
<td style="font-size: 14px;"><?php echo !empty($row['position']) ? $row['position'] : '-'; ?></td>
<td style="font-size: 14px;"><?php echo !empty($row['agency']) ? $row['agency'] : '-'; ?></td>
<td class="text-center"><?php echo $admin_text; ?></td>
<td class="td-actions text-right">
<button type="button" class="btn btn-success btn-round btn-edit"
data-id="<?php echo $row['user_id']; ?>"
data-name="<?php echo htmlspecialchars($row['name']); ?>"
data-lastname="<?php echo htmlspecialchars($row['last_name']); ?>"
data-position="<?php echo htmlspecialchars($row['position']); ?>"
data-agency="<?php echo htmlspecialchars($row['agency']); ?>"
data-username="<?php echo htmlspecialchars($row['username']); ?>"
data-loginstatus="<?php echo htmlspecialchars($row['login_status']); ?>"
data-adminstatus="<?php echo htmlspecialchars($row['admin_status']); ?>"
title="แก้ไขข้อมูล">
<i class="material-icons"><i class="far fa-edit"></i></i>
</button>
<button id="<?php echo $row['user_id']; ?>" title="ลบข้อมูล" class="btn btn-danger btn-round btn-delete">
<i class="material-icons"><i class="far fa-times-circle"></i></i>
</button>
</td>
</tr>
<?php $i++; }
} ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<?php include 'footer1.php'; ?>
</div>
</div>
<?php include 'footer2.php'; ?>
<?php
// ดึงข้อมูลตัวเลือกสำหรับตำแหน่งและหน่วยงาน
$opt_position = mysqli_query($link, "SELECT * FROM position ORDER BY position_id ASC");
$opt_agency = mysqli_query($link, "SELECT * FROM agency ORDER BY agency_id ASC");
?>
<div class="modal fade" id="modalUser" tabindex="-1" role="dialog" style="overflow-y: auto;">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<form id="formUser">
<div class="modal-header">
<h4 class="modal-title" id="titleUser" style="font-weight: bold;">เพิ่มข้อมูลผู้ใช้งาน</h4>
</div>
<div class="modal-body">
<input type="hidden" name="action" value="save_user">
<input type="hidden" name="user_id" id="user_id">
<h5 style="font-weight: bold; border-bottom: 1px solid #ddd; padding-bottom: 5px;">ข้อมูลส่วนตัว</h5>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="control-label">ชื่อ</label>
<input type="text" class="form-control" name="name" id="name" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="control-label">นามสกุล</label>
<input type="text" class="form-control" name="last_name" id="last_name" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="control-label">ตำแหน่ง</label>
<select class="form-control" name="position" id="position">
<option value="">-- เลือกตำแหน่ง --</option>
<?php
if($opt_position){
while($p = mysqli_fetch_array($opt_position)) {
echo '<option value="'.$p['position_name'].'">'.$p['position_name'].'</option>';
}
}
?>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="control-label">หน่วยงาน</label>
<select class="form-control" name="agency" id="agency">
<option value="">-- เลือกหน่วยงาน --</option>
<?php
if($opt_agency){
while($a = mysqli_fetch_array($opt_agency)) {
echo '<option value="'.$a['agency_name'].'">'.$a['agency_name'].'</option>';
}
}
?>
</select>
</div>
</div>
</div>
<br>
<h5 style="font-weight: bold; border-bottom: 1px solid #ddd; padding-bottom: 5px;">ข้อมูลการเข้าสู่ระบบ</h5>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="control-label">Username</label>
<input type="text" class="form-control" name="username" id="username" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="control-label">Password</label>
<input type="password" class="form-control" name="password" id="password">
<small id="password_help" class="text-danger"></small>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="control-label">สถานะการ Login (login_status)</label>
<select class="form-control" name="login_status" id="login_status" required>
<option value="100">ใช้งานปกติ</option>
<option value="0">ระงับการใช้งาน</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="control-label">สิทธิ์การใช้งาน (admin_status)</label>
<select class="form-control" name="admin_status" id="admin_status" required>
<option value="0">ผู้ใช้งานทั่วไป</option>
<option value="1">ผู้ดูแลระบบ (Admin)</option>
</select>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">ยกเลิก</button>
<button type="submit" class="btn btn-success" id="btnSaveUser">บันทึกข้อมูล</button>
</div>
</form>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$('.dt-table').DataTable({
"pagingType": "full_numbers",
"lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
responsive: true,
language: {
"search": "ค้นหา:",
"emptyTable": "ไม่มีข้อมูลในตาราง",
"info": "แสดง _START_ ถึง _END_ จาก _TOTAL_ แถว",
"lengthMenu": "แสดง _MENU_ แถว",
"paginate": { "first": "หน้าแรก", "previous": "ก่อนหน้า", "next": "ถัดไป", "last": "หน้าสุดท้าย" }
}
});
// เปิด Modal เพิ่มผู้ใช้งาน
$('#btnAddUser').click(function(){
$('#titleUser').text('เพิ่มข้อมูลผู้ใช้งาน');
$('#formUser')[0].reset(); // เคลียร์ฟอร์มทั้งหมด
$('#user_id').val('');
// บังคับกรอกรหัสผ่าน กรณีเพิ่มผู้ใช้ใหม่
$('#password').attr('required', true);
$('#password_help').text('* กรุณากำหนดรหัสผ่านสำหรับการเข้าสู่ระบบ');
$('#modalUser').modal('show');
});
// ----------------------------------------------------------------------
// ❗ แก้ไข: เปลี่ยนมาใช้ Event Delegation เพื่อให้ทำงานได้ทุกหน้า (Pagination)
// ----------------------------------------------------------------------
$(document).on('click', '.btn-edit', function() {
$('#titleUser').text('แก้ไขข้อมูลผู้ใช้งาน');
$('#user_id').val($(this).data('id'));
$('#name').val($(this).data('name'));
$('#last_name').val($(this).data('lastname'));
// Dropdown จะนำข้อมูลจากฐานข้อมูลมา Select ให้ตรงอัตโนมัติ
$('#position').val($(this).data('position'));
$('#agency').val($(this).data('agency'));
$('#username').val($(this).data('username'));
$('#login_status').val($(this).data('loginstatus'));
$('#admin_status').val($(this).data('adminstatus'));
// ยกเลิกการบังคับกรอกรหัสผ่าน กรณีแก้ไข
$('#password').val('');
$('#password').removeAttr('required');
$('#password_help').text('* ปล่อยว่างไว้ หากไม่ต้องการเปลี่ยนรหัสผ่าน');
$('#modalUser').modal('show');
});
// Submit บันทึก
$('#formUser').submit(function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: window.location.href,
data: $(this).serialize(),
success: function(response){
if(response.status === 'success'){
$('#modalUser').modal('hide');
swal({title: "สำเร็จ!", text: response.message, type: "success"}, function(){
location.reload();
});
} else {
swal("ข้อผิดพลาด!", response.message, "error");
}
},
error: function(xhr) {
swal("ข้อผิดพลาดเซิร์ฟเวอร์!", xhr.responseText.substring(0, 150) + "...", "error");
}
});
});
// ----------------------------------------------------------------------
// ❗ แก้ไข: เปลี่ยนมาใช้ Event Delegation เพื่อให้ทำงานได้ทุกหน้า (Pagination)
// ----------------------------------------------------------------------
$(document).on('click', '.btn-delete', function(e) {
e.preventDefault();
var uid = $(this).attr('id');
swal({
title: "ลบผู้ใช้งานนี้?",
text: "คุณจะไม่สามารถกู้คืนข้อมูลการเข้าระบบของบุคคลนี้ได้อีก!",
type: "warning",
showCancelButton: true,
confirmButtonColor: '#d33',
confirmButtonText: "ตกลง, ลบ!",
cancelButtonText: "ยกเลิก",
closeOnConfirm: false
}, function(isConfirm) {
if (isConfirm) {
$.ajax({
url: window.location.href,
type: 'POST',
dataType: 'json',
data: { action: 'delete_user', id: uid },
success: function(data) {
if (data.status === 'error') {
swal("แจ้งเตือน!", data.message, "error");
} else {
swal({title: "สำเร็จ!", text: data.message, type: "success"}, function(){
location.reload();
});
}
},
error: function(xhr) {
swal("ระบบขัดข้อง!", xhr.responseText.substring(0, 150) + "...", "error");
}
});
}
});
});
});
</script>
</body>
</html>
Zerion Mini Shell 1.0