• Tidak ada hasil yang ditemukan

LAPORAN TUGAS 2 KONEKSI DATABASE

N/A
N/A
Zhulfani FA

Academic year: 2023

Membagikan "LAPORAN TUGAS 2 KONEKSI DATABASE"

Copied!
0
0
0

Teks penuh

(1)

LAPORAN TUGAS 2 KONEKSI DATABASE

Disusun oleh:

1. Adri Audifirst (24060121140152)

2. Emerio Kevin Aryaputra (24060121120012) 3. Mahardika Putra Wardhana (24060121130076) 4. Mochammad Dzahwan Fadhloly (24060121140168) 5. Yusuf Muhammad Najhan (24060121130048)

PROGRAM STUDI S1 INFORMATIKA

DEPARTEMEN ILMU KOMPUTER/ INFORMATIKA FAKULTAS SAINS DAN MATEMATIKA

UNIVERSITAS DIPONEGORO SEMARANG

2023

(2)

BAB I

PENDAHULUAN

1. Rumusan Masalah

a. Membuat koneksi dengan database

b. Membuat halaman web untuk CRUD (create, read, update, delete) data buku beserta kategorinya

c. Membuat halaman untuk pencarian atau filter data buku berdasarkan beberapa hal berikut (bisa sekaligus):

i. Pilihan kategori ii. Kata kunci pada ISBN iii. Kata kunci pada author iv. Kata kunci pada judul buku

v. Rentang harga dari harga minimal sampai harga maksimal tertentu d. Memberikan link pada setiap buku pada hasil pencarian nomor 2 untuk

menuju halaman detail data buku tertentu yang menampilkan detail data buku beserta review dari buku tersebut. serta menambahkan pula form isian review untuk menambahkan review pada buku tertentu, lalu menyimpan input review yang diberikan ke basis data.

e. Menampilkan data order beserta detail item yang di-order. Serta menambahkan filter tanggal mulai sampai tanggal selesai untuk memfilter data order pada rentang tanggal tertentu.

f. Menampilkan rekap data dalam bentuk grafik (tentukan jenis grafik yang sesuai):

i. Jumlah data buku pada tiap kategori

ii. Total data buku yang telah di-order pada tiap kategori

g. Menampilkan tabel data buku seperti berikut yang di-span untuk setiap kategori:

2. Tujuan

a. Membuat sistem peminjaman buku dengan platform aplikasi web yang memiliki koneksi dengan database.

(3)

PEMBAHASAN

1. Menambahkan tabel categories serta menambahkan foreign key categoryid pada books

Pembahasan

a. Menambahkan tabel categories yang berisi primary key categoryid, dan name.

Lalu, ditambahkan foreign key categoryid pada tabel books.

CREATE TABLE ‘categories’ (

‘categoryid’ int(11) NOT NULL, ‘name’ varchar(100) NOT NULL );

Pertama, dibuat tabel dengan CREATE TABLE. Pada tabel categories, berisi kolom categoryid yang bertipe INT sesuai soal dan panjangnya 11 karena tidak dispesifikkan. Kolom categoryid tidak boleh null karena merupakan primary key. Lalu kolom kedua adalah name yang bertipe varchar dan panjangnya 100 sesuai soal.

ALTER TABLE ‘categories’

ADD PRIMARY KEY (‘categoryid’);

Selanjutnya, dilakukan perubahan tabel categories menggunakan ALTER TABLE. Pada kueri ini, kolom categoryid yang telah dibuat, dijadikan sebagai primary key.

ALTER TABLE ‘books’

ADD KEY ‘fk_books_categoryid’ (‘categoryid’);

Lalu, dilakukan perubahan tabel books menggunakan ALTER TABLE. Pada kueri ini, kolom categoryid juga ditambahkan di tabel books. Setelah itu, kolom tersebut dijadikan foreign key terhadap kolom categoryid pada tabel categories.

(4)

INSERT INTO ‘categories’ (‘categoryid’, ‘name’) VALUES

(1, ‘Computer’), (2, ‘Design’), (3, ‘Fiction’), (4, ‘Cooking’),

(5, ‘Architecture’);

Terakhir, ditambahkan sampel data kategori pada tabel categories menggunakan kueri INSERT INTO. Sampel data yang dimasukkan adalah kategori Computer dengan id=1, Design dengan id=2, Fiction dengan id=3, Cooking dengan id=4, Architecture dengan id=5.

(5)

2. Membuat halaman CRUD data buku beserta kategorinya

Pembahasan Read (view_books.php)

a. Membuat kueri untuk memilih semua data buku

Pertama, dibuat kueri untuk memilih semua data buku dari database book menggunakan kueri sebagai berikut

SELECT books.isbn, books.title, categories.name AS category_name, books.author, books.price FROM books INNER JOIN categories ON books.categoryid

categories.categoryid ORDER BY books.isbn

b. Menampilkan data per baris

Setelah kueri dibuat, data tersebut akan ditampilkan satu per satu dari data hasil kueri dengan while loop. Data per baris juga akan memiliki action untuk melakukan sesuatu dengan data buku, seperti menambahkan buku ke cart, melihat detail buku, mengedit buku, serta menghapus buku.

<table class="table table-striped">

<tr>

<th>ISBN</th>

<th>Title</th>

<th>Category</th>

<th>Author</th>

<th>Price</th>

<th>Action</th>

</tr>

<?php $i = 1;

while ($row = $result-

>fetch_object()) : ?>

<tr>

<td><?= $row->isbn ?

></td>

<td><?= $row->title ?

></td>

<td><?= $row-

>category_name ?></td>

<td><?= $row->author ?

></td>

<td>$<?= $row->price ?

></td>

<td>

<a class="btn btn- info btn-sm" href="detail_book.php?isbn=<?= $row-

(6)

>isbn ?>">Detail</a>&nbsp;&nbsp;

<a class="btn btn-primary btn-sm"

href="../show_cart.php?isbn=<?= $row->isbn ?>">+

Cart</a>&nbsp;&nbsp;

<a class="btn btn- warning btn-sm" href="edit_book.php?isbn=<?= $row-

>isbn ?>">Edit</a>&nbsp;&nbsp;

<a class="btn btn- danger btn-sm" href="confirm_delete_book.php?

isbn=<?= $row->isbn ?>">Delete</a>

</td>

</tr>

<?php $i++;

endwhile;

?>

</table>

(7)

Pembahasan Create (add_book.php) a. Masuk ke halaman tambah buku

Untuk melakukan update/edit data buku, pengguna harus masuk ke halaman tambah buku lewat button pada bagian atas tabel data buku.

<a href="add_book.php" class="btn btn-primary mb- 4">+ Add Book Data</a>

b. Membuat form data buku

Pertama, dibuat form untuk memasukkan lima data buku, yaitu ISBN, author, title, price, dan category. Tiap input diatur type dan name yang sesuai, serta dibuat tempat untuk menampung error saat memasukkan data. Salah satu contoh form input untuk ISBN

<div class="form-group">

<label for="isbn">ISBN:</label>

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

id="isbn" name="isbn" maxlength="13" value="<?=

isset($_POST['isbn']) ?

htmlspecialchars($_POST['isbn']) : '' ?>">

<?php if (!empty($errors['isbn'])) : ?>

<div class="alert alert-danger"><?=

$errors['isbn'] ?></div>

<?php endif; ?>

</div>

c. Membuat validasi

Setelah itu, dibuat validasi data yang sesuai dengan tiap input. Input validasi yang dipakai oleh semua input adalah tidak boleh ada data yang kosong. Salah satu contoh validasi input untuk author

$author = test_input($_POST['author']);

if (empty($author)) {

$errors['author'] = 'Author is required';

$valid = false;

}

(8)

d. Membuat kueri untuk memasukkan data ke database

Setelah semua validasi selesai, langkah terakhir adalah memasukkan data ke dalam database. Pada poin a, diketahui bahwa data yang dimasukkan adalah category, sedangkan tabel books hanya memiliki kolom categoryid. Oleh karena itu, digunakan pemanfaatan subkueri, sehingga data category dapat dimasukkan ke dalam tabel books menggunakan categoryid. Kueri yang digunakan adalah sebagai berikut

$query = "INSERT INTO books

VALUES ('" . $isbn . "', '" . $author . "', '" . $title . "', '" . $price . "',

(SELECT categoryid FROM categories WHERE name = '" . $category . "')) ";

(9)

Pembahasan Update (edit_book.php) a. Masuk ke halaman edit buku

Untuk melakukan update/edit data buku, pengguna harus masuk ke halaman edit buku lewat button pilihan edit pada baris data buku. Halaman ini akan disesuaikan dengan data pada tabel books, dengan mengambil data ISBN pada buku yang dipilih.

<a class="btn btn-warning btn-sm"

href="edit_book.php?isbn=<?= $row->isbn ?

>">Edit</a>

b. Membuat form data buku

Setelah itu, dibuat form untuk memasukkan empat data buku baru, yaitu author, title, price, dan category. ISBN tidak dimasukkan dikarenakan data tersebut merupakan data yang menjadi primary key buku. Tiap input kemudian diatur type dan name yang sesuai, serta dibuat tempat untuk menampung error saat memasukkan data. Dikarenakan ini merupakan halaman edit buku, maka setiap kali halaman edit buku dimunculkan, bagian input sudah memuat data buku yang sudah tersimpan. Salah satu contoh form input untuk author

<div class="form-group">

<label for="author">Author:</label>

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

id="author" name="author" maxlength="50" value="<?=

$author; ?>">

<?php if (!empty($error_author)) : ?>

<div class="alert alert-danger"><?=

$error_author ?></div>

<?php endif; ?>

Kueri untuk memuat data buku yang sudah tersimpan pada tabel books

$query = "SELECT b.isbn, b.author, b.title, b.price, c.name AS category_name

FROM books b

INNER JOIN categories AS c ON b.categoryid = c.categoryid

WHERE b.isbn='" . $isbn . "'";

(10)

c. Membuat validasi

Setelah itu, dibuat validasi data yang sesuai dengan tiap input. Input validasi yang dipakai oleh semua input adalah tidak boleh ada data yang kosong. Salah satu contoh validasi input untuk author

$author = test_input($_POST['author']);

if (empty($author)) {

$errors['author'] = 'Author is required';

$valid = false;

}

d. Membuat kueri untuk mengubah data ke database

Setelah semua validasi selesai, langkah terakhir adalah mengubah data buku ke dalam database. Pada poin a, diketahui bahwa data yang dimasukkan adalah category, sedangkan tabel books hanya memiliki kolom categoryid.

Oleh karena itu, digunakan pemanfaatan subkueri, sehingga data category dapat diubahkan pada tabel books menggunakan categoryid. Kueri yang digunakan adalah sebagai berikut

$query = "UPDATE books

SET author = '" . $author . "', title = '" . $title . "', price = '" . $price . "',

categoryid = (SELECT categoryid FROM categories WHERE name = '" . $category . "')

WHERE isbn = '" . $isbn . "' ";

(11)

Pembahasan Delete (confirm_delete_book.php) a. Masuk ke halaman konfirmasi hapus buku

Untuk melakukan delete/hapus data buku, pengguna harus masuk ke halaman confirm delete buku lewat button pilihan delete pada baris data buku. Halaman ini akan disesuaikan dengan data pada tabel books, dengan mengambil data ISBN pada buku yang dipilih.

<a class="btn btn-danger btn-sm"

href="confirm_delete_book.php?isbn=<?= $row->isbn ?

>">Delete</a>

b. Menampilkan konfirmasi

Sebelum pengguna memutuskan untuk menghapus buku, dimunculkan halaman konfirmasi hapus buku dengan mengambil data menggunakan kueri yang sama dengan poin Read a. Lalu, dimunculkan dua tombol untuk memilih hapus atau kembali ke halaman view_books.php

<div class="card-body">

<h4>Are you sure you want to delete this book?</h4>

<p><strong>ISBN: </strong><?= $book->isbn ?

></p>

<p><strong>Title: </strong><?= $book->title

?></p>

<p><strong>Author: </strong><?= $book-

>author ?></p>

<p><strong>Price: </strong><?= $book->price

?></p>

<p><strong>Category: </strong><?= $book-

>category_name ?></p>

<form action="<?= $_SERVER['PHP_SELF'] . '?

isbn=' . $isbn ?>" method="post">

<button type="submit" class="btn btn- danger" name="delete">Delete</button>

<a class="btn btn-secondary"

href="view_books.php">Cancel</a>

</form>

</div>

c. Membuat kueri untuk hapus buku

Untuk menghapus buku, digunakan kueri DELETE FROM seperti di bawah ini

$query = "DELETE FROM books WHERE isbn = '" . $isbn . "'";

(12)

d. Logika untuk hapus buku

Jika pengguna memutuskan untuk hapus buku, maka kueri akan dijalankan dan buku akan terhapus. Setelah itu, pengguna akan diarahkan kehalman view_books.php

(13)

3. Membuat halaman pencarian/filter data buku

Halaman ini akan tetap berada di view_books.php, dengan search bar untuk kata kunci pencarian dan filter kategori dan harga berada di atas tabel data buku.

Pencarian akan dijalankan saat kata kunci, filter kategori, atau filter harga ditetapkan.

Jika tidak, maka akan menampilkan sesuai Read pada poin nomor 2.

Untuk logika pencarian, dimulai dengan menetapkan kueri default untuk pencarian, yaitu seperti berikut

Setelah itu, ditetapkan tiga variabel awal untuk menampung kata kunci, filter kategori,

dan harga minimum. Jika kata kunci terisi, maka digunakan kueri sebagai berikut.

$query = 'SELECT

books.isbn, books.title,

categories.name AS category_name,

books.author, books.price FROM books

INNER JOIN categories ON books.categoryid = categories.categoryid

';

$query .= " WHERE (books.isbn LIKE '%$search_key%' OR books.title LIKE '%$search_key%' OR books.author LIKE '%$search_key%')";

(14)

Untuk filter kategori, jika kata kunci terisi, maka kueri default akan ditambahkan dengan kueri AND. Jika tidak, maka kuerinya adalah WHERE. Hal yang sama juga berlaku pada harga minimum dan harga maksimum, dengan pengecekan tambahan berturut-turut adalah filter kategori terisi atau tidak serta filter kategori dan harga minimum terisi atau tidak.

(15)

Setelah itu, diberikan kueri tambahan yaitu diurutkan berdasarkan ISBN buku.

if (isset($_GET['search_key']) && ! empty($_GET['search_key'])) {

$search_key = $_GET['search_key'];

$query .= " WHERE (books.isbn LIKE '%$search_key%'

OR books.title LIKE '%$search_key%'

OR books.author LIKE '%$search_key%')";

}

if (isset($_GET['category']) && ! empty($_GET['category'])) {

$category_filter =

$_GET['category'];

if ($search_key != '') {

$query .= " AND categories.name

= '$category_filter'";

} else {

$query .= " WHERE categories.name = '$category_filter'";

} }

if (isset($_GET['min_price']) && ! empty($_GET['min_price'])) {

$min_price = $_GET['min_price'];

if ($search_key != '' ||

$category_filter != '') {

$query .= " AND books.price >=

'$min_price'";

} else {

$query .= " WHERE books.price

>= '$min_price'";

} }

if (isset($_GET['max_price']) && ! empty($_GET['max_price'])) {

$max_price = $_GET['max_price'];

if ($search_key != '' ||

$category_filter != '' || $min_price != '') {

$query .= " AND books.price <=

'$max_price'";

} else {

$query .= " WHERE books.price

<= '$max_price'";

} }

(16)

Setelah itu, kueri dijalankan dan data buku akan ditampilkan sesuai kata kunci dan filter.

$query .= ' ORDER BY books.isbn';

';

(17)

4. Membuat link pada hasil pencarian menuju halaman detail data buku, serta menambahkan form isian review dan menyimpan review

Untuk melihat detail data buku, pengguna harus masuk ke halaman detail buku dengan mengklik judul buku pada masing-masing baris data buku. Halaman ini akan disesuaikan dengan data pada tabel books, dengan mengambil data ISBN pada buku yang dipilih. Agar judul buku dapat diklik dan mengantarkan pengguna ke halaman detail buku, dapat digunakan tag <a> <a/> dan memanfaatkan atribut “href”.

Data detail buku ditampilkan seperti pada edit_books.php, tetapi input akan di-disable untuk mencegah perubahan data.

Setelah itu, ditampilkan tabel untuk data review yang diambil dari tabel book_reviews dengan kueri sebagai berikut.

Pengguna juga dapat menambahkan review dengan menulis review lalu menekan tombol ‘Add Review’. Form penulisan review juga diberi validasi agar form tidak boleh kosong saat ‘Add Review’ ditekan. Setelah pengguna mengisi, pengguna akan diarahkan kembali ke halaman detail_book awal.

5. Menampilkan data order beserta detail item yang dipesan dengan filter tanggal mulai dan tanggal selesai

Untuk menampilkan daftar data order yang telah dipesan oleh customer, dibuat halaman order_data yang berisikan semua data order buku yang direpresentasikan dengan menggunakan tabel yang berisi Nomor Order, Date (tanggal pembelian), Detail Item, Harga (satuan), Qty (kuantitas), dan Total harga. Di dalam kolom detail item tersebut terdapat deskripsi buku yang dipesan, seperti ISBN, Title, dan Author.

Jadi, setiap buku yang dipesan disimpan dalam sesi akan diambil dari database, dan jika sesuai dengan tanggal yang dipi

Selain itu, terdapat juga fitur filter untuk memudahkan pengguna dalam mencari data order berdasarkan tanggal pembelian. Dalam membuatnya, digunakan kode seperti dibawah untuk memasukkan dua tanggal, yaitu tanggal mulai (start date) dan tanggal akhir (end date) yang digunakan untuk menyaring data pesanan buku.

<form method="POST">

<label for="start_date">Start Date:</label>

<input type="date" id="start_date" name="start_date"

required>

<label for="end_date">End Date:</label>

<input type="date" id="end_date" name="end_date"

required>

<button type="submit">Filter</button>

</form>

(18)

Pengguna masukkan tanggal awal dan akhir terlebih dahulu, setelah itu pengguna mengklik tombol “Filter” dan tanggal-tanggal tersebut digunakan dalam query SQL untuk mengambil pesanan

6. Menampilkan rekap data jumlah data buku tiap kategori dan total data buku yang telah dipesan pada tiap kategori dengan grafik

Untuk menampilkan rekap data buku dalam bentuk grafik, digunakan content delivery network berbasis javascript. Pada poin ini ditampilkan dua buah grafik.

Grafik pertama menampilkan jumlah buku yang ada di dalam database dan

dikumpulkan berdasarkan kategorinya. Kueri yang harus dilakukan adalah melakukan left join antara tabel kategori dengan tabel books. Lalu digroup by berdasarkan categoryid nya. Data yang diambil dari hasil kueri adalah name dari tabel categories dan fungsi count(). Data name merupakan nama kategori buku, sedangkan count() menghitung banyaknya buku pada masing-masing grup. Berikut ini adalah kueri sql nya.

<<<<query rekap buku per kategori>>>>

Lalu, setelah didapat hasil kuerinya, data hasil kueri ditampilkan dalam bentuk grafik batang. Seperti yang telah ditulis di atas, untuk memformat data menjadi grafik batang, digunakan Content Delivery Network (CDN) berbasis javascript bernama syncfusion. Pada grafik batang, sumbu x adalah kategori-kategori buku yang ada di database, sedangkan sumbu y adalah jumlah buku untuk kategori yang bersesuaian.

Berikut ini adalah script nya.

<<<<script js, formatting menjadi grafik batang, rekap buku per kategori>>>>

Grafik kedua menampilkan jumlah buku yang telah diorder dan dikumpulkan berdasarkan kategorinya. Kueri yang harus dilakukan adalah melakukan left join antara tabel kategori dengan tabel order_items. Lalu digroup by berdasarkan name nya (nama kategori). Data yang diambil dari hasil kueri adalah name dari tabel categories dan fungsi count(). Data name merupakan nama kategori buku, sedangkan count() menghitung banyaknya buku pada masing-masing grup. Berikut ini adalah kueri sql nya.

<<<<query rekap buku yang diorder>>>>

(19)

Lalu, setelah didapat hasil kuerinya, data hasil kueri ditampilkan dalam bentuk grafik batang. Sama seperti grafik pertama, untuk memformat data menjadi grafik batang, digunakan (CDN) bernama syncfusion. Pada grafik batang, sumbu x adalah kategori- kategori buku yang ada di database, sedangkan sumbu y adalah jumlah buku untuk kategori yang bersesuaian. Berikut ini adalah script nya.

<<<<script js, formatting menjadi grafik batang, rekap buku per kategori>>>>

7. Menampilkan tabel data buku berdasarkan kategori

Untuk menampilkan data berdasarkan kategori yang diperluas, dilakukan logika untuk menghitung terlebih dahulu berapa banyak buku pada tiap kategori. Setelah itu, berdasarkan penghitungan itu, hasilnya akan digunakan untuk nilai rowspan data sesuai dengan berapa banyak buku dengan kategori yang sama. Setelah itu, data ditampilkan seperti biasa.

(20)

PENUTUP KESIMPULAN

Dalam pembuatan website, kita dapat melakukan koneksi dengan database dengan menggunakan PHP dan phpMyAdmin. Query-query pada SQL dapat diimplementasikan dalam PHP dan dibantu dengan fungsi-fungsi PHP, kita dapat menampilkan data dalam database dan melakukan create, read, update, dan delete. Selain CRUD, dengan bantuan fungsi-fungsi PHP, juga dapat dilakukan tindakan-tindakan seperti filter data dan pencarian data.

Kesimpulan ini semua adalah tidak usah membuat web app dengan php (ribet).

“Saya dari kepolisian”

“Anda terindikasi terlibat dalam kelompok berbahaya”

Referensi

Dokumen terkait

Alur kerja pada program ini adalah menampilkan database yang telah tresimpan sebelumnya, kemudian terdapat form untuk melakukan entry data tambahan dengan melengkapi form

S OURCE CODE PEMBAGIAN SETIAP DATA TRAINING , DATA VALIDASI DAN DATA TESTING KEDALAM KELAS WITH MASK DAN WITHOUT MASK.. S OURCE CODE UNTUK MENAMPILKAN JUMLAH DATA DI SETIAP

Jumlah Pelanggan PT Telekomunikasi Indonesia Untuk Kategori Pelanggan Broadband, 2012 – 2017 255

Untuk itu, dapat digunakan konsep atau model matematis atau grafik yang disebut EOQ, yang merupakan penentuan besarnya jumlah unit yang harus dipesan setiap kali mengadakan

Pada halaman ini terdapat 2 (dua) menu yaitu graph dan detail, graph digunakan untuk menampilkan grafik Total Capacity Utilization (TCU), sedangkan detail digunakan

Rancangan keranjang pesanan digunakan untuk memasukkan jumlah menu yang akan dipesan dan melihat keseluruhan menu dan total harga. Bentuk rancangannya ditunjukkan pada

Untuk membuat suatu guestbook atau buku tamu yang baik kita membutuhkan media penyimpanan data buku yang diinputkan oleh pengunjung. Media ini bisa berupa file

Grafik Penyajian data mengunakan grafik adalah metode penyajian data yang menggunakan gambar-gambar atau bentuk yang uumnya digunakan untuk melihat perubahan pada suatu variable atau