Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/panahan.aplikasipos.info/
Upload File :
Current File : /home/aplikasiposinfo/www/panahan.aplikasipos.info/edit-user.php

<?php
// Include konfigurasi database
include "panggil.php";

if($_SESSION['role']  != 'admin') {
    header('Location: kegiatan.view.php');
    exit;
}

if(isset($_GET['id'])) {
    $users_show = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM users WHERE id=".$_GET['id']));
}
// Proses form submission
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = trim($_POST['name']);
    $email = trim($_POST['email']);
    $password = $_POST['password'];
    $role = $_POST['role'];
    $status = $_POST['status'];
    
    // Validasi basic
    if (!empty($name) && !empty($email) && !empty($role) && !empty($status)) {
        try {
            // Hash password untuk keamanan
            
            // Cek apakah email sudah ada
            $check_sql = "SELECT id, email FROM users WHERE email = ?";
            $check_stmt = $conn->prepare($check_sql);
            $check_stmt->bind_param("s", $email);
            $check_stmt->execute();
            $result = $check_stmt->get_result();

            $permission_update = false;
            if ($row = $result->fetch_assoc()) {
                if($row['email'] == $users_show['email']) {
                    // echo "<div class='alert alert-danger'><i class='fas fa-exclamation-circle'></i> Email masih sama!</div>";
                    $permission_update = true;
                } else {
                    if ($result->num_rows > 0) {
                        echo "<div class='alert alert-danger'><i class='fas fa-exclamation-circle'></i> Email sudah terdaftar!</div>";
                        $permission_update = false;
                    } 
                }
            } else {
                $permission_update = true;
            }
            
            if ($permission_update == true) {
                if($password != null) {
                    $hashed_password = password_hash($password, PASSWORD_DEFAULT);
                    $sql = "UPDATE users SET name=?, email=?, role=?, status=?, updated_at=NOW() WHERE id=".$_GET['id'];
                    $stmt = $conn->prepare($sql);
                    $stmt->bind_param("ssss", $name, $email, $role, $status); 
                } else {
                    $sql = "UPDATE users SET name=?, email=?, role=?, password=?, status=?, updated_at=NOW() WHERE id=".$_GET['id'];
                    $stmt = $conn->prepare($sql);
                    $stmt->bind_param("sssss", $name, $email, $role, $hashed_password, $status);  
                }
                
                if ($stmt->execute()) {
                    echo "<div class='alert alert-success'><i class='fas fa-check-circle'></i> User berhasil diubah!</div>";
                } else {
                    echo "<div class='alert alert-danger'><i class='fas fa-exclamation-circle'></i> Error: " . $conn->error . "</div>";
                }
                $stmt->close();  
            } 
            $check_stmt->close();
            
        } catch (Exception $e) {
            echo "<div class='alert alert-danger'><i class='fas fa-exclamation-circle'></i> Error: " . $e->getMessage() . "</div>";
        }
    } else {
        echo "<div class='alert alert-warning'><i class='fas fa-exclamation-triangle'></i> Semua field harus diisi!</div>";
    }
}


?>

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Edit User</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
    <style>
        body {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
        
        .card {
            border: none;
            border-radius: 20px;
            box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            backdrop-filter: blur(10px);
            background: rgba(255,255,255,0.95);
        }
        
        .card-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border-radius: 20px 20px 0 0 !important;
            padding: 2rem;
        }
        
        .form-control, .form-select {
            border-radius: 12px;
            border: 2px solid #e9ecef;
            padding: 12px 16px;
            transition: all 0.3s ease;
        }
        
        .form-control:focus, .form-select:focus {
            border-color: #667eea;
            box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
            transform: translateY(-2px);
        }
        
        .btn {
            border-radius: 12px;
            padding: 12px 24px;
            font-weight: 600;
            transition: all 0.3s ease;
        }
        
        .btn-primary {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border: none;
        }
        
        .btn-primary:hover {
            transform: translateY(-2px);
            box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
        }
        
        .btn-secondary {
            background: #6c757d;
            border: none;
        }
        
        .btn-secondary:hover {
            transform: translateY(-2px);
            background: #5a6268;
        }
        
        .btn-back {
            background: rgba(255,255,255,0.2);
            color: white;
            border: 2px solid rgba(255,255,255,0.3);
            backdrop-filter: blur(10px);
        }
        
        .btn-back:hover {
            background: rgba(255,255,255,0.3);
            color: white;
            border-color: rgba(255,255,255,0.5);
            transform: translateY(-2px);
        }
        
        .alert {
            border-radius: 12px;
            border: none;
            padding: 16px 20px;
            margin-bottom: 2rem;
        }
        
        .alert-success {
            background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
            color: #155724;
        }
        
        .alert-danger {
            background: linear-gradient(135deg, #f8d7da 0%, #f1aeb5 100%);
            color: #721c24;
        }
        
        .alert-warning {
            background: linear-gradient(135deg, #fff3cd 0%, #ffeaa7 100%);
            color: #856404;
        }
        
        .form-label {
            font-weight: 600;
            color: #495057;
            margin-bottom: 8px;
        }
        
        .input-group-text {
            background: #f8f9fa;
            border: 2px solid #e9ecef;
            border-radius: 12px 0 0 12px;
        }
        
        .form-control.with-icon {
            border-radius: 0 12px 12px 0;
        }
        
        .info-card {
            background: rgba(255,255,255,0.1);
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255,255,255,0.2);
            border-radius: 15px;
            padding: 1.5rem;
            color: white;
            margin-top: 2rem;
        }
        
        .animate-float {
            animation: float 6s ease-in-out infinite;
        }
        
        @keyframes float {
            0%, 100% { transform: translateY(0px); }
            50% { transform: translateY(-10px); }
        }
    </style>
</head>
<body>
    <div class="container py-5">
        <!-- Header dengan tombol back -->
        <div class="row mb-4">
            <div class="col-12">
                <div class="d-flex justify-content-between align-items-center">
                    <div>
                        <h1 class="text-white fw-bold mb-2">
                            <i class="fas fa-user-plus me-3"></i>Edit User
                        </h1>
                        <p class="text-white opacity-75">Ubah form dibawah untuk merubah data user ke sistem</p>
                    </div>
                    <a href="users.php" class="btn btn-back animate-float">
                        <i class="fas fa-arrow-left me-2"></i>Kembali ke halaman Users
                    </a>
                </div>
            </div>
        </div>

        <div class="row justify-content-center">
            <div class="col-lg-8">
                <div class="card">
                    <div class="card-header text-white text-center">
                        <h3 class="mb-0">
                            <i class="fas fa-user-circle me-2"></i>Informasi User
                        </h3>
                    </div>
                    
                    <div class="card-body p-5">
                        <form method="POST">
                            <div class="row mb-4">
                                <div class="col-md-6">
                                    <label for="name" class="form-label">
                                        <i class="fas fa-user text-primary me-2"></i>Nama Lengkap <span class="text-danger">*</span>
                                    </label>
                                    <input type="text" class="form-control" value="<?= $users_show['name'] ?>" id="name" name="name" 
                                           placeholder="Masukkan nama lengkap" required>
                                </div>
                                
                                <div class="col-md-6">
                                    <label for="email" class="form-label">
                                        <i class="fas fa-envelope text-primary me-2"></i>Email Address <span class="text-danger">*</span>
                                    </label>
                                    <input type="email" class="form-control" id="email" value="<?= $users_show['email'] ?>" name="email" 
                                           placeholder="[email protected]" required>
                                </div>
                            </div>

                            <div class="mb-4">
                                <label for="password" class="form-label">
                                    <i class="fas fa-lock text-primary me-2"></i>Password
                                </label>
                                <div class="input-group">
                                    <input type="password" class="form-control with-icon" id="password" name="password" 
                                           placeholder="Minimal 6 karakter">
                                    <button class="btn btn-outline-secondary" type="button" onclick="togglePassword()">
                                        <i class="fas fa-eye" id="eyeIcon"></i>
                                    </button>
                                </div>
                                <small class="text-muted">Password harus minimal 6 karakter</small>
                            </div>

                            <div class="row mb-4">
                                <div class="col-md-6">
                                    <label for="role" class="form-label">
                                        <i class="fas fa-user-tag text-primary me-2"></i>Role User <span class="text-danger">*</span>
                                    </label>
                                    <select class="form-select" id="role" name="role" required>
                                        <option value="">Pilih Role</option>
                                        <option value="admin" <?= $users_show['role'] == 'admin' ? 'selected' : '' ?>>👑 Admin</option>
                                        <option value="operator" <?= $users_show['role'] == 'operator' ? 'selected' : '' ?>>⚙️ Operator</option>
                                        <option value="viewer" <?= $users_show['role'] == 'viewer' ? 'selected' : '' ?>>👀 Viewer</option>
                                    </select>
                                </div>
                                
                                <div class="col-md-6">
                                    <label for="status" class="form-label">
                                        <i class="fas fa-toggle-on text-primary me-2"></i>Status <span class="text-danger">*</span>
                                    </label>
                                    <select class="form-select" id="status" name="status" required>
                                        <option value="">Pilih Status</option>
                                        <option value="active" <?= $users_show['status'] == 'active' ? 'selected' : '' ?>>✅ Active</option>
                                        <option value="inactive" <?= $users_show['role'] == 'inactive' ? 'selected' : '' ?>>❌ Inactive</option>
                                    </select>
                                </div>
                            </div>

                            <hr class="my-4">

                            <div class="d-flex gap-3 justify-content-end">
                                <button type="reset" class="btn btn-secondary">
                                    <i class="fas fa-undo me-2"></i>Reset Form
                                </button>
                                <button type="submit" class="btn btn-primary">
                                    <i class="fas fa-save me-2"></i>Simpan User
                                </button>
                            </div>
                        </form>
                    </div>
                </div>

                <!-- Info Card -->
                <div class="info-card">
                    <h5><i class="fas fa-info-circle me-2"></i>Informasi Penting</h5>
                    <ul class="mb-0 mt-3">
                        <li>Password akan otomatis di-enkripsi untuk keamanan</li>
                        <li>Email harus unik dan belum terdaftar sebelumnya</li>
                        <li>Role menentukan hak akses user dalam sistem</li>
                    </ul>
                </div>
            </div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        function togglePassword() {
            const passwordField = document.getElementById('password');
            const eyeIcon = document.getElementById('eyeIcon');
            
            if (passwordField.type === 'password') {
                passwordField.type = 'text';
                eyeIcon.classList.remove('fa-eye');
                eyeIcon.classList.add('fa-eye-slash');
            } else {
                passwordField.type = 'password';
                eyeIcon.classList.remove('fa-eye-slash');
                eyeIcon.classList.add('fa-eye');
            }
        }

        // Add floating animation to form elements
        document.addEventListener('DOMContentLoaded', function() {
            const formControls = document.querySelectorAll('.form-control, .form-select');
            formControls.forEach((element, index) => {
                element.style.animationDelay = (index * 0.1) + 's';
                element.addEventListener('focus', function() {
                    this.style.transform = 'translateY(-2px)';
                });
                element.addEventListener('blur', function() {
                    this.style.transform = 'translateY(0px)';
                });
            });
        });
    </script>
</body>
</html>

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]