MINI
C:
/
xampp
/
htdocs
/
lontong
/
Upload File:
files >> C:/xampp/htdocs/lontong/index.php
<?php session_start(); // Koneksi ke Database MySQL $db_host = 'localhost'; $db_user = 'root'; $db_pass = ''; $db_name = 'monitor_kartu'; $conn = new mysqli($db_host, $db_user, $db_pass, $db_name); if ($conn->connect_error) { die("Koneksi gagal: " . $conn->connect_error); } // Buat database dan tabel jika belum ada function initDatabase($conn) { $sql = "CREATE DATABASE IF NOT EXISTS monitor_kartu"; $conn->query($sql); $sql = "CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"; $conn->query($sql); $sql = "CREATE TABLE IF NOT EXISTS kartu_kredit ( id INT AUTO_INCREMENT PRIMARY KEY, nama_kartu VARCHAR(100) NOT NULL, jenis ENUM('keluar', 'dibayar') NOT NULL, nominal DECIMAL(12,2) NOT NULL, tanggal_transaksi DATE NOT NULL, deskripsi TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) )"; $conn->query($sql); // Tambah user admin default jika belum ada $sql = "SELECT id FROM users WHERE username='admin' LIMIT 1"; $result = $conn->query($sql); if ($result->num_rows == 0) { $hashed_password = password_hash('admin123', PASSWORD_DEFAULT); $sql = "INSERT INTO users (username, password) VALUES ('admin', '$hashed_password')"; $conn->query($sql); } } initDatabase($conn); // Fungsi login if (isset($_POST['login'])) { $username = $conn->real_escape_string($_POST['username']); $password = $_POST['password']; $sql = "SELECT id, password FROM users WHERE username='$username' LIMIT 1"; $result = $conn->query($sql); if ($result->num_rows == 1) { $user = $result->fetch_assoc(); if (password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $username; header("Location: ".$_SERVER['PHP_SELF']); exit(); } } $error = "Username atau password salah!"; } // Fungsi logout if (isset($_GET['logout'])) { session_destroy(); header("Location: ".$_SERVER['PHP_SELF']); exit(); } // Fungsi tambah transaksi kartu if (isset($_POST['add_transaksi'])) { if (isset($_SESSION['user_id'])) { $nama_kartu = $conn->real_escape_string($_POST['nama_kartu']); $jenis = $conn->real_escape_string($_POST['jenis']); $nominal = $conn->real_escape_string($_POST['nominal']); $tanggal = $conn->real_escape_string($_POST['tanggal']); $deskripsi = $conn->real_escape_string($_POST['deskripsi']); $sql = "INSERT INTO kartu_kredit (nama_kartu, jenis, nominal, tanggal_transaksi, deskripsi, user_id) VALUES ('$nama_kartu', '$jenis', $nominal, '$tanggal', '$deskripsi', {$_SESSION['user_id']})"; $conn->query($sql); } } // Fungsi hapus transaksi if (isset($_GET['delete'])) { if (isset($_SESSION['user_id'])) { $id = $conn->real_escape_string($_GET['delete']); $sql = "DELETE FROM kartu_kredit WHERE id=$id AND user_id={$_SESSION['user_id']}"; $conn->query($sql); header("Location: ".$_SERVER['PHP_SELF']); exit(); } } // Ambil data transaksi $transaksi = []; if (isset($_SESSION['user_id'])) { $sql = "SELECT * FROM kartu_kredit WHERE user_id={$_SESSION['user_id']} ORDER BY tanggal_transaksi DESC"; $result = $conn->query($sql); if ($result->num_rows > 0) { $transaksi = $result->fetch_all(MYSQLI_ASSOC); } } // Hitung total keluar dan dibayar $total_keluar = 0; $total_dibayar = 0; foreach ($transaksi as $trx) { if ($trx['jenis'] == 'keluar') { $total_keluar += $trx['nominal']; } else { $total_dibayar += $trx['nominal']; } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Monitor Kartu Kredit</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/css/adminlte.min.css"> <style> .saldo-negatif { color: #dc3545; } .saldo-positif { color: #28a745; } .card-outline { border-top: 3px solid #28a745 !important; } .card-outline-danger { border-top: 3px solid #dc3545 !important; } .small-box-footer { font-size: 0.9rem; } </style> </head> <body class="hold-transition sidebar-mini"> <div class="wrapper"> <?php if (isset($_SESSION['user_id'])): ?> <!-- Navbar --> <nav class="main-header navbar navbar-expand navbar-white navbar-light"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a> </li> </ul> <ul class="navbar-nav ml-auto"> <li class="nav-item dropdown"> <a class="nav-link" data-toggle="dropdown" href="#"> <i class="bi bi-person-circle"></i> <?php echo $_SESSION['username']; ?> </a> <div class="dropdown-menu dropdown-menu-right"> <a href="?logout" class="dropdown-item"><i class="bi bi-box-arrow-right"></i> Logout</a> </div> </li> </ul> </nav> <!-- Sidebar --> <aside class="main-sidebar sidebar-dark-primary elevation-4"> <a href="#" class="brand-link"> <img src="https://placehold.co/100x100" alt="Logo Aplikasi" class="brand-image img-circle elevation-3" style="opacity: .8"> <span class="brand-text font-weight-light">Monitor Kartu</span> </a> <div class="sidebar"> <div class="user-panel mt-3 pb-3 mb-3 d-flex"> <div class="image"> <img src="https://placehold.co/50x50" class="img-circle elevation-2" alt="User Image"> </div> <div class="info"> <a href="#" class="d-block"><?php echo $_SESSION['username']; ?></a> </div> </div> <nav class="mt-2"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <li class="nav-item"> <a href="#" class="nav-link active"> <i class="nav-icon bi bi-credit-card"></i> <p>Monitoring Kartu</p> </a> </li> </ul> </nav> </div> </aside> <?php endif; ?> <!-- Content Wrapper --> <div class="content-wrapper"> <div class="content-header"> <div class="container-fluid"> <div class="row mb-2"> <div class="col-sm-6"> <h1 class="m-0">Monitor Kartu Kredit</h1> </div> </div> </div> </div> <div class="content"> <div class="container-fluid"> <?php if (!isset($_SESSION['user_id'])): ?> <!-- Form Login --> <div class="row justify-content-center"> <div class="col-md-6"> <div class="card card-primary"> <div class="card-header"> <h3 class="card-title">Login</h3> </div> <form method="POST"> <div class="card-body"> <?php if (isset($error)): ?> <div class="alert alert-danger"><?php echo $error; ?></div> <?php endif; ?> <div class="form-group"> <label for="username">Username</label> <input type="text" class="form-control" id="username" name="username" placeholder="Username" required> </div> <div class="form-group"> <label for="password">Password</label> <input type="password" class="form-control" id="password" name="password" placeholder="Password" required> </div> </div> <div class="card-footer"> <button type="submit" name="login" class="btn btn-primary">Login</button> </div> </form> <div class="card-footer text-muted"> Default login: admin / admin123 </div> </div> </div> </div> <?php else: ?> <!-- Info Box --> <div class="row"> <div class="col-lg-3 col-6"> <div class="small-box bg-info"> <div class="inner"> <h3><?php echo count($transaksi); ?></h3> <p>Total Transaksi</p> </div> <div class="icon"> <i class="bi bi-list-check"></i> </div> <a href="#" class="small-box-footer">Detail <i class="fas fa-arrow-circle-right"></i></a> </div> </div> <div class="col-lg-3 col-6"> <div class="small-box bg-success"> <div class="inner"> <h3>Rp<?php echo number_format($total_dibayar, 0, ',', '.'); ?></h3> <p>Total Dibayar</p> </div> <div class="icon"> <i class="bi bi-cash-stack"></i> </div> <a href="#" class="small-box-footer">Detail <i class="fas fa-arrow-circle-right"></i></a> </div> </div> <div class="col-lg-3 col-6"> <div class="small-box bg-danger"> <div class="inner"> <h3>Rp<?php echo number_format($total_keluar, 0, ',', '.'); ?></h3> <p>Total Keluar</p> </div> <div class="icon"> <i class="bi bi-cart-plus"></i> </div> <a href="#" class="small-box-footer">Detail <i class="fas fa-arrow-circle-right"></i></a> </div> </div> <div class="col-lg-3 col-6"> <div class="small-box <?php echo ($total_keluar > $total_dibayar) ? 'bg-warning' : 'bg-secondary'; ?>"> <div class="inner"> <h3>Rp<?php echo number_format($total_keluar - $total_dibayar, 0, ',', '.'); ?></h3> <p>Selisih</p> </div> <div class="icon"> <i class="bi bi-graph-up-arrow"></i> </div> <a href="#" class="small-box-footer">Detail <i class="fas fa-arrow-circle-right"></i></a> </div> </div> </div> <!-- Form Tambah Transaksi --> <div class="row"> <div class="col-md-12"> <div class="card card-outline"> <div class="card-header"> <h3 class="card-title">Tambah Transaksi Kartu</h3> </div> <form method="POST"> <div class="card-body"> <div class="row"> <div class="col-md-4"> <div class="form-group"> <label>Nama Kartu</label> <input type="text" class="form-control" name="nama_kartu" placeholder="Contoh: BCA Platinum" required> </div> </div> <div class="col-md-2"> <div class="form-group"> <label>Jenis Transaksi</label> <select class="form-control" name="jenis" required> <option value="keluar">Pengeluaran</option> <option value="dibayar">Pembayaran</option> </select> </div> </div> <div class="col-md-2"> <div class="form-group"> <label>Nominal (Rp)</label> <input type="number" class="form-control" name="nominal" min="0" step="0.01" required> </div> </div> <div class="col-md-2"> <div class="form-group"> <label>Tanggal</label> <input type="date" class="form-control" name="tanggal" value="<?php echo date('Y-m-d'); ?>" required> </div> </div> <div class="col-md-2"> <div class="form-group"> <label> </label> <button type="submit" name="add_transaksi" class="btn btn-primary btn-block">Tambah</button> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="form-group"> <label>Deskripsi</label> <textarea class="form-control" name="deskripsi" rows="1" placeholder="Keterangan transaksi"></textarea> </div> </div> </div> </div> </form> </div> </div> </div> <!-- Tabel Transaksi --> <div class="row"> <div class="col-12"> <div class="card"> <div class="card-header"> <h3 class="card-title">Daftar Transaksi Kartu</h3> <div class="card-tools"> <div class="input-group input-group-sm"> <input type="text" class="form-control" placeholder="Cari transaksi..."> <div class="input-group-append"> <button class="btn btn-default"> <i class="fas fa-search"></i> </button> </div> </div> </div> </div> <div class="card-body table-responsive p-0"> <table class="table table-hover text-nowrap"> <thead> <tr> <th>No</th> <th>Tanggal</th> <th>Nama Kartu</th> <th>Jenis</th> <th>Nominal</th> <th>Deskripsi</th> <th>Aksi</th> </tr> </thead> <tbody> <?php if (empty($transaksi)): ?> <tr> <td colspan="7" class="text-center">Belum ada data transaksi</td> </tr> <?php else: ?> <?php foreach ($transaksi as $index => $trx): ?> <tr> <td><?php echo $index + 1; ?></td> <td><?php echo date('d M Y', strtotime($trx['tanggal_transaksi'])); ?></td> <td><?php echo htmlspecialchars($trx['nama_kartu']); ?></td> <td> <span class="badge badge-<?php echo $trx['jenis'] == 'keluar' ? 'danger' : 'success'; ?>"> <?php echo $trx['jenis'] == 'keluar' ? 'Pengeluaran' : 'Pembayaran'; ?> </span> </td> <td class="<?php echo $trx['jenis'] == 'keluar' ? 'text-danger' : 'text-success'; ?>"> <?php echo 'Rp'.number_format($trx['nominal'], 0, ',', '.'); ?> </td> <td><?php echo htmlspecialchars($trx['deskripsi']); ?></td> <td> <a href="?delete=<?php echo $trx['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('Hapus transaksi ini?')"> <i class="bi bi-trash"></i> </a> </td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> </div> </div> </div> <?php endif; ?> </div> </div> </div> <footer class="main-footer"> <div class="float-right d-none d-sm-block"> <b>Version</b> 1.0.0 </div> <strong>Copyright © <?php echo date('Y'); ?> Monitor Kartu Kredit</strong> All rights reserved. </footer> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/js/adminlte.min.js"></script> <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script> </body> </html> <?php $conn->close(); ?>
Copyright ©2021 || Defacer Indonesia