Mini Shell

Direktori : /var/www/vhosts/ccp.ac.th/backup_full/httpdocs/fertilizer/
Upload File :
Current File : /var/www/vhosts/ccp.ac.th/backup_full/httpdocs/fertilizer/user.php

<?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