Selasa, 18 Oktober 2022

APLIKASI WEBSITE RUANG BACA IMPLEMENTASI DAN PENGEMBANGAN RUANG BACA DENGAN KONSEP KOMPUTASI AWAN

KELOMPOK 1 CLOUD COMPUTING

LAPORAN PROJEK LAYANAN KOMPUTASI AWAN

WEBSITE RUANG BACA 







Disusun Oleh :

Ahmad Fikri Husaini 20050974030

Serly Ardila 20050974056

Muhammad Iqbal Haqiqi 20050974075







Pendahuluan

Saat ini perkembangan zaman sudah mulai maju, teknologi serba instan dan cepat haruslah ditunjang dengan perkembangan teknologi informasi yang lebih canggih. Hal ini tentunya harus memberikan dampak positif terhadap kehidupan manusia. Tantangan yang dihadapi dunia pendidikan di era globalisasi salah satunya adalah perkembangan ilmu pengetahuan dan teknologi yang begitu cepat dan mendasar (Oviyanti, 2013).

Sistem informasi ruang baca merupakan penerapan sistem informasi yang diterapkan pada sekolah guna meningkatkan produktivitas (Yuniwati, 2012). Penerapan sistem informasi ruang baca berbasis web dapat diterapkan di berbagai tempat salah satunya sekolah. Ruang baca merupakan media pembelajaran yang dapat digunakan oleh setiap orang untuk memperoleh informasi terkait jenis buku, judul buku, tahun terbit dan pengarang buku. Website aplikasi ruang baca akan dikembangkan dengan menggunakan teknologi Web2.0. Web2.0 merupakan generasi baru dari semua teknologi yang ada di web. Pengguna dapat menjalankan aplikasi perangkat lunak melalui browser.

Dengan uraian diatas, penulis ingin membuat aplikasi berbasis web dengan judul “Website Ruang Baca” yang memadukan dengan layanan komputasi awan dan hosting, sehingga website dapat diakses dimanapun dan kapanpun. Adapun pada laporan ini akan dijabarkan mengenai deskripsi, perancangan, dan hasil implementasi website. Kami berharap aplikasi ruang baca ini nantinya dapat digunakan oleh pengguna untuk memenuhi kebutuhan membaca.


Analisis Kebutuhan

Beberapa alat yang dibutuhkan dalam perancangan aplikasi antara lain:

1. Cloud Service

Layanan ini dirancang untuk menyediakan akses yang mudah dan terjangkau kepada aplikasi dan sumber daya, tanpa perlu membangun infrastruktur internal. Hanya perlu internet untuk mengakses data dan menjalankan aplikasi yang berada di dalam Cloud. Ada tiga jenis/tingkatan pada layanan berbasis Cloud, yaitu SaaS (Software as a Service), IaaS (Infrastructure as a Service) dan PaaS (Platform as a Service).

2. Database

Database atau yang dikenal juga dengan istilah basis data adalah sekumpulan data yang dikelola dengan sedemikian rupa berdasarkan ketentuan tertentu yang saling berkaitan sehingga memudahkan dalam pengelolaannya. Lewat pengelolaan itulah pengguna bisa mendapatkan kemudahan dalam mencari sebuah informasi, membuang informasi, maupun menyimpan informasi.

3.  Cloud Hosting

Cloud hosting adalah jenis hosting yang menggunakan beberapa server untuk menyeimbangkan beban (load) server dan memaksimalkan server uptime.  cloud hosting dikenal sebagai web hosting yang memiliki reliabilitas dan fleksibilitas yang tinggi dibandingkan dengan jenis web host lainnya.

Melakukan Subscription Cloud Service

Sebelum melangkah ke tahap lebih lanjut, tentunya membutuhkan layanan komputasi awan. Salah satunya adalah Amazon. Amazon  adalah multinasional teknologi Perusahaan Amerika yang berfokus pada e-niaga, komputasi awan, streaming digital dan kecerdasan buatan. Amazon Web Service (AWS) adalah layanan komputasi awan yang dimiliki amazon yang menyediakan penyimpanan cloud, menghitung daya, penyebaran aplikasi, manajemen akun pengguna, penyimpanan data, alat untuk mengelola dan mengendalikan perangkat.  



Amazon Web Service

Amazon yang mencakup campuran infrastruktur sebagai layanan (infrastructure as a service – IaaS), platform sebagai layanan (platform as a service – PaaS), dan paket perangkat lunak yang dikemas sebagai penawaran layanan (software as a service – SaaS). Layanan AWS dapat menawarkan alat organisasi seperti daya komputasi, penyimpanan basis data, dan layanan pengiriman konten. Pada layanan cloud computing AWS, terdapat EC2 (Elastic Compute Cloud), LightSail, Elastic Beanstalk, EKS (Elastic Container Service for Kubernetes) , dan AWS Lambda . Dalam kategori ini, terdapat DMS (Database Migration Service), SMS (Server Migration Service), dan Snowball.


Amazon ECS2

Pada bagian ini akan disajikan mengenai tampilan dan fitur-fitur apa saja yang ada pada aplikasi “Website Ruang baca”. Adapun dalam pengimplementasiannya aplikasi ruang baca ini dilengkapi dengan menu login, lupa password,reset password, konfirmasi logout, dashboard admin, table buku, table pengguna, searching data buku/pengguna di table, insert data buku, update data buku, konfirmasi saat delete buku/pengguna, insert data pengguna, update data pengguna, dashboard murid/guru, searching data buku di dashboard murid/guru, detail buku (favorite button), dan tab buku favorite.


Membangun Website

Pada bagian ini akan disajikan mengenai tampilan dan fitur-fitur apa saja yang ada pada aplikasi “Website Ruang baca”. Adapun dalam pengimplementasiannya aplikasi ruang baca ini dilengkapi dengan menu login, lupa password,reset password, konfirmasi logout, dashboard admin, table buku, table pengguna, searching data buku/pengguna di table, insert data buku, update data buku, konfirmasi saat delete buku/pengguna, insert data pengguna, update data pengguna, dashboard murid/guru, searching data buku di dashboard murid/guru, detail buku (favorite button), dan tab buku favorite.

Kebutuhan:

·         PHP 7.4.33

·         Bootstrap 5

·         sb-Admin template

·         Jquery library

·         Sweetalert2


 1.   Membuat database.sql

Dalam membangun sebuah webite, hal pertama yang kita perlukan adalah membuat sebuah database untuk menyimpan semua data pada website yang sedang dibangun. Untuk membuat database pada mysql pertama yang harus kita lakukan adalah membuat file database.sql lalu kemudian di import ke dalam database.

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

START TRANSACTION;

SET time_zone = "+00:00";

CREATE TABLE `buku` (

  `Id_buku` int(11) NOT NULL,

  `Judul` varchar(50) NOT NULL,

  `Penulis` varchar(50) NOT NULL,

  `Penerbit` varchar(50) NOT NULL,

  `Id_kategori` int(11) NOT NULL,

  `Tahun_terbit` year(4) NOT NULL,

  `Cover_buku` varchar(100) NOT NULL,

  `file_buku` varchar(100) NOT NULL,

  `deskripsi` text NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `favorite` (

  `Id_user` int(11) NOT NULL,

  `Id_buku` int(11) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `kategori` (

  `id_kategori` int(11) NOT NULL,

  `nama_kategori` varchar(50) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `log_user` (

  `id_log` int(11) NOT NULL,

  `nama_user` varchar(25) NOT NULL,

  `Ip` varchar(25) NOT NULL,

  `Access_from` varchar(254) NOT NULL,

  `Waktu` timestamp NOT NULL DEFAULT current_timestamp()

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `user` (

  `id_user` int(11) NOT NULL,

  `Email` varchar(25) NOT NULL,

  `Username` varchar(25) NOT NULL,

  `Password` varchar(32) NOT NULL,

  `Hak_Akses` varchar(10) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `buku`

  ADD PRIMARY KEY (`Id_buku`),

  ADD KEY `Id_kategori` (`Id_kategori`);

ALTER TABLE `favorite`

  ADD PRIMARY KEY (`Id_user`,`Id_buku`),

  ADD KEY `Id_buku` (`Id_buku`);

ALTER TABLE `kategori`

  ADD PRIMARY KEY (`id_kategori`);

ALTER TABLE `log_user`

  ADD PRIMARY KEY (`id_log`);

ALTER TABLE `user`

  ADD PRIMARY KEY (`id_user`);

ALTER TABLE `buku`

  MODIFY `Id_buku` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=58;

ALTER TABLE `kategori`


  MODIFY `id_kategori` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

ALTER TABLE `log_user`

  MODIFY `id_log` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=186;

ALTER TABLE `user`

  MODIFY `id_user` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

ALTER TABLE `buku`

  ADD CONSTRAINT `buku_ibfk_1` FOREIGN KEY (`Id_kategori`) REFERENCES `kategori` (`id_kategori`);

ALTER TABLE `favorite`

  ADD CONSTRAINT `favorite_ibfk_1` FOREIGN KEY (`Id_user`) REFERENCES `user` (`id_user`) ON DELETE CASCADE,

  ADD CONSTRAINT `favorite_ibfk_2` FOREIGN KEY (`Id_buku`) REFERENCES `buku` (`Id_buku`) ON DELETE CASCADE;

COMMIT;


2.      Membuat file konfigurasi koneksi.php

Hal berikutnya yang harus dilakukan adalah membuat fle konfigurasi yang nantinya akan digunakan sebagai penghubung antara database dengan website kita. Yang perlu dilakukan adalah membuat file baru dengan nama koneksi.php

<?php

$user = "root";

$pass = "";

try {

    $koneksi = new PDO('mysql:host=localhost;dbname=openbook', $user, $pass);

    $koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $th) {

    die("koneksi gagal" . $th->getMessage());

};

Keterangan:

Secara default, untuk username dan password pada mysql adalah root dengan password kosong dan tipe hostnya adalah localhost.


dbname=openbook

Isikan dengan nama database sesuai dengan yang kita buat di phpmyadmin.


3.  Login

Pada halaman ini akan ditampilkan fitur login. Fitur login akan muncul saat akan mengakses halaman utama. Sistem akan mengecek apakah saat ini user sedang dalam sesi login, jika tidak di cek apakah ada cookie pada komputer. User saat ini yang dijadikan acuan untuk login langsung. Di Dalam halaman login terdapat fitur captcha matematika serta fitur remember me untuk menggunakan cookie dan ada link untuk mengarahkan ke halaman lupa password.

2. Lupa Password


Source code:

Buat file baru dengan nama login.php, lalu masukan soruce code berikut kedalam file login.php. Setelah itu buat file baru bernama proses.php yang nantinya difungsikan sebagai proses untuk melakukan validasi data login dan captcha yang dimasukan.

a.  Captcha

<?php

include "koneksi.php";

session_start();

if (isset($_SESSION['waktu'])) {

    header('location: index.php');

}

$rand1 = rand(1, 9);

$rand2 = rand(1, 9);

$operator = array('*', '+');

$randoperator = $operator[rand(0, 1)];

switch ($randoperator) {

    case "+":

        $math = $rand1 + $rand2;

        $_SESSION['cap'] = $math;

        break;

    case "*":

        $math = $rand1 * $rand2;

        $_SESSION['cap'] = $math;

        break;

};

?>

Letakan code untuk membuat captcha pada bagian atas sebelum tag <HTML>

b.  Login 

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <meta name="description" content="">

    <meta name="author" content="">

    <title>Open Book</title>

    <!-- Custom fonts for this template-->

    <link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">

    <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

    <!-- Custom styles for this template-->

    <link href="css/sb-admin-2.min.css" rel="stylesheet">

</head>

<body class="bg-gradient-primary py-5">

    <div class="container my-5">

        <!-- Outer Row -->

        <div class="row justify-content-center">

            <div class="col-md-5">

                <div class="card o-hidden border-0 shadow-lg my-5 mx-auto">

                    <div class="card-body p-0">

                        <!-- Nested Row within Card Body -->

                        <div class="p-5">

                            <div class="text-center">

                                <h1 class="h4 text-gray-900 mb-4">Selamat Datang!

                                    <?php if (!empty($_COOKIE['username'])) {

                                        echo "cookie " . $_COOKIE['username'];

                                    }; ?>

                                </h1>

                            </div>

                            <form class="user" method="post" action="proses.php">

                                <div class="form-group">

                                    <input type="text" class="form-control form-control-user" value="

                                    <?php

                                    if (!empty($_COOKIE['last_in'])) {

                                        echo $_COOKIE['last_in'];

                                    } ?>" placeholder="masukan username atau email!" name="user" required>

                                </div>

                                <div class="form-group">

                                    <input type="password" class="form-control form-control-user" placeholder="Password" name="pass" required>

                                </div>

                                <div class="form-group">

                                    <div class="input-group">

                                        <span class="input-group-text mr-2">

                                            <?php echo $rand1 . " " . $randoperator . " " . $rand2; ?>

                                        </span>

                                        <input type="number" name="captcha" class="form-control form-control-user" placeholder="captcha">

                                    </div>

                                </div>

                                <div class="form-group">

                                    <div class="custom-control custom-checkbox small">

                                        <input type="checkbox" class="custom-control-input" id="customCheck" name="remember">

                                        <label class="custom-control-label" for="customCheck">Remember

                                            Me</label>

                                    </div>

                                </div>

                                <button class="btn btn-primary btn-user btn-block" type="submit" name="submit">Login</button>

                            </form>

                            <hr>

                            <div class="text-center">

                                <a class="small" href="forgot-password.php">Lupa Password?</a>

                            </div>

                        </div>

                    </div>

                </div>

            </div>

        </div>

    </div>

    <!-- Bootstrap core JavaScript-->

    <script src="vendor/jquery/jquery.min.js"></script>

    <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

    <!-- Core plugin JavaScript-->

    <script src="vendor/jquery-easing/jquery.easing.min.js"></script>

    <!-- Custom scripts for all pages-->

    <script src="js/sb-admin-2.min.js"></script>

</body>

</html>


c.  Proses.php

<?php

include "koneksi.php";

session_start();

if (isset($_POST['submit'])) {

    if ($_SESSION['cap'] == $_POST['captcha']) {

        $sukses = 0;

        $user = $_POST['user'];

        $pass = md5($_POST['pass']);

 

        $data[] = $user;

        $data[] = $pass;

        $data[] = $user;

        $data[] = $pass;

 

        $query = 'SELECT * FROM user WHERE Email=? AND Password=? OR Username=? AND Password=?';

        $select = $koneksi->prepare($query);

        $select->execute($data);

        $ambil = $select->fetch();

 

        $count = $select->rowCount();

 

        $cookie_user;

 

        if ($count == 1) {

 

            $agent = $_SERVER['HTTP_USER_AGENT'];

            $ip = $_SERVER['REMOTE_ADDR'];

            $sukses = 1;

            if ($sukses == 1) {

                $carry[] = $ambil['Username'];

                $carry[] = $ip;

                $carry[] = $agent;

 

                $query = 'INSERT INTO log_user (nama_user, Ip, Access_from) VALUE (?,?,?)';

                $insert = $koneksi->prepare($query);

                $insert->execute($carry);

                $sukses = 0;

            };

            $_SESSION['waktu'] = time();

            $_SESSION['username'] = $ambil['Username'];

            $_SESSION['id'] = $ambil['id_user'];

            $_SESSION['akses'] = $ambil['Hak_Akses'];

            setcookie("last_in", $user);

            setcookie("username", 'null', time() + 3600);

            if (isset($_POST['remember'])) {

                setcookie("username", $ambil['Username'], time() + 3600);

                setcookie("akses", $ambil['Hak_Akses'], time() + 3600);

            };

            header("location: index.php");

        } else {

            echo '<script>alert("Gagal Login");window.location="login.php"</script>';

        }

    } else {

        echo "<script type='text/javascript'>alert('captcha yang dimasukan salah');window.location='login.php'</script>";

    }

}

4.  Lupa Password

Saat user mengakses menu login dan user lupa dengan password akunnya, maka saat menekan tombol lupa password pada menu login akan diarahkan ke menu lupa password untuk konfirmasi email yang digunakan.

 

Source code:

<?php

include "koneksi.php";

setcookie("forgot", null, time() - 3600);

if (isset($_POST['submit'])) {

    $query = 'SELECT Email FROM user WHERE Email= :email';

    $select = $koneksi->prepare($query);

    $select->bindParam(':email', $_POST['email']);

    $select->execute();

    $count = $select->rowCount();

    if ($count == 1) {

        setcookie("forgot", $_POST['email'], time() + 3600);

        header("location: reset-password.php");

    } else {

        echo '<script>alert("email yang anda masukan belum terdaftar!");window.location="forgot-password.php"</script>';

    }

};

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <meta name="description" content="">

    <meta name="author" content="">

    <title>AHMAD FIKRI HUSAINI</title>

    <!-- Custom fonts for this template-->

    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" rel="stylesheet" type="text/css">

    <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

 

    <!-- Custom styles for this template-->

    <link href="css/sb-admin-2.min.css" rel="stylesheet">

</head>

<body class="bg-gradient-primary py-5">

    <div class="container my-5">

        <!-- Outer Row -->

        <div class="row justify-content-center">

            <div class="col-md-5">

                <div class="card o-hidden border-0 shadow-lg my-5">

                    <div class="card-body p-0">

                        <!-- Nested Row within Card Body -->

                        <div class="p-5">

                            <div class="text-center">

                                <h1 class="h4 text-gray-900 mb-2">Lupa Password?</h1>

                                <p class="mb-4">

                                    Kami mengerti!, pastikan email yang anda masukan benar untuk

                                    membantu kami menkonfirmasi bahwa ini benar-benar anda!</p>

                            </div>

                            <form class="user" action="" method="POST">

                                <div class="form-group">

                                    <input type="email" class="form-control form-control-user"

                                    name="email" placeholder="Masukan Email Address...">

                                </div>

                                <button class="btn btn-primary btn-user btn-block" type="submit"

                                name="submit">Reset

                                    Password</button>

                            </form>

                            <hr>

                            <div class="text-center">

                                <a class="small" href="login.php">Sudah Punya Akun?, Log In!</a>

                            </div>

                        </div>

                    </div>

                </div>

            </div>

        </div>

    </div>

    <!-- Bootstrap core JavaScript-->

    <script src="vendor/jquery/jquery.min.js"></script>

    <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

    <!-- Core plugin JavaScript-->

    <script src="vendor/jquery-easing/jquery.easing.min.js"></script>

    <!-- Custom scripts for all pages-->

    <script src="js/sb-admin-2.min.js"></script>

</body>

</html>

5.   Reset Password

Setelah email konfirmasi maka user akan di arahkan ke menu reset password untuk mereset password email yang telah dimasukan sebelumnya.

bhhh

Source code:

<?php

include "koneksi.php";

if (!isset($_COOKIE['forgot'])) {

    header("location:forgot-password.php");

};

if (isset($_POST['submit'])) {

    $pass = md5($_POST['new']);

    $query = 'UPDATE user SET Password= :pass WHERE Email= :email';

    $update = $koneksi->prepare($query);

    $update->bindParam(':pass', $pass);

    $update->bindParam(':email', $_COOKIE['forgot']);

    $update->execute();

    setcookie("forgot", null, time() - 3600);

    echo '<script>alert("password berhasil di reset");window.location="login.php";</script>';

}

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <meta name="description" content="">

    <meta name="author" content="">

    <title>AHMAD FIKRI HUSAINI</title>

    <!-- Custom fonts for this template-->

    <link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">

    <link       href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"

        rel="stylesheet">

    <!-- Custom styles for this template-->

    <link href="css/sb-admin-2.min.css" rel="stylesheet">

</head>

<body class="bg-gradient-primary py-5">

    <div class="container my-5">

        <!-- Outer Row -->

        <div class="row justify-content-center">

            <div class="col-md-5">

                <div class="card o-hidden border-0 shadow-lg my-5">

                    <div class="card-body p-0">

                        <!-- Nested Row within Card Body -->

 

                        <div class="p-5">

                            <div class="text-center">

                                <h1 class="h4 text-gray-900 mb-2">Masukan Password Baru</h1>

                            </div>

                            <form name="form" class="user" action="" method="POST">

                                <div class="form-group">

                                    <input type="password" class="form-control form-control-user"

                                    name="new" placeholder="Masukan Password Baru..."

                                    maxlength="8" required>

                                </div>

                                <div class="form-group">

                                    <input type="password" class="form-control form-control-user"

                                    name="conf" placeholder="Confirmasi Password Baru...">

                                </div>

                                <button class="btn btn-primary btn-user btn-block" type="submit"

                                name="submit" onclick="return valid();">Reset Password</button>

                            </form>

                            <hr>

                            <div class="text-center">

                                <a class="small" href="login.php">Sudah Punya Akun?, Log In!</a>

                            </div>

                        </div>

                    </div>

                </div>

            </div>

        </div>

 

    </div>

    <script>

    function valid() {

        if (document.form.new.value != document.form.conf.value) {

            alert("Password dan confirmasi password tidak sama!!");

            document.form.conf.focus();

            return false;

        }

        return true;

    }

    </script>

    <!-- Bootstrap core JavaScript-->

    <script src="vendor/jquery/jquery.min.js"></script>

    <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

 

    <!-- Core plugin JavaScript-->

    <script src="vendor/jquery-easing/jquery.easing.min.js"></script>

 

    <!-- Custom scripts for all pages-->

    <script src="js/sb-admin-2.min.js"></script>

</body>

</html>

6.   Konfirmasi logout

Pada menu dashboard baik admin atau anggota(siswa/guru) terdapat tombol logout pada kanan atas bagian navigasi. Ketika tombol di klik akan memunculkan sebuah dialog box untuk konfirmasi logout.

Terdapat tiga tahapan pembuatan tombol logout dan konfirmasi untuk logout. pertama -tama yang perlu kita buat adalah tombol logout yang nantinya akan ditempelkan pada hdeader.php dan menjadi trigger dari modal box untuk menu konfirmasi logout. Kedua adalah membuat modal box logout sebagai menu konfirmasi user untuk melakukan logout yang nantinya ditempelkan pada file header.php. Dan yang terakhir adalah file bernama logout.php yang berfungsi untuk mengakhiri sesi login pengguna dan mengembalikan pengguna ke menu login.


Source code:

a.  Modal-box logout (header.php)

<div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"

        aria-hidden="true">

        <div class="modal-dialog" role="document">

            <div class="modal-content">

                <div class="modal-header">

                    <h5 class="modal-title" id="exampleModalLabel">Yakin ingin Logout?</h5>

                    <button class="close" type="button" data-dismiss="modal" aria-label="Close">

                        <span aria-hidden="true">×</span>

                    </button>

                </div>

                <div class="modal-body">Memilih "Logout" berarti mengakhiri sesi anda saat ini.</div>

                <div class="modal-footer">

                    <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>

                    <a class="btn btn-primary" href="logout.php">Logout</a>

                </div>

            </div>

        </div>

    </div>


b.  Logout button (header.php)

<li class="nav-item dropdown no-arrow mx-1">

                            <a href="#" class="nav-link">

                                <button class="btn btn-primary btn-icon-split" data-toggle="modal"

                                    data-target="#logoutModal">

                                    <span class="icon text-white-50">

                                        <i class="fas fa-sign-out-alt"></i>

                                    </span>

                                    <span class="text">Logout</span>

                                </button>

                            </a>

                        </li>


c.  Logout.php

<?php

session_start();

session_destroy();

setcookie("username", "", time() - 3600);

setcookie("akses", "", time() - 3600);

header('Location: login.php');

 

Note: source code button dan modal box sudah tertempel pada source code header.php yang diberikan oleh penulis.

7.   Dashboard admin

Pada menu dashboard admin terdapat dua tombol untuk mengakses menu table pengguna dan buku serta pada bagian navigasi sebelh kiri terdapat tombol untuk mengarahkan ke dashboard, tab favorite dan list table.

 


8.    Dashboard murid/guru

Pada menu dashboard ini, pengguna dapat melihat daftar buku sesuai dengan kategori pada buku tersebut serta pada tiap-tiap kategori diberikan fitur carousel untuk melihat buku-buku lain yang terdaftar di satu kategori yang sama.

 

Untuk membuat menu index/dashboard seperti di atas. Penulis memecah file menjadi 3 bagian yaitu header.php yang menampung source file seperti css serta fitur-fitur yang berkaitan dengan header (dropdown menu, sidebar, logout button, profile picture), index.php yang berisi halaman dashboard sesuai dengan role masing-masing user, dan footer.php yang berisi bagian bawah body dari index.php dan menyimpan source javascript/jquery.

Source code:

a.   Header.php

<?php

session_start();

$timeout = 1;

$timeout = $timeout * 3600;

if (isset($_SESSION['waktu'])) {

    $elapsed_time = time() - $_SESSION['waktu'];

    // header('refresh:59');

    if ($elapsed_time >= $timeout && $_COOKIE['username'] == 'null') {

        session_destroy();

        echo "<script type='text/javascript'>alert('Sesi telah berakhir');window.location='logout.php'</script>";

    } else {

        $_SESSION['waktu'] = time();

    }

} else {

    header("location: login.php");

}

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <meta name="description" content="">

    <meta name="author" content="">

    <title>Open Book</title>

    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" rel="stylesheet"

        type="text/css">

    <link

        href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"

        rel="stylesheet">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"

        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css">

    <link rel="stylesheet" href="https://cdn.datatables.net/1.12.1/css/dataTables.bootstrap5.min.css">

    <link rel="stylesheet" href="css/style.css">

    <link href="css/sb-admin-2.min.css" rel="stylesheet">

</head>

<body id="page-top">

    <div class="modal fade" id="logoutModal" tabindex="-1" role="dialog"

        aria-labelledby="exampleModalLabel" aria-hidden="true">

        <div class="modal-dialog" role="document">

            <div class="modal-content">

                <div class="modal-header">

                    <h5 class="modal-title" id="exampleModalLabel">Yakin ingin Logout?</h5>

                    <button class="close" type="button" data-dismiss="modal" aria-label="Close">

                        <span aria-hidden="true">×</span>

                    </button>

                </div>

                <div class="modal-body">Memilih "Logout" berarti mengakhiri sesi anda saat ini.</div>

                <div class="modal-footer">

                    <button class="btn btn-secondary" type="button" data-dismiss="modal">

                        Cancel

                    </button>

                    <a class="btn btn-primary" href="logout.php">Logout</a>

                </div>

            </div>

        </div>

    </div>

    <div id="wrapper">

        <ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion"

            id="accordionSidebar">

            <a class="sidebar-brand d-flex align-items-center justify-content-center" href="index.php">

                <div class="sidebar-brand-icon">

                    <img src="uploads/logo/logo.png" class="img-fluid rounded-circle" width="50px">

                </div>

                <div class="sidebar-brand-text mx-3">Open Book</div>

            </a>

            <hr class="sidebar-divider my-0">

            <li class="nav-item active">

                <a class="nav-link" href="index.php">

                    <i class="fas fa-fw fa-tachometer-alt"></i>

                    <span>Dashboard</span></a>

            </li>

            <li class="nav-item active">

                <a class="nav-link" href="favorite.php">

                    <i class="fa-solid fa-star"></i>

                    <span>Favorite</span></a>

            </li>

            <hr class="sidebar-divider">

            <?php if ($_SESSION['akses'] == 'admin' || $_SESSION['akses'] == 'petugas') { ?>

            <div class="sidebar-heading">

                Interface

            </div>

            <li class="nav-item">

                <a class="nav-link collapsed" href="#" data-toggle="collapse"

                    data-target="#collapsetables"

                    aria-expanded="true" aria-controls="collapsetables">

                    <i class="fas fa-fw fa-table"></i>

                    <span>Tables</span>

                </a>

                <div id="collapsetables" class="collapse" aria-labelledby="headingtables"

                    data-parent="#accordionSidebar">

                    <div class="bg-white py-2 collapse-inner rounded">

                        <?php if ($_SESSION['akses'] == 'admin') { ?>

                        <a id="pgn" class="collapse-item" href="pengguna.php">Pengguna</a>

                        <?php }; ?>

                        <a id="bk" class="collapse-item" href="buku.php">Buku</a>

                    </div>

                </div>

            </li>

            <?php }; ?>

            <hr class="sidebar-divider d-none d-md-block">

            <div class="text-center d-none d-md-inline">

                <button class="rounded-circle border-0" id="sidebarToggle"></button>

            </div>

        </ul>

        <div id="content-wrapper" class="d-flex flex-column">

            <div id="content">

                <nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">

                    <button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">

                        <i class="fa fa-bars"></i>

                    </button>

                    <ul class="navbar-nav ml-auto">

                        <li class="nav-item dropdown no-arrow d-sm-none">

                            <a class="nav-link dropdown-toggle" href="#" id="searchDropdown"

                                role="button" data-toggle="dropdown" aria-haspopup="true"

                                aria-expanded="false">

                                <i class="fas fa-search fa-fw"></i>

                            </a>

                            <div class="dropdown-menu dropdown-menu-right p-3 shadow animated--grow-in"

                                aria-labelledby="searchDropdown">

                                <form class="form-inline mr-auto w-100 navbar-search">

                                    <div class="input-group">

                                        <input type="text" class="form-control bg-light border-0 small"

                                            placeholder="Search for..." aria-label="Search"

                                            aria-describedby="basic-addon2">

                                        <div class="input-group-append">

                                            <button class="btn btn-primary" type="button">

                                                <i class="fas fa-search fa-sm"></i>

                                            </button>

                                        </div>

                                    </div>

                                </form>

                            </div>

                        </li>

                        <li class="nav-item dropdown no-arrow mx-1">

                            <a href="#" class="nav-link">

                                <button class="btn btn-primary btn-icon-split" data-toggle="modal"

                                    data-target="#logoutModal">

                                    <span class="icon text-white-50">

                                        <i class="fas fa-sign-out-alt"></i>

                                    </span>

                                    <span class="text">Logout</span>

                                </button>

                            </a>

                        </li>

                        <div class="topbar-divider d-none d-sm-block"></div>

                        <li class="nav-item">

                            <a class="nav-link" href="#" id="" role="">

                                <span class="mr-2 d-none d-lg-inline text-gray-600 small">

                                    <?php if (isset($_SESSION['username'])) {

                                        echo $_SESSION['username'];

                                    } ?>

                                </span>

                                <img class="img-profile rounded-circle" src="img/undraw_profile.svg">

                            </a>

                        </li>

                    </ul>

                </nav>


b.   Index.php

<?php include "header.php"; include "koneksi.php"; ?>

<div class="container-fluid">

 

    <?php if ($_SESSION['akses'] == 'admin' || $_SESSION['akses'] == 'petugas') { ?>

 

    <div class="row">

        <?php if ($_SESSION['akses'] == 'admin') { ?>

        <div class="col-xl-3 col-md-6 mb-4">

            <div class="card border-left-primary shadow h-100 py-2">

                <div class="card-body">

                    <div class="row no-gutters align-items-center">

                        <div class="col mr-2">

                            <div class="mb-1">

                                <a href="pengguna.php" class="text-xs font-weight-bold text-primary

                                text-uppercase" style="text-decoration: none;">Pengguna</a>

                            </div>

                        </div>

                        <div class="col-auto">

                            <i class="fas fa-user fa-2x text-gray-300"></i>

                        </div>

                    </div>

                </div>

            </div>

        </div>

        <?php }; ?>

        <div class="col-xl-3 col-md-6 mb-4">

            <div class="card border-left-success shadow h-100 py-2">

                <div class="card-body">

                    <div class="row no-gutters align-items-center">

                        <div class="col mr-2">

                            <div class="mb-1">

                                <a href="buku.php" class="text-xs font-weight-bold text-uppercase

                                text-success" style="text-decoration: none;">Buku</a>

                            </div>

                        </div>

                        <div class="col-auto">

                            <i class="fas fa-book fa-2x text-gray-300"></i>

                        </div>

                    </div>

                </div>

            </div>

        </div>

    </div>

    <?php }; ?>

    <?php if ($_SESSION['akses'] == 'anggota') { ?>

    <div class="container-fluid text-center my-3">

        <div class="row mx-auto my-auto">

            <div class="d-flex flex-row mx-3 mb-3">

                <div>

                    <form class="d-flex" action="" method="POST">

                        <input class="form-control me-2" type="text" placeholder="cari...." name="key">

                        <button class="btn btn-primary mx-1" type="submit" name="submit"><span

                                class="fa fa-search"></span></button>

                    </form>

                </div>

            </div>

            </form>

            <?php

            if (isset($_POST['submit']) && $_POST['key'] != '') {

                $key = '%' . $_POST['key'] . '%';

 

                $query = 'SELECT * FROM buku, kategori WHERE buku.Id_kategori = kategori.id_kategori

                AND (buku.Judul LIKE :judul

                OR buku.Penulis LIKE :penulis

                OR buku.Penerbit LIKE :penerbit OR buku.Tahun_terbit LIKE :terbit

                OR kategori.nama_kategori LIKE :kategori);';

                $search = $koneksi->prepare($query);

                $search->bindParam(':judul', $key);

                $search->bindParam(':penulis', $key);

                $search->bindParam(':penerbit', $key);

                $search->bindParam(':terbit', $key);

                $search->bindParam(':kategori', $key);

                $search->execute();

                foreach ($search as $value) {

            ?>

            <div class="col-md-4 mb-3">

                <div class="card h-100 border-0">

                    <div class="row p-2">

                        <div class="col-md-3">

                            <img class="img-fluid" src="uploads/cover/

                            <?php echo $value['Cover_buku']; ?>">

                        </div>

                        <div class="col-md-9">

                            <div class="row">

                                <div class="col-12">

                                    <h5 class="float-start text-start">

                                        <b><a href="detail.php?id=<?php echo $value['Id_buku']; ?>"

                                                style="text-decoration: none; color: black;">

                                                <?php echo $value['Judul'] .

                                                " (" . $value['Tahun_terbit'] . ")"; ?></a></b>

                                    </h5>

                                </div>

                                <div class="col-12">

                                    <strong

                                        class="float-start text-start text-primary mt-n1">

                                        <?php echo $value['Penulis']; ?>

                                    </strong>

                                </div>

                                <div class="col-12">

                                    <p class="float-start text-start text-secondary mt-n1">

                                        <?php echo $value['Penerbit']; ?>

                                    </p>

                                </div>

                                <div class="col-12">

                                    <div class="row">

                                        <div class="col-md-12 col-lg-6 mt-2">

                                            <p class="bg-secondary text-white text-center

                                            rounded-pill">

                                                <?php echo $value['nama_kategori']; ?></p>

                                        </div>

                                    </div>

                                </div>

                            </div>

                        </div>

                    </div>

                </div>

            </div>

            <?php };

        } else if(isset($_POST['submit']) && $_POST['key'] == '')

            { echo "<script>window.location='index.php';</script>";

            } else { ?>

            <?php

 

            $query = $koneksi->prepare('SELECT * FROM buku, kategori

            Where buku.Id_kategori = kategori.id_kategori

            GROUP BY kategori.id_kategori;');

            $query->execute();

            $kate = $query->fetchAll();

            foreach ($kate as $k) {

       

        ?>

            <div class="container-fluid px-4">

                <div class="row">

                    <div class="col mt-3">

                        <div class="text-start">

                            <strong class="mx-2 text-uppercase"

                                style="color: black;"><b>

                                    <?php echo $k['nama_kategori']; ?>

                                </b>

                            </strong>

                        </div>

                    </div>

                </div>

            </div>

            <div id="<?php echo $k['nama_kategori']; ?>" class="carousel slide carousel-fade"

                data-bs-ride="carousel" data-bs-interval="false">

                <div class="carousel-inner" role="listbox">

                    <?php

                        $query = $koneksi->prepare("SELECT * FROM buku INNER JOIN kategori

                        ON buku.Id_kategori = kategori.id_kategori

                        WHERE kategori.id_kategori = ?");

                        $query->execute(array($k['id_kategori']));

                        $data = $query->fetchAll();

                        $cc = 0;

                        foreach ($data as $carousel) {

                            $cc++;

                    ?>

                    <div class="carousel-item <?php if ($cc == 1) { echo 'active'; };?>">

                        <div class="col-sm">

                            <div class="card h-100 border-0">

                                <div class="row p-2">

                                    <div class="col-md-3">

                                        <img class="img-fluid"

                                            src="uploads/cover/<?php echo $carousel['Cover_buku'] ?>">

                                    </div>

                                    <div class="col-md-9">

                                        <div class="row">

                                            <div class="col-12">

                                                <h5 class="float-start text-start">

                                                    <b><a href="detail.php?id=

                                                    <?php echo $carousel['Id_buku']; ?>"

                                                            style="text-decoration: none;

                                                            color: black;">

                                                            <?php echo $carousel['Judul']; ?></a></b>

                                                </h5>

                                            </div>

                                            <div class="col-12">

                                                <strong

                                                    class="float-start text-start text-primary mt-n1">

                                                    <?php echo $carousel['Penulis']; ?></strong>

                                            </div>

                                            <div class="col-12">

                                                <p class="float-start text-start text-secondary mt-n1">

                                                    <?php echo $carousel['Penerbit'];; ?></p>

                                            </div>

                                            <div class="col-12">

                                                <div class="row">

                                                    <div class="col-md-12 col-lg-6 mt-2">

                                                        <p class="bg-secondary text-white text-center

                                                            rounded-pill">

                                                            <?php echo $carousel['nama_kategori']; ?>

                                                        </p>

                                                    </div>

                                                </div>

                                            </div>

                                        </div>

                                    </div>

                                </div>

                            </div>

                        </div>

                    </div>

                    <?php }; ?>

                </div>

                <a class="carousel-control-prev" href="#

                <?php echo $k['nama_kategori']; ?>" role="button"

                    data-bs-slide="prev">

                    <i class="fa fa-arrow-left"></i>

                </a>

                <a class="carousel-control-next" href="#

                <?php echo $k['nama_kategori']; ?>" role="button"

                    data-bs-slide="next">

                    <i class="fa fa-arrow-right"></i>

                </a>

            </div>

            <?php }; }; ?>

        </div>

    </div>

    <?php }; ?>

    <?php include "footer.php"; ?>


c.   Footer.php

</div>

</div>

</div>

<a class="scroll-to-top rounded" href="#page-top">

    <i class="fas fa-angle-up"></i>

</a>

 

<script src="vendor/jquery/jquery.min.js"></script>

<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

<script src="vendor/jquery-easing/jquery.easing.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/2.9.2/umd/popper.min.js"></script>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"

    integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous">

</script>

<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script>

<script src="https://cdn.datatables.net/1.12.1/js/dataTables.bootstrap5.min.js"></script>

<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>

<script src="js/sb-admin-2.min.js"></script>

<script>

jQuery(document).ready(function($) {

    $('.fav').on('click', function(e) {

        e.preventDefault();

        var id_user = $(this).attr('user_data');

        var id_buku = $(this).attr('buku_data');

        var aksi = $(this).attr('aksi');

        if (aksi == "favorite") {

            $(this).attr('aksi', 'unfavorite') // Change the div method attribute to Unlike

            $('#' + id_user).replaceWith('<button id="' + id_user +

                '" class="fav btn btn-warning float-end" user_data="' + id_user +

                '" buku_data="' + id_buku +

                '" aksi="favorite"><i class="fa-regular fa-star"></i></button>')

        } else {

            $(this).attr('aksi', 'unfavorite')

            $('#' + id_user).replaceWith('<button id="' + id_user +

                '" class="fav btn btn-outline-warning float-end" user_data="' + id_user +

                '" buku_data="' + id_buku +

                '" aksi="favorite"><i class="fa-regular fa-star"></i></button>')

        }

        $.ajax({

            url: 'proses_fav.php',

            type: 'GET',

            data: {

                id_user: id_user,

                id_buku: id_buku,

                aksi: aksi

            },

            cache: false,

            success: function(data) {}

        });

    });

});

let items1 = document.querySelectorAll('.carousel .carousel-item')

 

items1.forEach((el) => {

    const minPerSlide = 3

    let next = el.nextElementSibling

    for (var i = 1; i < minPerSlide; i++) {

        if (!next) {

            // wrap carousel by using first child

            next = items1[0]

        }

        let cloneChild = next.cloneNode(true)

        el.appendChild(cloneChild.children[0])

        next = next.nextElementSibling

    }

})

$(document).ready(function() {

    $('.table').DataTable({

        lengthMenu: [

            [5, 10, 25, 50, -1],

            [5, 10, 25, 50, 'All'],

        ],

    });

});

$('.confirm').click(function() {

    var id = $(this).attr('data-id')

    var judul = $(this).attr('data-judul')

    Swal.fire({

        title: 'Confirmasi',

        text: "apakah anda yakin menghapus data buku dengan judul " + judul + "?",

        icon: 'warning',

        showCancelButton: true,

        confirmButtonColor: '#3085d6',

        cancelButtonColor: '#d33',

        confirmButtonText: 'Ya, Hapus!'

    }).then((result) => {

        if (result.isConfirmed) {

            Swal.fire({

                icon: 'success',

                title: 'Berhasil!',

                text: 'Data Berhasil Di Hapus!!',

                showConfirmButton: false,

                timer: 1500

            })

            window.location = "delete_buku.php?id=" + id;

        }

    })

});

$('.confirm2').click(function() {

    var id = $(this).attr('data-id')

    var email = $(this).attr('data-email')

    Swal.fire({

        title: 'Confirmasi',

        text: "apakah anda yakin menghapus data buku dengan email " + email + "?",

        icon: 'warning',

        showCancelButton: true,

        confirmButtonColor: '#3085d6',

        cancelButtonColor: '#d33',

        confirmButtonText: 'Ya, Hapus!'

    }).then((result) => {

        if (result.isConfirmed) {

            Swal.fire({

                icon: 'success',

                title: 'Berhasil!',

                text: 'Data Berhasil Di Hapus!!',

                showConfirmButton: false,

                timer: 1500

            })

            window.location = "delete_pengguna.php?id=" + id;

        }

    })

});

</script>

 

</body>

 

</html>


9.    Tabel buku

Pada bagian ini terdapat beberapa fitur seperti tombolmuntuk menambahkan data buku baru, update buku, melihat detail dari buku serta menghapus buku dan fitur pencarian dan pagination dari table buku.

 

Buat file baru dengan nama buku.php lalu kemudian masukan source code berikut yang nantinya berfungsi untuk menampilkan tabel data buku beserta dengan fitur CRUD nya.

Source code:

<?php

include "header.php";

include "koneksi.php";

if ($_SESSION['akses'] == 'anggota') {

    echo '<script>window.location="index.php"</script>';

}

 

?>

<!-- Begin Page Content -->

<div class="container-fluid">

 

    <div class="card shadow mb-4">

        <div class="card-header py-3">

            <h6 class="m-0 font-weight-bold text-primary">Tabel Buku</h6>

        </div>

        <div class="card-body">

            <div class="d-flex mb-1 justify-content-end">

                <div class="d-flex flex-row">

                    <div>

                        <a href="insert_buku.php" class="btn btn-success">

                            <span class="fa fa-plus"></span></a>

                    </div>

                </div>

            </div>

            <div class="table-responsive">

                <table class="table table-bordered table-responsive-md" id="dataTable">

                    <thead>

                        <tr>

                            <th>No</th>

                            <th>judul buku</th>

                            <th>cover buku</th>

                            <th>penulis</th>

                            <th>penerbit</th>

                            <th>kategori</th>

                            <th>tahun terbit</th>

                            <th>action</th>

                        </tr>

                    </thead>

                    <tbody id="mytable">

                        <?php

                            $query = $koneksi->prepare("SELECT * FROM buku, kategori

                            Where buku.Id_kategori = kategori.id_kategori");

                            $query->execute();

                            $data = $query->fetchAll();

                            $no = 1;

                            foreach ($data as $value) {

                            ?>

                        <tr>

                            <td><?php echo $no++; ?></td>

                            <td><?php echo $value['Judul'] ?></td>

                            <td class="text-center"><img src="uploads/cover/

                                <?php echo $value['Cover_buku'] ?>"

                                style="width: 40px;"></td>

                            <td><?php echo $value['Penulis'] ?></td>

                            <td><?php echo $value['Penerbit'] ?></td>

                            <td><?php echo $value['nama_kategori']; ?></td>

                            <td><?php echo $value['Tahun_terbit'] ?></td>

                            <td class="">

                                <div class="row justify-content-center">

                                    <div class="col-md-3 p-2"> <a href="detail.php?id=

                                        <?php echo $value['Id_buku']; ?>"

                                        class="btn btn-success">

                                        <span class="fa fa-eye"></span>

                                    </a></div>

                                    <div class="col-md-3 p-2"><a

                                            href="update_buku.php?id=<?php echo $value['Id_buku']; ?>"

                                            class="btn btn-warning">

                                            <span class="fa fa-edit"></span>

                                        </a></div>

                                    <div class="col-md-3 p-2"> <a href="#" class="btn btn-danger

                                        confirm" data-id="<?php echo $value['Id_buku']; ?>"

                                        data-judul="<?php echo $value['Judul']; ?>">

                                            <span class="fa fa-trash"></span>

                                        </a></div>

                                </div>

                            </td>

                        </tr>

                        <?php }; ?>

                    </tbody>

                </table>

            </div>

        </div>

    </div>

 

</div>

<!-- /.container-fluid -->

<?php include "footer.php"; ?>


10.   Table Pengguna

Pada bagian ini terdapat beberapa fitur seperti tombol untuk menambahkan data pengguna baru, update pengguna, serta menghapus data pengguna dan fitur pencarian dan pagination dari table pengguna.

 

Buat file baru dengan nama pengguna.php lalu kemudian masukan source code berikut yang nantinya berfungsi untuk menampilkan tabel data pengguna yang tersimpan pada database.

Source code:

<?php

include "header.php";

include "koneksi.php";

if ($_SESSION['akses'] != 'admin') {

    echo '<script>window.location="index.php"</script>';

}

?>

<div class="container-fluid">

 

    <div class="card shadow mb-4">

        <div class="card-header py-3">

            <h6 class="m-0 font-weight-bold text-primary">Tabel Pengguna</h6>

        </div>

        <div class="card-body">

            <div class="d-flex mb-1 justify-content-end">

                <div>

                    <a href="insert_pengguna.php" class="btn btn-success">

                        <span class="fa fa-plus"></span></a>

                </div>

            </div>

            <div class="table-responsive">

                <table class="table table-bordered table-responsive-md" id="dataTable"

                    width="100%" cellspacing="0">

                    <thead>

                        <tr>

                            <th>No</th>

                            <th>Email</th>

                            <th>username</th>

                            <th>password</th>

                            <th>hak akses</th>

                            <th>action</th>

                        </tr>

                    </thead>

                    <tbody id="mytable">

                        <?php

                            $query = $koneksi->prepare("SELECT * FROM user");

                            $query->execute();

                            $data = $query->fetchAll();

                            $no = 1;

                            foreach ($data as $value) {

                            ?>

                        <tr>

                            <td><?php echo $no++; ?></td>

                            <td><?php echo $value['Email'] ?></td>

                            <td><?php echo $value['Username'] ?></td>

                            <td><?php echo $value['Password'] ?></td>

                            <td><?php echo $value['Hak_Akses'] ?></td>

                            <td class="">

                                <div class="row justify-content-center">

                                    <div class="col-md-3 p-1">

                                        <a href="update_pengguna.php?id=

                                        <?php echo $value['id_user']; ?>"

                                            class="btn btn-warning">

                                            <span class="fa fa-edit"></span>

                                        </a>

                                    </div>

                                    <div class="col-md-3 p-1"><a href="#"

                                        class="btn btn-danger confirm2"

                                        data-id="<?php echo $value['id_user']; ?>"

                                        data-email="<?php echo $value['Email']; ?>">

                                            <span class="fa fa-trash"></span>

                                        </a></div>

                                </div>

                            </td>

                        </tr>

                        <?php }; ?>

                    </tbody>

                </table>

            </div>

        </div>

    </div>

 

</div>

<!-- /.container-fluid -->

<?php include "footer.php"; ?>


11.    Searching data buku/pengguna di table

Pada fitur searching yang ada pada tabel buku dan pengguna dapat dilakukan secara realtime dengan bantuan data tables. Dengan begitu pencarian dapat dilakukan berkali-kali tanpa harus reset halaman berkali-kali.  

Berikutnya adalah pembuatan fitur searching data table dan pagination yang dibantu dengan penggunaan jquery library yaitu datatables jquery library. Untuk membuatnya adalah pastikan sudah import library jquery dan datatables pada footer.php. Jika sudah masukan source code berikut pada bagian <script></script>

Source code:

$(document).ready(function() {

    $('.table').DataTable({

        lengthMenu: [

            [5, 10, 25, 50, -1],

            [5, 10, 25, 50, 'All'],

        ],

    });

});


12. Insert data buku

Pada fitur ini admin dapat memasukan data buku berupa judul, penulis, penerbit, deskripsi buku, tahun terbit, kategori dan file cover dan bukunya

Langkah pembuatannya iyalah dengan membuat file baru dengan nama insert_buku.php dan kemudian masukan source code dibawah.

Source code:

<?php

include "header.php";

include "koneksi.php";

 

if ($_SESSION['akses'] == 'anggota') {

    echo '<script>window.location="index.php"</script>';

}

 

if (isset($_POST['submit'])) {

 

    $title = $_POST['judul'];

    $writer = $_POST['penulis'];

    $publisher = $_POST['penerbit'];

    $cat = $_POST['kategori'];

    $release = $_POST['tahun'];

    $desc = $_POST['deskripsi'];

    $pdfname = $_FILES['pdf']['name'];

    $pdftemp = $_FILES['pdf']['tmp_name'];

    $pdftype = $_FILES['pdf']['type'];

    $pdfsize = $_FILES['pdf']['size'];

    $target_dir_pdf = ('uploads/book/');

    $removeExtension_pdf = explode('.', basename($pdfname));

    $rename_pdf = date("m-d-y") . "." . date("h-i-s") . "."$title . "." . end($removeExtension_pdf);

    $target_file_pdf = $target_dir_pdf . $rename_pdf;

    $filename = $_FILES['cover']['name'];

    $filetemp = $_FILES['cover']['tmp_name'];

    $filetype = $_FILES['cover']['type'];

    $filesize = $_FILES['cover']['size'];

    $target_dir = ('uploads/cover/');

    $removeExtension = explode('.', basename($filename));

    $rename = date("m-d-y") . "." . date("h-i-s") . "."$title . "." . end($removeExtension);

    $target_file = $target_dir . $rename;

 

    $data[] = $title;

    $data[] = $writer;

    $data[] = $publisher;

    $data[] = $cat;

    $data[] = $release;

    $data[] = $rename;

    $data[] = $rename_pdf;

    $data[] = $desc;

 

    if (($filetype == 'image/png' || $filetype == 'image/jpg' || $filetype == 'image/jpeg') &&

        ($pdftype == 'application/pdf')) {

        if (move_uploaded_file($filetemp, $target_file) &&

            move_uploaded_file($pdftemp, $target_file_pdf)) {

            $query = 'INSERT INTO buku

            (Judul, Penulis, Penerbit, Id_kategori, Tahun_terbit, Cover_buku, file_buku, deskripsi)

            VALUE (?,?,?,?,?,?,?,?)';

            $insert = $koneksi->prepare($query);

            $insert->execute($data);

 

            echo '<script>alert("Berhasil Tambah Data");window.location="buku.php"</script>';

        }

    } else {

        echo '<script>alert("hanya dapat upload file PNG/JPEG/JPG dan PDF");

        window.location="insert_buku.php"</script>';

    }

}

 

?>

 

<div class="container-fluid">

    <div class="card">

        <div class="card-body">

            <h4 class="card-title">Insert Data Buku</h4>

            <form action="" method="POST" enctype="multipart/form-data">

                <div class="form-group">

                    <label>Judul buku</label>

                    <input type="text" value="" class="form-control" name="judul" maxlength="50"

                        required>

                </div>

                <div class="form-group">

                    <label>Penulis</label>

                    <input type="text" value="" class="form-control" name="penulis" maxlength="50"

                        required>

                </div>

                <div class="form-group">

                    <label>Penerbit</label>

                    <input type="text" value="" class="form-control" name="penerbit" maxlength="50"

                        required>

                </div>

                <div class="form-group">

                    <label>Deskripsi</label>

                    <textarea class="form-control" name="deskripsi" style="height: 100px" required>

                </textarea>

                </div>

                <div class="form-group">

                    <label>Cover buku</label>

                    <input class="form-control" type="file" id="cover" name="cover" required>

                </div>

                <div class="form-group">

                    <label>File buku</label>

                    <input class="form-control" type="file" id="pdf" name="pdf" required>

                </div>

                <div class="form-group">

                    <label>Tahun terbit</label>

                    <select class="form-control" name="tahun" id="" required>

                        <?php for ($i = 1990; $i <= 2025; $i++) { ?>

                        <option value="<?php echo $i; ?>"><?php echo $i; ?></option>

                        <?php }; ?>

                    </select>

                </div>

                <div class="form-group">

                    <label>Kategori</label>

                    <select class="form-control" name="kategori" id="" required>

                        <?php

                        $query = $koneksi->prepare("SELECT * FROM kategori");

                        $query->execute();

                        $data = $query->fetchAll();

                        foreach ($data as $value) {

                        ?>

                        <option value="<?php echo $value['id_kategori']; ?>">

                        <?php echo $value['nama_kategori']; ?>

                        </option>

                        <?php }; ?>

                    </select>

                </div>

                <button type="submit" name="submit" class="btn btn-success" name="Insert">

                    <i class="fa fa-plus"> </i>

                    Insert</button>

            </form>

        </div>

    </div>

</div>

 

<?php

include "footer.php";

?>


13. Update data buku

Pada bagian ini admin dapat memperbaharui data buku dari judul hingga file-file yang berhubungan dengan buku tersebut dan terdapat preview dari cover yang lama dan preview nama file bukunya.

 

Langkah pembuatannya iyalah dengan membuat file baru dengan nama update_buku.php dan kemudian masukan source code dibawah.

Source code:

<?php

include "header.php";

include "koneksi.php";

 

if ($_SESSION['akses'] == 'anggota') {

    echo '<script>window.location="index.php"</script>';

}

 

if (isset($_POST['submit'])) {

 

    $title = $_POST['judul'];

    $writer = $_POST['penulis'];

    $publisher = $_POST['penerbit'];

    $cat = $_POST['kategori'];

    $release = $_POST['tahun'];

    $desc = $_POST['deskripsi'];

    $id = $_POST['id'];

    $pdfname = $_FILES['pdf']['name'];

    $pdftemp = $_FILES['pdf']['tmp_name'];

    $pdftype = $_FILES['pdf']['type'];

    $pdfsize = $_FILES['pdf']['size'];

    $filename = $_FILES['cover']['name'];

    $filetemp = $_FILES['cover']['tmp_name'];

    $filetype = $_FILES['cover']['type'];

    $filesize = $_FILES['cover']['size'];

 

    if ($filename == "" && $pdfname == "") {

 

        $data[] = $title;

        $data[] = $writer;

        $data[] = $publisher;

        $data[] = $cat;

        $data[] = $release;

        $data[] = $desc;

        $data[] = $id;

        $query = 'UPDATE buku SET Judul=?, Penulis=?, Penerbit=?, Id_kategori=?, Tahun_terbit=?,

        deskripsi=? WHERE Id_buku =?';

        $update = $koneksi->prepare($query);

        $update->execute($data);

        echo '<script>alert("Berhasil Edit Data");window.location="buku.php"</script>';

       

    } else if ($filename != "" && $pdfname == "") {

 

        $target_dir = ('uploads/cover/');

        $removeExtension = explode('.', basename($filename));

        $rename = date("m-d-y") . "." . date("h-i-s") . "."$title . "." . end($removeExtension);

        $target_file = $target_dir . $rename;

 

        $cover = 'SELECT Cover_buku FROM buku WHERE Id_buku= ?';

        $proses = $koneksi->prepare($cover);

        $proses->execute(array($id));

        $lama = $proses->fetch();

        if ($filetype == 'image/png' || $filetype == 'image/jpg' || $filetype == 'image/jpeg') {

            $data[] = $title;

            $data[] = $writer;

            $data[] = $publisher;

            $data[] = $cat;

            $data[] = $release;

            $data[] = $rename;

            $data[] = $desc;

            $data[] = $id;

            if (move_uploaded_file($filetemp, $target_file)) {

                unlink('uploads/cover/' . $lama['Cover_buku']);

                $query = 'UPDATE buku SET Judul=?, Penulis=?, Penerbit=?, Id_kategori=?,

                Tahun_terbit=?, Cover_buku=?, deskripsi=? WHERE Id_buku=?';

                $update = $koneksi->prepare($query);

                $update->execute($data);

 

                echo '<script>alert("Berhasil edit buku");window.location="buku.php"</script>';

            }

        } else {

            echo '<script>alert("hanya dapat upload file PNG/JPEG/JPG");

                window.location="update_buku.php?id=' . $id . '"</script>';

        }

    } else if ($filename == "" && $pdfname != "") {

        $target_dir = ('uploads/book/');

        $removeExtension = explode('.', basename($pdfname));

        $rename = date("m-d-y") . "." . date("h-i-s") . "."$title . "." . end($removeExtension);

        $target_file = $target_dir . $rename;

 

        $file = 'SELECT file_buku FROM buku WHERE Id_buku= ?';

        $proses = $koneksi->prepare($file);

        $proses->execute(array($id));

        $lama = $proses->fetch();

        if ($pdftype == 'application/pdf') {

            $data[] = $title;

            $data[] = $writer;

            $data[] = $publisher;

            $data[] = $cat;

            $data[] = $release;

            $data[] = $rename;

            $data[] = $desc;

            $data[] = $id;

            if (move_uploaded_file($pdftemp, $target_file)) {

                unlink('uploads/book/' . $lama['file_buku']);

                $query = 'UPDATE buku SET Judul=?, Penulis=?,

                Penerbit=?, Id_kategori=?, Tahun_terbit=?,

                file_buku=?, deskripsi=?

                WHERE Id_buku=?';

                $update = $koneksi->prepare($query);

                $update->execute($data);

 

                echo '<script>alert("Berhasil edit buku");window.location="buku.php"</script>';

            }

        } else {

            echo '<script>alert("hanya dapat upload file PDF");

            window.location="update_buku.php?id=' . $id . '"</script>';

        }

    } else if ($filename != "" && $pdfname != "") {

 

        $target_dir_pdf = ('uploads/book/');

        $removeExtension_pdf = explode('.', basename($pdfname));

        $rename_pdf = date("m-d-y") . "." . date("h-i-s") . "." .  

        $title . "." . end($removeExtension_pdf);

        $target_file_pdf = $target_dir_pdf . $rename_pdf;

        $target_dir = ('uploads/cover/');

        $removeExtension = explode('.', basename($filename));

        $rename = date("m-d-y") . "." . date("h-i-s") . "."$title . "." . end($removeExtension);

        $target_file = $target_dir . $rename;

 

        $file = 'SELECT Cover_buku, file_buku FROM buku WHERE Id_buku= ?';

        $proses = $koneksi->prepare($file);

        $proses->execute(array($id));

        $lama = $proses->fetch();

 

        if (($filetype == 'image/png' || $filetype == 'image/jpg' || $filetype == 'image/jpeg') &&

            ($pdftype == 'application/pdf')) {

            $data[] = $title;

            $data[] = $writer;

            $data[] = $publisher;

            $data[] = $cat;

            $data[] = $release;

            $data[] = $rename;

            $data[] = $rename_pdf;

            $data[] = $desc;

            $data[] = $id;

            if (move_uploaded_file($filetemp, $target_file) &&

                move_uploaded_file($pdftemp, $target_file_pdf)) {

                unlink('uploads/book/'.$lama['file_buku']);

                unlink('uploads/cover/'.$lama['Cover_buku']);

                $query = 'UPDATE buku SET Judul=?, Penulis=?,

                Penerbit=?, Id_kategori=?, Tahun_terbit=?,

                Cover_buku=?, file_buku=?, deskripsi=?

                WHERE Id_buku=?';

                $insert = $koneksi->prepare($query);

                $insert->execute($data);

   

                echo '<script>alert("Berhasil Edit Data");window.location="buku.php"</script>';

            }

        } else {

            echo '<script>alert("hanya dapat upload file PNG/JPEG/JPG dan PDF");

            window.location="update_buku.php?id=' . $id . '"</script>';

        }

 

    }

}

 

$id = $_GET['id'];

$query = 'SELECT * FROM buku WHERE Id_buku =?';

$select = $koneksi->prepare($query);

$select->execute(array($id));

$value = $select->fetch();

 

?>

 

<div class="container-fluid">

    <div class="card">

        <div class="card-body">

            <h4 class="card-title">Update Data Buku</h4>

            <form action="" method="POST" enctype="multipart/form-data">

                <div class="form-group">

                    <label>Judul buku</label>

                    <input type="text" value="<?php echo $value['Judul'] ?>"

                        class="form-control" name="judul"

                        maxlength="50" required>

                </div>

                <div class="form-group">

                    <label>Penulis</label>

                    <input type="text" value="<?php echo $value['Penulis'] ?>"

                        class="form-control" name="penulis"

                        maxlength="50" required>

                </div>

                <div class="form-group">

                    <label>Penerbit</label>

                    <input type="text" value="<?php echo $value['Penerbit'] ?>"

                        class="form-control" name="penerbit"

                        maxlength="50" required>

                </div>

                <div class="form-group">

                    <label>Deskripsi</label>

                    <textarea class="form-control" name="deskripsi" style="height: 100px"

                        required><?php echo $value['deskripsi']; ?></textarea>

                </div>

                <div class="form-group">

                    <label class="mb-1">Cover Lama</label>

                    <br>

                    <?php if ($value['Cover_buku'] != "") { ?>

                    <img src="uploads/cover/<?php echo $value['Cover_buku']; ?>"

                        width="200px" height="300px" alt="" srcset="">

                    <?php } ?>

                    <br>

                    <label class="mt-2">Cover baru</label>

                    <input class="form-control" type="file" id="cover" name="cover">

                </div>

                <div class="form-group">

                    <label class="mt-2">File buku baru</label>

                    <input class="form-control" type="file" id="pdf" name="pdf">

                    <?php if ($value['file_buku'] != '') { ?>

                    <p><strong>File lama : </strong><?php echo $value['file_buku']; }; ?></p>

                </div>

                <div class=" form-group">

                    <label>Tahun terbit</label>

                    <select class="form-control" name="tahun" id="" required>

                        <?php for ($i = 1990; $i <= 2025; $i++) { ?>

                        <option value="<?php echo $i; ?>"

                            <?php if ($value['Tahun_terbit'] == $i)

                                {

                                    echo "selected";

                                } ?>>

                            <?php echo $i; ?></option>

                        <?php }; ?>

                    </select>

                </div>

                <div class=" form-group">

                    <label>Tahun terbit</label>

                    <select class="form-control" name="kategori" id="" required>

                        <?php

                        $q = $koneksi->prepare("SELECT * FROM kategori");

                        $q->execute();

                        $d = $q->fetchAll();

                        foreach ($d as $v) {

                        ?>

                        <option value="<?php echo $v['id_kategori']; ?>"

                            <?php if ($value['Id_kategori'] == $v['id_kategori'])

                                {

                                    echo "selected";

                                } ?>>

                            <?php echo $v['nama_kategori']; ?></option>

                        <?php }; ?>

                    </select>

                </div>

                <input type="hidden" name="id" value="<?php echo $value['Id_buku']; ?>">

                <button type="submit" name="submit" class="btn btn-success" name="Insert">

                    <i class="fa fa-plus"> </i>

                    Insert</button>

            </form>

        </div>

    </div>

</div>

 

<?php

include "footer.php";

?>


14.  Konfirmasi saat delete buku/pengguna

Saat tombol delete pada tabel pengguna dan buku di tekan akan muncul modal box untuk mengkonfirmasi apakah data akan benar-benar dihapus dari database dan table.

 

Terdapat dua tahapan yang diperlukan untuk membuat delete button dan konfirmasinya. Tahap pertama adalah membuat file dengan nama delete_buku.php dan delete_pengguna.php yang digunakan untuk proses penghapusan data buku dari database serta file gambar yang ada dilokal. Kedua adalah membuat konfirmasi menggunakan sweetalert js library.

Note: source code sweetalert dan konfigurasi tombol sudah tertempel pada footer.php dan buku.php

Source code:

a.   Delete_buku.php

<?php

include('koneksi.php');

$id = $_GET['id'];

$cover = 'SELECT Cover_buku, file_buku FROM buku WHERE Id_buku= ?';

$proses = $koneksi->prepare($cover);

$proses->execute(array($id));

$data = $proses->fetch();

$sql = "DELETE FROM buku WHERE Id_buku= ?";

$row = $koneksi->prepare($sql);

$row->execute(array($id));

unlink('uploads/book/' . $data['file_buku']);

unlink('uploads/cover/' . $data['Cover_buku']);

echo '<script>window.location="buku.php"</script>';


b.  delete_pengguna.php

<?php

include('koneksi.php');

$id = $_GET['id'];

$sql = "DELETE FROM user WHERE id_user= ?";

$row = $koneksi->prepare($sql);

$row->execute(array($id));

echo '<script>window.location="pengguna.php"</script>';


c.  Sweetalert script di footer.php

$('.confirm').click(function() {

    var id = $(this).attr('data-id')

    var judul = $(this).attr('data-judul')

    Swal.fire({

        title: 'Confirmasi',

        text: "apakah anda yakin menghapus data buku dengan judul " + judul + "?",

        icon: 'warning',

        showCancelButton: true,

        confirmButtonColor: '#3085d6',

        cancelButtonColor: '#d33',

        confirmButtonText: 'Ya, Hapus!'

    }).then((result) => {

        if (result.isConfirmed) {

            Swal.fire({

                icon: 'success',

                title: 'Berhasil!',

                text: 'Data Berhasil Di Hapus!!',

                showConfirmButton: false,

                timer: 1500

            })

            window.location = "delete_buku.php?id=" + id;

        }

    })

});

$('.confirm2').click(function() {

    var id = $(this).attr('data-id')

    var email = $(this).attr('data-email')

    Swal.fire({

        title: 'Confirmasi',

        text: "apakah anda yakin menghapus data buku dengan email " + email + "?",

        icon: 'warning',

        showCancelButton: true,

        confirmButtonColor: '#3085d6',

        cancelButtonColor: '#d33',

        confirmButtonText: 'Ya, Hapus!'

    }).then((result) => {

        if (result.isConfirmed) {

            Swal.fire({

                icon: 'success',

                title: 'Berhasil!',

                text: 'Data Berhasil Di Hapus!!',

                showConfirmButton: false,

                timer: 1500

            })

            window.location = "delete_pengguna.php?id=" + id;

        }

    })

});

 


15.  Insert data pengguna

Pada fitur ini admin dapat memasukan data pengguna berupa email, username, password, dan hak akses.

 

Langkah pembuatannya iyalah dengan membuat file baru dengan nama insert_pengguna.php dan kemudian masukan source code dibawah.

Source code:

<?php

include "header.php";

include "koneksi.php";

 

if ($_SESSION['akses'] != 'admin') {

    echo '<script>window.location="index.php"</script>';

}

 

if (isset($_POST['submit'])) {

    $email = $_POST['email'];

    $name = $_POST['username'];

    $pass = md5($_POST['password']);

    $hak = $_POST['hak'];

 

    $data[] = $email;

    $data[] = $name;

    $data[] = $pass;

    $data[] = $hak;

 

    $query = 'INSERT INTO user (Email, Username, Password, Hak_Akses) VALUE (?,?,?,?)';

    $insert = $koneksi->prepare($query);

    $insert->execute($data);

 

    echo '<script>alert("Berhasil Tambah Data");window.location="pengguna.php"</script>';

}

?>

 

<div class="container-fluid">

    <div class="card">

        <div class="card-body">

            <h4 class="card-title">Insert Data Pengguna</h4>

            <form action="" method="POST">

                <div class="form-group">

                    <label>Email</label>

                    <input type="email" value="" class="form-control" name="email" required>

                </div>

                <div class="form-group">

                    <label>Username</label>

                    <input type="text" value="" class="form-control" name="username" maxlength="25"

                        required>

                </div>

                <div class="form-group">

                    <label>Password</label>

                    <input type="Password" value="" class="form-control" name="password" maxlength="8"

                        required>

                </div>

                <div class="mb-3">

                    <label>Hak Akses</label>

                    <select class="form-control" name="hak" required>

                        <option value="admin">Admin</option>

                        <option value="petugas">petugas</option>

                        <option value="anggota">Anggota</option>

                    </select>

                </div>

                <button type="submit" name="submit" class="btn btn-success" name="Insert">

                    <i class="fa fa-plus"> </i>

                    Insert</button>

            </form>

        </div>

    </div>

</div>

 

<?php

include "footer.php";

?>


16.  Update data pengguna

Pada bagian ini admin dapat memperbaharui data pengguna dari, username, password dan hak akses.

 

Langkah pembuatannya iyalah dengan membuat file baru dengan nama insert_pengguna.php dan kemudian masukan source code dibawah.

Source code:

<?php

include "header.php";

include "koneksi.php";

 

if ($_SESSION['akses'] != 'admin') {

    echo '<script>window.location="index.php"</script>';

}

 

if (isset($_POST['submit'])) {

    $user = $_POST['username'];

    $pass = md5($_POST['password']);

    $hak = $_POST['hak'];

    $id = $_POST['id'];

 

    $data[] = $user;

    $data[] = $pass;

    $data[] = $hak;

    $data[] = $id;

 

    $query = 'UPDATE user SET Username=?, Password=?, Hak_Akses=? WHERE id_user=?';

    $update = $koneksi->prepare($query);

    $update->execute($data);

 

    echo '<script>alert("Berhasil Edit Data");window.location="pengguna.php"</script>';

}

 

$id = $_GET['id'];

$query = 'SELECT * FROM user WHERE id_user =?';

$select = $koneksi->prepare($query);

$select->execute(array($id));

$value = $select->fetch();

?>

 

<div class="container-fluid">

    <div class="card">

        <div class="card-body">

            <h4 class="card-title">Update Data Pengguna</h4>

            <form action="" method="POST">

                <div class="form-group">

                    <label>Username</label>

                    <input type="text" value="<?php echo $value['Username']; ?>"

                        class="form-control" name="username" maxlength="25"

                        required>

                </div>

                <div class="form-group">

                    <label>Password</label>

                    <input type="Password" value="<?php echo $value['Password']; ?>"

                        class="form-control" name="password" maxlength="8" required>

                </div>

                <div class="mb-3">

                    <label>Hak Akses</label>

                    <select class="form-control" name="hak" required>

                        <option value="admin"

                            <?php if ($value['Hak_Akses'] == "admin") : echo "selected";

                                endif ?>>admin</option>

                        <option value="petugas"

                            <?php if ($value['Hak_Akses'] == "petugas") : echo "selected";

                                endif ?>>petugas</option>

                        <option value="anggota"

                            <?php if ($value['Hak_Akses'] == "anggota") : echo "selected";

                                endif ?>>Anggota</option>

                    </select>

                </div>

                <input type="hidden" name="id" value="<?php echo $value['id_user']; ?>">

                <button type="submit" name="submit" class="btn btn-info" name="Insert">

                    <i class="fa fa-plus"> </i>

                    Update</button>

            </form>

        </div>

    </div>

</div>

 

<?php

include "footer.php";

?>


17.  Searching data buku di dashboard murid/guru

Ini adalah fitur pencarian buku yang ada pada menu dashboard anggota(siswa/guru).

 

Sedikit berbeda dengan fitur searching pada menu tabel pengguna dan buku, untuk menu dashboard murid pembuatan fitur searching menggunakan php murni berikut adalah source code nya yang sudah penulis tempelkan sebelumnya pada index.php

Source code:

a.   Code form search

<div class="d-flex flex-row mx-3 mb-3">

                    <div>

                        <form class="d-flex" action="" method="POST">

                            <input class="form-control me-2" type="text" placeholder="cari...."

                                name="key">

                            <button class="btn btn-primary mx-1" type="submit" name="submit">

                                <span class="fa fa-search"></span></button>

                        </form>

                    </div>

                </div>


b.   Query Code

<?php

                if (isset($_POST['submit']) && $_POST['key'] != '') {

                    $key = '%' . $_POST['key'] . '%';

 

                    $query = 'SELECT * FROM buku, kategori

                    WHERE buku.Id_kategori = kategori.id_kategori

                    AND (buku.Judul LIKE :judul

                    OR buku.Penulis LIKE :penulis

                    OR buku.Penerbit LIKE :penerbit

                    OR buku.Tahun_terbit LIKE :terbit

                    OR kategori.nama_kategori LIKE :kategori);';

                    $search = $koneksi->prepare($query);

                    $search->bindParam(':judul', $key);

                    $search->bindParam(':penulis', $key);

                    $search->bindParam(':penerbit', $key);

                    $search->bindParam(':terbit', $key);

                    $search->bindParam(':kategori', $key);

                    $search->execute();

                    foreach ($search as $value) {

                ?>


18.  Detail buku (favorite button)

Ini adalah fitur untuk menampilkan detail dari masing-masing buku. Untuk mengaksesnya ada dua yaitu saat menjadi admin, tekan tombol detail (logo mata) pada table buku maka akan diarahkan ke halaman detail buku tersebut. Cara yang kedua saat menjadi anggota(siswa/guru) dengan cara menekan pada bagian judul buku maka akan langsung diarahkan ke halaman ini. Lalu pada menu detail buku terdapat tombol favorite dan saat ditekan maka akan otomatis akan mengisi tab favorite user yang mengakses saat ini.

 

Pada bagian ini penulis membuat halaman detail dari sebuah buku agar ketika judul dari buku yang ada pada dashboard siswa diklik maka akan menunjukan detail dari buku serta file pdf dari buku tersebut untuk dibaca sama halnya dengan ketika berada pada dashboard admin/guru yang nantinya juga dapat melihat detail buku dengan menekan tombol yang berlogokan mata pada tabel buku. Terdapat beberapa tahapan dalam pembuatan menu detail. Pertama adalah membuat file baru dengan nama detail.php yang nantinya berfungsi untuk menload semua data buku yyang dipilih oleh pengguna dan akan ditampilkan pada browser. Kemudian tombol favorite yang nantinya akan terintegrasi dengan menu favorite.

Source code:

<?php

include "header.php";

include "koneksi.php";

function checkFav($id_user, $id_buku, $koneksi)

{

    $data[] = $id_user;

    $data[] = $id_buku;

    $query = 'SELECT * FROM favorite WHERE Id_user =? AND Id_buku=?';

    $check = $koneksi->prepare($query);

    $check->execute($data);

    $isi = $check->fetch();

    if ($isi == 0){

        echo '<script>console.log("unfav")</script>';

        echo '<button id="' . $id_user . '" class="fav btn btn-outline-warning float-end" user_data="' .

            $id_user .'" buku_data="' . $id_buku . '" aksi="favorite">

            <i class="fa-regular fa-star"></i></button>';

    } else {

        echo '<script>console.log("fav")</script>';

        echo '<button id="' . $id_user . '" class="fav btn btn-warning float-end" user_data="' .

            $id_user .'" buku_data="' . $id_buku . '" aksi="unfavorite">

            <i class="fa-regular fa-star"></i></button>';

    }

}

$id_user = $_SESSION['id'];

$id_buku = $_GET['id'];

$query = 'SELECT * FROM buku WHERE Id_buku =?';

$select = $koneksi->prepare($query);

$select->execute(array($id_buku));

$value = $select->fetch();

?>

<div class="container">

    <div class="card py-5 px-3">

        <div class="row">

            <div class="col-md-3">

                <img class="img-fluid" src=" uploads/cover/<?php echo $value['Cover_buku']; ?>"

                    width="300px">

            </div>

            <div class="col-md-7">

                <h2 class="text-dark"><b><?php echo $value['Judul'] . " (" .

                    $value['Tahun_terbit'] . ")"; ?></b></h2>

                <h5 class="text-primary"><b><?php echo $value['Penulis']; ?></b></h5>

                <p class="text-secondary mt-n2"><?php echo $value['Penerbit']; ?></p>

                <strong>Deskripsi :</strong>

                <p style="text-align: justify;"><?php echo $value['deskripsi']; ?></p>

                <div class="row">

                    <div class="col-md-3">

                        <strong>Kategori:</strong>

                        <?php

                            $cat = $koneksi->prepare("SELECT kategori.nama_kategori as kategori

                                FROM kategori, buku

                                WHERE kategori.id_kategori = buku.Id_kategori

                                AND buku.Id_buku=?;");

                            $cat->execute(array($id_buku));

                            $dt = $cat->fetchAll();

                            foreach ($dt as $v) { ?>

                        <p class="bg-secondary text-white text-center rounded-pill">

                            <?php echo $v['kategori']; ?></p>

                        <?php }; ?>

                    </div>

                </div>

            </div>

            <div class="col-md-2">

                <?php checkFav($id_user, $id_buku, $koneksi); ?>

            </div>

            <?php if ($value['file_buku'] != '') { ?>

            <div class="col-md-12 mt-5 text-center">

                <embed src="uploads/book/<?php echo $value['file_buku'] ?>#toolbar=0"

                    type="" width="100%" height="1000">

            </div>

            <?php }; ?>

        </div>

    </div>

</div>

<?php include "footer.php"; ?>


19.  Tab buku favorite

Pada bagian ini akan menampilkan buku-buku favorite yang dimasukan oleh pengguna.

Tab menu favorite akan terkoneksi dengan menu detail. Hal ini dikarenakan pada menu detail buku terdapat tombol favorite yang ketika ditekan akan membuat buku tersebut masuk kedalam tab menu favorite. Tahapan pertama adalah membuat file dengan nama favortite.php. Tahapan kedua adalah membuat script js pada footer.php yang difungsikan untuk memberikan sinyal ketika tombol favorite ditekan yang nantinya akan diproses di prose_fav.php untuk dimasukan kedalam database. Ketiga adalah pembuatan file proses_fav.php sebagai proses memasukan atau menghapus data favorite pengguna.

Source code:

a.   Favorite.php

<?php

include "header.php";

include "koneksi.php";

?>

<div class="row">

    <div class="col mt-3 mx-4">

        <div class="text-start">

            <strong class="mx-2 text-uppercase" style="color: black;"><b>Favorite</b></strong>

        </div>

    </div>

</div>

<div class="container-fluid text-center my-3">

    <div class="row mx-auto">

        <?php

        $id = $_SESSION['id'];

        $query = $koneksi->prepare("SELECT f.Id_buku as id, b.Judul AS judul, b.Penulis AS penulis,

        b.Penerbit AS penerbit, k.nama_kategori as kategori, b.Tahun_terbit AS terbit,

        b.Cover_buku as cover FROM favorite AS f INNER JOIN buku AS b ON f.Id_buku=b.Id_buku

        INNER JOIN user AS u ON f.id_user = u.Id_user

        INNER JOIN kategori AS k ON b.Id_kategori = k.id_kategori

        WHERE f.Id_user = ?;");

        $query->execute(array($id));

        $data = $query->fetchAll();

        if ($data == false) {

            ?>

        <script>

        console.log("belum ada data")

        </script>

        <div class="col my-5 py-5">

            <h1>Belum ada data favorite</h1>

        </div>

 

        <?php } else {

 

        } foreach ($data as $value) {

        ?>

        <div class="col-md-4 mb-3">

            <div class="card h-100 border-0">

                <div class="row p-2">

                    <div class="col-md-3">

                        <img class="img-fluid" src="uploads/cover/<?php echo $value['cover']; ?>">

                    </div>

                    <div class="col-md-9">

                        <div class="row">

                            <div class="col-12">

                                <h5 class="float-start text-start">

                                    <b><a href="detail.php?id=<?php echo $value['id']; ?>"

                                            style="text-decoration: none; color: black;">

                                            <?php echo $value['judul'] .

                                                " (" . $value['terbit'] . ")"; ?>

                                    </a></b>

                                </h5>

                            </div>

                            <div class="col-12">

                                <strong

                                    class="float-start text-start text-primary mt-n1">

                                    <?php echo $value['penulis']; ?></strong>

                            </div>

                            <div class="col-12">

                                <p class="float-start text-start text-secondary mt-n1">

                                    <?php echo $value['penerbit']; ?>

                                </p>

                            </div>

                            <div class="col-12">

                                <div class="row">

                                    <div class="col-md-12 col-lg-6 mt-2">

                                        <p class="bg-secondary text-white text-center rounded-pill">

                                            <?php echo $value['kategori']; ?></p>

                                    </div>

                                </div>

                            </div>

                        </div>

                    </div>

                </div>

            </div>

        </div>

        <?php }; ?>

    </div>

</div>

 

<?php include "footer.php"; ?>

b.   Prose_fav.php

<?php

include "koneksi.php";

 

$aksi = $_GET['aksi'];

$id_user = $_GET['id_user'];

$id_buku = $_GET['id_buku'];

$data[] = $id_user;

$data[] = $id_buku;

if ($aksi == "favorite") {

    $query = 'INSERT INTO favorite (Id_user, Id_buku) VALUE (?,?)';

            $insert = $koneksi->prepare($query);

            $insert->execute($data);

} else {

    $sql = "DELETE FROM favorite WHERE Id_user= ? AND Id_buku= ?";

    $row = $koneksi->prepare($sql);

    $row->execute($data);

}

?>


c.   Jquery script di footer.php

jQuery(document).ready(function($) {

    $('.fav').on('click', function(e) {

        e.preventDefault();

        var id_user = $(this).attr('user_data');

        var id_buku = $(this).attr('buku_data');

        var aksi = $(this).attr('aksi');

        if (aksi == "favorite") {

            $(this).attr('aksi', 'unfavorite') // Change the div method attribute to Unlike

            $('#' + id_user).replaceWith('<button id="' + id_user +

                '" class="fav btn btn-warning float-end" user_data="' + id_user +

                '" buku_data="' + id_buku +

                '" aksi="favorite"><i class="fa-regular fa-star"></i></button>')

        } else {

            $(this).attr('aksi', 'unfavorite')

            $('#' + id_user).replaceWith('<button id="' + id_user +

                '" class="fav btn btn-outline-warning float-end" user_data="' + id_user +

                '" buku_data="' + id_buku +

                '" aksi="favorite"><i class="fa-regular fa-star"></i></button>')

        }

        $.ajax({

            url: 'proses_fav.php',

            type: 'GET',

            data: {

                id_user: id_user,

                id_buku: id_buku,

                aksi: aksi

            },

            cache: false,

            success: function(data) {}

        });

    });

});

let items1 = document.querySelectorAll('.carousel .carousel-item')


Melakukan Hosting

Hosting adalah layanan untuk menyimpan file dan data website pada server khusus sehingga bisa diakses oleh pengguna melalui jaringan internet. Jadi file dan data yang Anda miliki bisa diakses oleh siapa saja, kapan saja dan dari mana saja.

1.  Buka Web EC2 Amazon, lalu launch instance

2.  Lalu isi nama dan tags untuk web, dan pilih tipe Microsoft Windows

3.  Create new key pair untuk mendapat password

4.  Beri nama dan pilih ppm

5.  Setelah itu key akan otomatis terunduh

6.   Setelah itu allow HTTPS dan allow HTTP

7.   Selanjutnya konfigurasi penyimpanan dan launch instance

8.   Setelah sukses, klik View Instances

9.  Tunggu hingga status check nya selesai, klik web yang dibuat tadi dan connect

10.  Setelah itu klik RDP client

11.  Gulir kebawah dan klik Get Password

12.   Lalu upload private key yang sudah terunduh tadi, klik decrypt

13.   Jika sudah, klik download remote dekstop file dan buka file yang berekstensi .rdp

14.   Klik connect hingga selesai

15. Setelah itu copy password dari public DNS dan paste ke credentials

 

16.  Selesaikan konfigurasi remote

17.   Lalu copy folder APP pada folder xammp > htdocs

18.   Nyalakan Xampp pada remote desktop, lalu paste folder APP pada xampp > htdocs

19.  Import database.sql ke localhost (remote desktop)

20.  Lalu sisakan folder APP, dan pindah semua file ke folder backup

21. Setelah itu kembali ke Amazon EC2, pada Public IP address terdapat IP yang tertera, klik open address 54.89.107.9

22. Setelah itu akan langsung redirect ke aplikasi website OPEN BOOK, nah sekarang website dapat diakses dimana saja dan kapan saja. Lalu masukkan username dan password

23.  Seperti ini tampilan buku, lalu coba tambahkan ke favorite dengan klik tanda bintang

24.   Maka pada tab Favorite akan ada daftar buku yang ditambahkan


Link Website : 

  IP : 54.89.107.9

  DNS : https://ec2-54-89-107-9.compute-1.amazonaws.com

  Github : https://github.com/AhmadFikriHusaini/APSAPP






Tidak ada komentar:

Posting Komentar