đŸ’ģ Pemrograman Web 2
🎓 Pertemuan
Pertemuan 2: Dasar PHP

MODUL PEMROGRAMAN WEBSITE 2

Mata Kuliah: Pemrograman Website 2
Kode MK: INF2419
SKS: 3 (Praktikum)
Semester: Genap 2025/2026
Program Studi: Informatika
Fakultas: FEBI / Saintek
Universitas: UIN K.H. Abdurrahman Wahid Pekalongan

Dosen Pengampu: Mohammad Reza Maulana, M.Kom
NIP: 199110082025051002

Pertemuan: 2 dari 16
Durasi: 150 menit (3 × 50 menit)
Studi Kasus Berkelanjutan: Sistem Manajemen Perpustakaan


PERTEMUAN 2

DASAR PHP & PEMROGRAMAN SERVER-SIDE

A. INFORMASI PERTEMUAN

AspekKeterangan
Capaian Pembelajaran Lulusan (CPL)CPL04: Menguasai konsep teoretis bidang ilmu komputer/informatika dan mampu memformulasikan penyelesaian masalah prosedural.
Capaian Pembelajaran Mata Kuliah (CPMK)CPMK04.1: Memahami konsep dasar pengembangan web backend menggunakan PHP dan database
Sub-CPMKSub-CPMK04.1.2: Menjelaskan dan menggunakan sintaks dasar PHP untuk menghasilkan output dinamis.
Indikator PencapaianMahasiswa mampu:
1. Menjelaskan peran PHP sebagai server-side scripting language
2. Menulis sintaks dasar PHP dengan benar
3. Menggunakan variabel dan tipe data PHP
4. Menggunakan operator dasar dalam PHP
5. Membuat halaman web dinamis dengan PHP
Alokasi Waktuâ€ĸ Teori: 60 menit
â€ĸ Praktikum: 90 menit
â€ĸ Total: 150 menit (3 × 50 menit)

B. PENDAHULUAN

1. Deskripsi Singkat

Pertemuan kedua ini membahas fundamental pemrograman PHP sebagai bahasa server-side untuk pengembangan web backend. Mahasiswa akan mempelajari sintaks dasar PHP, variabel, tipe data, operator, dan cara menampilkan output dinamis. Semua konsep akan langsung diaplikasikan dalam konteks sistem perpustakaan yang telah diperkenalkan di pertemuan sebelumnya.

2. Keterkaitan dengan Pertemuan Lain

Pertemuan ini merupakan fondasi penting untuk pembelajaran selanjutnya:

  • Pertemuan 1: Melanjutkan dari environment setup ke praktik coding PHP
  • Pertemuan 3-7: Konsep variabel, operator, dan output akan digunakan dalam logika percabangan, perulangan, array, function, dan CRUD
  • Pertemuan 9-16: Sintaks PHP dasar tetap relevan meskipun menggunakan framework Laravel

3. Manfaat Pembelajaran

  1. Memahami cara kerja PHP dalam memproses request dan menghasilkan response
  2. Mampu menulis code PHP yang clean dan readable
  3. Dapat membuat halaman web yang menampilkan data dinamis
  4. Memiliki dasar yang kuat untuk mempelajari konsep PHP lebih lanjut

4. Relevansi dengan Studi Kasus

Dalam sistem perpustakaan, PHP akan digunakan untuk:

  • Menampilkan informasi buku secara dinamis
  • Menghitung stok, harga, diskon
  • Memproses data dari form
  • Berkomunikasi dengan database

C. MATERI TEORI

1. PHP sebagai Server-Side Language

a. Apa itu PHP?

PHP (PHP: Hypertext Preprocessor) adalah bahasa scripting yang:

  • Dieksekusi di server (bukan di browser)
  • Menghasilkan HTML yang dikirim ke client
  • Open source dan gratis
  • Mudah dipelajari pemula
  • Terintegrasi sempurna dengan HTML

b. Client-Side vs Server-Side

AspekClient-Side (JavaScript)Server-Side (PHP)
Dijalankan diBrowser userServer web
Akses databaseTidak langsungYa, langsung
KeamananCode terlihat userCode tersembunyi
Contoh tugasValidasi form, animasiCRUD, authentication
Bahasa populerJavaScript, TypeScriptPHP, Python, Node.js

c. Cara Kerja PHP

1. User request: http://localhost/perpustakaan/buku.php
2. Web server (Apache) terima request
3. Apache forward ke PHP interpreter
4. PHP execute code buku.php
5. PHP generate HTML output
6. Apache kirim HTML ke browser
7. Browser render HTML

Penting: User tidak pernah melihat code PHP, hanya hasil (HTML) nya saja.

d. Kapan Menggunakan PHP?

Gunakan PHP ketika:

  • Perlu akses database
  • Perlu menyimpan/mengolah data
  • Perlu authentication/authorization
  • Perlu business logic di server
  • Perlu keamanan tinggi

2. Sintaks Dasar PHP

a. Tag Pembuka dan Penutup PHP

PHP code harus ditulis di dalam tag <?php ?>:

<?php
  // Code PHP di sini
?>

Variasi tag (tidak recommended):

<? echo "Short tag"; ?>  // Deprecated
<?= "Short echo tag" ?>  // Boleh untuk echo saja

Best Practice: Selalu gunakan <?php ?> untuk kompatibilitas.

b. File PHP

  • Extension: .php
  • Boleh mix HTML dan PHP
  • PHP akan diproses, HTML dikirim langsung

Contoh mix HTML-PHP:

<!DOCTYPE html>
<html>
<head>
    <title>Perpustakaan</title>
</head>
<body>
    <h1>Selamat datang di Perpustakaan</h1>
    <?php
        echo "<p>Ini adalah halaman PHP</p>";
    ?>
</body>
</html>

c. Statement PHP

  • Setiap statement diakhiri titik koma (;)
  • Bersifat case-sensitive (untuk nama variabel)
  • Tidak case-sensitive (untuk keyword, function)
<?php
echo "Hello"; // Benar
ECHO "Hello"; // Benar juga
Echo "Hello"; // Benar juga
 
$nama = "Budi";  // Variabel
$Nama = "Andi";  // Variabel berbeda!
?>

3. Variabel dan Tipe Data

a. Variabel PHP

Variabel di PHP:

  • Diawali dengan tanda $
  • Diikuti huruf atau underscore
  • Case-sensitive
  • Tidak perlu deklarasi tipe (dynamically typed)

Aturan penamaan:

<?php
// ✅ Valid
$nama = "Budi";
$_umur = 25;
$alamat123 = "Jakarta";
$NamaBuku = "PHP";
 
// ❌ Invalid
$123nama = "Error";  // Tidak boleh diawali angka
$nama-buku = "Error"; // Tidak boleh pakai dash
$for = "Error";       // Jangan pakai reserved keyword
?>

Naming convention (best practice):

<?php
// camelCase (recommended)
$namaMahasiswa = "Budi";
$totalBuku = 100;
 
// snake_case
$nama_mahasiswa = "Budi";
$total_buku = 100;
 
// PascalCase (untuk class)
$NamaMahasiswa = "Budi";
?>

b. Tipe Data PHP

PHP memiliki beberapa tipe data utama:

1) String
<?php
$nama = "Perpustakaan ABC";
$alamat = 'Jl. Merdeka No. 10';
$deskripsi = "Perpustakaan ini memiliki 1000 buku";
 
// Perbedaan single vs double quote
$buku = "PHP Programming";
echo "Judul: $buku";        // Output: Judul: PHP Programming
echo 'Judul: $buku';        // Output: Judul: $buku (literal)
?>
2) Integer
<?php
$stok = 50;
$tahun = 2024;
$harga = 75000;
$negatif = -10;
?>
3) Float (Double)
<?php
$diskon = 0.15;       // 15%
$harga = 75000.50;
$pi = 3.14159;
?>
4) Boolean
<?php
$tersedia = true;
$dipinjam = false;
$aktif = TRUE;    // Sama saja (case-insensitive)
?>
5) Array
<?php
$buah = array("Apel", "Jeruk", "Mangga");
$angka = [1, 2, 3, 4, 5];  // PHP 5.4+
?>
6) NULL
<?php
$data = NULL;
$kosong = null;  // Sama saja
?>

c. Cek Tipe Data

<?php
$umur = 25;
$nama = "Budi";
 
var_dump($umur);  // int(25)
var_dump($nama);  // string(4) "Budi"
 
echo gettype($umur);  // integer
echo gettype($nama);  // string
?>

4. Output dalam PHP

a. Echo

Menampilkan satu atau lebih string:

<?php
echo "Hello World";
echo "Hello", " ", "World";  // Bisa multiple parameter
 
$nama = "Budi";
echo "Nama: $nama";  // Interpolasi variabel
echo 'Nama: $nama';  // Output: Nama: $nama (literal)
?>

b. Print

Mirip echo, tapi:

  • Hanya bisa satu parameter
  • Memiliki return value (selalu 1)
  • Sedikit lebih lambat dari echo
<?php
print "Hello World";
print("Hello World");  // Dengan kurung juga boleh
 
$nama = "Budi";
print "Nama: $nama";
?>

c. Echo vs Print

AspekEchoPrint
ParameterMultipleSingle
Return valueTidak ada1
KecepatanLebih cepatSedikit lambat
PenggunaanLebih umumJarang

Rekomendasi: Gunakan echo untuk konsistensi dan performa.

d. var_dump()

Menampilkan informasi detail variabel (untuk debugging):

<?php
$buku = "PHP Programming";
$stok = 10;
 
var_dump($buku);  // string(16) "PHP Programming"
var_dump($stok);  // int(10)
 
$data = ["nama" => "Budi", "umur" => 25];
var_dump($data);  // Tampilkan struktur lengkap
?>

e. print_r()

Menampilkan informasi variabel dalam format readable:

<?php
$data = ["nama" => "Budi", "umur" => 25];
print_r($data);
// Output:
// Array
// (
//     [nama] => Budi
//     [umur] => 25
// )
?>

5. Operator Dasar

a. Operator Aritmatika

OperatorOperasiContohHasil
+Penjumlahan$a + $bJumlah
-Pengurangan$a - $bSelisih
*Perkalian$a * $bKali
/Pembagian$a / $bBagi
%Modulus$a % $bSisa bagi
**Perpangkatan$a ** $bPangkat
<?php
$harga = 50000;
$diskon = 0.15;
 
$harga_diskon = $harga - ($harga * $diskon);
echo "Harga setelah diskon: Rp " . $harga_diskon;
// Output: Harga setelah diskon: Rp 42500
 
$total_buku = 100;
$dipinjam = 23;
$tersedia = $total_buku - $dipinjam;
echo "Buku tersedia: $tersedia";
// Output: Buku tersedia: 77
?>

b. Operator Assignment

OperatorSama denganContoh
=Assignment$a = 5
+=$a = $a + $b$a += 3
-=$a = $a - $b$a -= 2
*=$a = $a * $b$a *= 4
/=$a = $a / $b$a /= 2
%=$a = $a % $b$a %= 3
.=String concat$a .= "text"
<?php
$stok = 100;
$stok -= 5;  // Dikurangi 5
echo $stok;  // 95
 
$stok += 10; // Ditambah 10
echo $stok;  // 105
 
$pesan = "Total buku: ";
$pesan .= $stok;
echo $pesan;  // Total buku: 105
?>

c. Operator Increment/Decrement

<?php
$a = 5;
$a++;  // Post-increment, $a menjadi 6
++$a;  // Pre-increment, $a menjadi 7
$a--;  // Post-decrement, $a menjadi 6
--$a;  // Pre-decrement, $a menjadi 5
 
// Perbedaan pre dan post
$b = 5;
echo $b++;  // Output: 5, kemudian $b = 6
echo ++$b;  // $b = 7, kemudian output: 7
?>

d. Operator Concatenation

Menggabungkan string menggunakan titik (.):

<?php
$nama_depan = "Budi";
$nama_belakang = "Santoso";
$nama_lengkap = $nama_depan . " " . $nama_belakang;
echo $nama_lengkap;  // Budi Santoso
 
$judul = "Pemrograman";
$subjudul = "PHP";
$buku = $judul . " " . $subjudul;
echo $buku;  // Pemrograman PHP
?>

e. Operator Perbandingan

OperatorKeteranganContohHasil
==Sama dengan5 == "5"true
===Identik (tipe juga)5 === "5"false
!=Tidak sama5 != 3true
!==Tidak identik5 !== "5"true
>Lebih besar5 > 3true
<Lebih kecil5 < 3false
>=Lebih besar sama5 >= 5true
<=Lebih kecil sama3 <= 5true
<?php
$stok = 10;
$minimum = 5;
 
var_dump($stok > $minimum);  // bool(true)
var_dump($stok == "10");     // bool(true)
var_dump($stok === "10");    // bool(false) - beda tipe
?>

6. Komentar dan Best Practice

a. Jenis Komentar

<?php
// Single-line comment
echo "Hello";
 
# Unix-style comment (jarang dipakai)
echo "World";
 
/*
   Multi-line comment
   Bisa beberapa baris
   Untuk dokumentasi
*/
echo "PHP";
 
/**
 * DocBlock comment
 * Untuk dokumentasi function/class
 * @param string $nama
 * @return string
 */
?>

b. Best Practice Komentar

<?php
// ✅ Good: Jelaskan "mengapa", bukan "apa"
// Hitung diskon member karena promo akhir tahun
$harga_final = $harga * 0.85;
 
// ❌ Bad: Komentar yang obvious
// Set variabel nama
$nama = "Budi";
 
// ✅ Good: Dokumentasi function
/**
 * Hitung harga setelah diskon
 * 
 * @param float $harga Harga asli
 * @param float $diskon Persentase diskon (0-1)
 * @return float Harga setelah diskon
 */
function hitungDiskon($harga, $diskon) {
    return $harga - ($harga * $diskon);
}
?>

c. PHP Coding Standards

<?php
// ✅ Gunakan indentasi konsisten (4 spasi atau 1 tab)
if ($stok > 0) {
    echo "Tersedia";
}
 
// ✅ Spasi setelah keyword dan operator
$total = $harga + $pajak;
if ($kondisi) {
    // code
}
 
// ✅ Nama variabel descriptive
$jumlah_buku = 100;  // Good
$jb = 100;           // Bad
 
// ✅ Consistent naming convention
$namaMahasiswa = "Budi";    // camelCase
$total_harga = 50000;       // snake_case
// Pilih salah satu, gunakan konsisten
 
// ✅ Closing tag tidak wajib di file pure PHP
// File berisi hanya PHP, tidak perlu ?>
?>

7. Debugging Techniques

a. Error Reporting

<?php
// Tampilkan semua error (untuk development)
error_reporting(E_ALL);
ini_set('display_errors', 1);
 
// Matikan error display (untuk production)
ini_set('display_errors', 0);
error_reporting(0);
?>

b. Debugging Tools

<?php
// 1. var_dump() - Cek tipe dan nilai
$data = ["nama" => "Budi", "umur" => 25];
var_dump($data);
 
// 2. print_r() - Lebih readable
print_r($data);
 
// 3. echo dengan format
echo "<pre>";
print_r($data);
echo "</pre>";
 
// 4. die() / exit() - Stop execution
echo "Before";
die("Stop di sini");
echo "After";  // Tidak akan dieksekusi
?>

D. PRAKTIKUM

1. Tujuan Praktikum

  1. Menulis sintaks PHP dasar dengan benar
  2. Menggunakan variabel dan tipe data
  3. Menerapkan operator dalam perhitungan
  4. Membuat halaman informasi buku dinamis
  5. Melakukan debugging sederhana

2. PRAKTIKUM 1: Halaman Info Buku Sederhana

Tujuan

Membuat halaman yang menampilkan informasi buku menggunakan variabel PHP.

Langkah-langkah

a. Buat file info_buku.php

Lokasi: C:\xampp\htdocs\perpustakaan\info_buku.php

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Info Buku - Perpustakaan</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <h1 class="mb-4">Informasi Buku</h1>
        
        <?php
        // Data buku
        $judul = "Pemrograman Web dengan PHP";
        $pengarang = "Budi Raharjo";
        $penerbit = "Informatika";
        $tahun_terbit = 2023;
        $harga = 85000;
        $stok = 15;
        $isbn = "978-602-1234-56-7";
        ?>
        
        <div class="card">
            <div class="card-header bg-primary text-white">
                <h5 class="mb-0"><?php echo $judul; ?></h5>
            </div>
            <div class="card-body">
                <table class="table table-borderless">
                    <tr>
                        <th width="200">Pengarang</th>
                        <td>: <?php echo $pengarang; ?></td>
                    </tr>
                    <tr>
                        <th>Penerbit</th>
                        <td>: <?php echo $penerbit; ?></td>
                    </tr>
                    <tr>
                        <th>Tahun Terbit</th>
                        <td>: <?php echo $tahun_terbit; ?></td>
                    </tr>
                    <tr>
                        <th>ISBN</th>
                        <td>: <?php echo $isbn; ?></td>
                    </tr>
                    <tr>
                        <th>Harga</th>
                        <td>: Rp <?php echo number_format($harga, 0, ',', '.'); ?></td>
                    </tr>
                    <tr>
                        <th>Stok</th>
                        <td>: <?php echo $stok; ?> buku</td>
                    </tr>
                </table>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

b. Testing

  1. Simpan file
  2. Buka browser: http://localhost/perpustakaan/info_buku.php
  3. Pastikan data buku tampil dengan benar

c. Eksplorasi

Coba ubah nilai variabel dan lihat perubahannya:

<?php
$judul = "Laravel: From Beginner to Advanced";
$harga = 125000;
$stok = 8;
?>

3. PRAKTIKUM 2: Manipulasi String untuk Judul Buku

Tujuan

Memahami fungsi-fungsi string PHP untuk manipulasi data.

Langkah-langkah

Buat file manipulasi_string.php:

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Manipulasi String - Perpustakaan</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <h1 class="mb-4">Manipulasi String Judul Buku</h1>
        
        <?php
        // Data buku
        $judul = "pemrograman web dengan php dan mysql";
        $pengarang = "BUDI RAHARJO";
        $deskripsi = "Buku ini membahas pemrograman web menggunakan PHP dan MySQL secara lengkap dari dasar hingga mahir";
        ?>
        
        <div class="card mb-3">
            <div class="card-header bg-info text-white">
                <h5 class="mb-0">Data Original</h5>
            </div>
            <div class="card-body">
                <p><strong>Judul:</strong> <?php echo $judul; ?></p>
                <p><strong>Pengarang:</strong> <?php echo $pengarang; ?></p>
                <p><strong>Deskripsi:</strong> <?php echo $deskripsi; ?></p>
            </div>
        </div>
        
        <div class="card mb-3">
            <div class="card-header bg-success text-white">
                <h5 class="mb-0">Hasil Manipulasi</h5>
            </div>
            <div class="card-body">
                <!-- strtoupper() -->
                <p><strong>Judul Uppercase:</strong><br />
                   <?php echo strtoupper($judul); ?></p>
                
                <!-- strtolower() -->
                <p><strong>Pengarang Lowercase:</strong><br />
                   <?php echo strtolower($pengarang); ?></p>
                
                <!-- ucwords() -->
                <p><strong>Judul Title Case:</strong><br />
                   <?php echo ucwords($judul); ?></p>
                
                <!-- ucfirst() -->
                <p><strong>Deskripsi First Capital:</strong><br />
                   <?php echo ucfirst($deskripsi); ?></p>
                
                <!-- strlen() -->
                <p><strong>Panjang Judul:</strong><br />
                   <?php echo strlen($judul); ?> karakter</p>
                
                <!-- str_word_count() -->
                <p><strong>Jumlah Kata Judul:</strong><br />
                   <?php echo str_word_count($judul); ?> kata</p>
                
                <!-- substr() -->
                <p><strong>20 Karakter Pertama Deskripsi:</strong><br />
                   <?php echo substr($deskripsi, 0, 20) . "..."; ?></p>
                
                <!-- str_replace() -->
                <p><strong>Replace "PHP" menjadi "PHP 8":</strong><br />
                   <?php echo str_replace("PHP", "PHP 8", $judul); ?></p>
                
                <!-- strpos() -->
                <p><strong>Posisi kata "web":</strong><br />
                   Posisi ke-<?php echo strpos($judul, "web"); ?></p>
                
                <!-- trim() -->
                <?php $judul_spasi = "  PHP Programming  "; ?>
                <p><strong>Trim Spasi:</strong><br />
                   Sebelum: "<?php echo $judul_spasi; ?>" (panjang: <?php echo strlen($judul_spasi); ?>)<br />
                   Sesudah: "<?php echo trim($judul_spasi); ?>" (panjang: <?php echo strlen(trim($judul_spasi)); ?>)</p>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Testing:

  1. Akses: http://localhost/perpustakaan/manipulasi_string.php
  2. Perhatikan setiap hasil manipulasi string

4. PRAKTIKUM 3: Perhitungan Harga dan Diskon

Tujuan

Menerapkan operator aritmatika dalam perhitungan harga buku.

Langkah-langkah

Buat file hitung_harga.php:

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Perhitungan Harga - Perpustakaan</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <h1 class="mb-4">Sistem Perhitungan Harga Buku</h1>
        
        <?php
        // Data buku
        $judul_buku = "Mastering Laravel Framework";
        $harga_satuan = 95000;
        $jumlah_beli = 3;
        
        // Perhitungan
        $subtotal = $harga_satuan * $jumlah_beli;
        
        // Diskon berdasarkan jumlah
        if ($jumlah_beli >= 3) {
            $persentase_diskon = 10; // 10%
        } else {
            $persentase_diskon = 0;
        }
        
        $diskon = $subtotal * ($persentase_diskon / 100);
        $total_setelah_diskon = $subtotal - $diskon;
        
        // PPN 11%
        $ppn = $total_setelah_diskon * 0.11;
        
        // Total akhir
        $total_akhir = $total_setelah_diskon + $ppn;
        ?>
        
        <div class="row">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header bg-primary text-white">
                        <h5 class="mb-0">Detail Pembelian</h5>
                    </div>
                    <div class="card-body">
                        <table class="table">
                            <tr>                           
                                <th width="250">Judul Buku</th>
                                <td>: <?php echo $judul_buku; ?></td>
                            </tr>
                            <tr>
                                <th>Harga Satuan</th>
                                <td>: Rp <?php echo number_format($harga_satuan, 0, ',', '.'); ?></td>
                            </tr>
                            <tr>
                                <th>Jumlah Beli</th>
                                <td>: <?php echo $jumlah_beli; ?> buku</td>
                            </tr>
                            <tr class="table-secondary">
                                <th>Subtotal</th>
                                <td>: Rp <?php echo number_format($subtotal, 0, ',', '.'); ?></td>
                            </tr>
                            <tr class="text-success">
                                <th>Diskon (<?php echo $persentase_diskon; ?>%)</th>
                                <td>: - Rp <?php echo number_format($diskon, 0, ',', '.'); ?></td>
                            </tr>
                            <tr class="table-secondary">
                                <th>Total Setelah Diskon</th>
                                <td>: Rp <?php echo number_format($total_setelah_diskon, 0, ',', '.'); ?></td>
                            </tr>
                            <tr>
                                <th>PPN 11%</th>
                                <td>: + Rp <?php echo number_format($ppn, 0, ',', '.'); ?></td>
                            </tr>
                            <tr class="table-primary fw-bold">
                                <th>TOTAL AKHIR</th>
                                <td>: Rp <?php echo number_format($total_akhir, 0, ',', '.'); ?></td>
                            </tr>
                        </table>
                        
                        <?php if ($persentase_diskon > 0): ?>
                        <div class="alert alert-success">
                            <strong>Selamat!</strong> Anda mendapat diskon <?php echo $persentase_diskon; ?>% 
                            karena membeli <?php echo $jumlah_beli; ?> buku atau lebih.
                        </div>
                        <?php endif; ?>
                    </div>
                </div>
            </div>
            
            <div class="col-md-4">
                <div class="card border-info">
                    <div class="card-header bg-info text-white">
                        <h6 class="mb-0">Informasi Diskon</h6>
                    </div>
                    <div class="card-body">
                        <ul class="list-unstyled">
                            <li class="mb-2">
                                <i class="bi bi-check-circle text-success"></i>
                                Beli 3+ buku: Diskon 10%
                            </li>
                            <li class="mb-2">
                                <i class="bi bi-check-circle text-success"></i>
                                Beli 5+ buku: Diskon 15%
                            </li>
                            <li class="mb-2">
                                <i class="bi bi-info-circle text-info"></i>
                                Semua harga sudah termasuk PPN
                            </li>
                        </ul>
                    </div>
                </div>
                
                <div class="card border-warning mt-3">
                    <div class="card-header bg-warning">
                        <h6 class="mb-0">Hemat Anda</h6>
                    </div>
                    <div class="card-body">
                        <h4 class="text-success">
                            Rp <?php echo number_format($diskon, 0, ',', '.'); ?>
                        </h4>
                        <small class="text-muted">
                            dari harga normal Rp <?php echo number_format($subtotal, 0, ',', '.'); ?>
                        </small>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Contoh perhitungan lain -->
        <div class="card mt-4">
            <div class="card-header bg-secondary text-white">
                <h5 class="mb-0">Contoh Perhitungan Lainnya</h5>
            </div>
            <div class="card-body">
                <?php
                // Contoh 1: Menghitung total stok
                $stok_gudang_a = 45;
                $stok_gudang_b = 32;
                $stok_gudang_c = 18;
                $total_stok = $stok_gudang_a + $stok_gudang_b + $stok_gudang_c;
                ?>
                <h6>1. Total Stok dari 3 Gudang:</h6>
                <p>
                    Gudang A: <?php echo $stok_gudang_a; ?> + 
                    Gudang B: <?php echo $stok_gudang_b; ?> + 
                    Gudang C: <?php echo $stok_gudang_c; ?> = 
                    <strong><?php echo $total_stok; ?> buku</strong>
                </p>
                
                <?php
                // Contoh 2: Menghitung rata-rata harga
                $harga1 = 50000;
                $harga2 = 75000;
                $harga3 = 95000;
                $rata_rata = ($harga1 + $harga2 + $harga3) / 3;
                ?>
                <h6>2. Rata-rata Harga Buku:</h6>
                <p>
                    (Rp <?php echo number_format($harga1, 0, ',', '.'); ?> + 
                    Rp <?php echo number_format($harga2, 0, ',', '.'); ?> + 
                    Rp <?php echo number_format($harga3, 0, ',', '.'); ?>) / 3 = 
                    <strong>Rp <?php echo number_format($rata_rata, 0, ',', '.'); ?></strong>
                </p>
                
                <?php
                // Contoh 3: Menghitung persentase
                $buku_dipinjam = 78;
                $total_buku = 500;
                $persentase = ($buku_dipinjam / $total_buku) * 100;
                ?>
                <h6>3. Persentase Buku Dipinjam:</h6>
                <p>
                    (<?php echo $buku_dipinjam; ?> / <?php echo $total_buku; ?>) × 100 = 
                    <strong><?php echo number_format($persentase, 2); ?>%</strong>
                </p>
                
                <?php
                // Contoh 4: Pembulatan
                $harga_diskon = 87543.75;
                ?>
                <h6>4. Pembulatan Harga:</h6>
                <p>
                    Harga asli: Rp <?php echo number_format($harga_diskon, 2, ',', '.'); ?><br />
                    Pembulatan ke atas: Rp <?php echo number_format(ceil($harga_diskon), 0, ',', '.'); ?><br />
                    Pembulatan ke bawah: Rp <?php echo number_format(floor($harga_diskon), 0, ',', '.'); ?><br />
                    Pembulatan normal: Rp <?php echo number_format(round($harga_diskon), 0, ',', '.'); ?>
                </p>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Testing:

  1. Akses: http://localhost/perpustakaan/hitung_harga.php
  2. Perhatikan semua hasil perhitungan
  3. Coba ubah nilai $jumlah_beli dan lihat perubahan diskon

5. PRAKTIKUM 4: Debug dengan var_dump()

Tujuan

Memahami penggunaan var_dump() dan print_r() untuk debugging.

Langkah-langkah

Buat file debug_demo.php:

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Debugging - Perpustakaan</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        pre {
            background-color: #f8f9fa;
            padding: 15px;
            border-radius: 5px;
            border: 1px solid #dee2e6;
        }
    </style>
</head>
<body>
    <div class="container mt-5">
        <h1 class="mb-4">Debugging PHP dengan var_dump() dan print_r()</h1>
        
        <?php
        // Data untuk debugging
        $judul = "Pemrograman PHP";
        $harga = 85000;
        $stok = 15;
        $tersedia = true;
        $kategori = null;
        
        $buku = [
            "judul" => "Laravel for Beginners",
            "pengarang" => "John Doe",
            "harga" => 125000,
            "stok" => 8
        ];
        ?>
        
        <!-- var_dump untuk String -->
        <div class="card mb-3">
            <div class="card-header bg-primary text-white">
                <h5 class="mb-0">1. var_dump() untuk String</h5>
            </div>
            <div class="card-body">
                <p><strong>Code:</strong> <code>var_dump($judul);</code></p>
                <pre><?php var_dump($judul); ?></pre>
                <p class="mb-0">
                    <small class="text-muted">
                        Menampilkan tipe data (string) dan panjang karakter (16)
                    </small>
                </p>
            </div>
        </div>
        
        <!-- var_dump untuk Integer -->
        <div class="card mb-3">
            <div class="card-header bg-success text-white">
                <h5 class="mb-0">2. var_dump() untuk Integer</h5>
            </div>
            <div class="card-body">
                <p><strong>Code:</strong> <code>var_dump($harga);</code></p>
                <pre><?php var_dump($harga); ?></pre>
                <p class="mb-0">
                    <small class="text-muted">
                        Menampilkan tipe data (int) dan nilai (85000)
                    </small>
                </p>
            </div>
        </div>
        
        <!-- var_dump untuk Boolean -->
        <div class="card mb-3">
            <div class="card-header bg-info text-white">
                <h5 class="mb-0">3. var_dump() untuk Boolean</h5>
            </div>
            <div class="card-body">
                <p><strong>Code:</strong> <code>var_dump($tersedia);</code></p>
                <pre><?php var_dump($tersedia); ?></pre>
                <p class="mb-0">
                    <small class="text-muted">
                        Menampilkan tipe data (bool) dan nilai (true)
                    </small>
                </p>
            </div>
        </div>
        
        <!-- var_dump untuk NULL -->
        <div class="card mb-3">
            <div class="card-header bg-warning">
                <h5 class="mb-0">4. var_dump() untuk NULL</h5>
            </div>
            <div class="card-body">
                <p><strong>Code:</strong> <code>var_dump($kategori);</code></p>
                <pre><?php var_dump($kategori); ?></pre>
                <p class="mb-0">
                    <small class="text-muted">
                        Menampilkan NULL jika variabel tidak memiliki nilai
                    </small>
                </p>
            </div>
        </div>
        
        <!-- var_dump untuk Array -->
        <div class="card mb-3">
            <div class="card-header bg-danger text-white">
                <h5 class="mb-0">5. var_dump() untuk Array</h5>
            </div>
            <div class="card-body">
                <p><strong>Code:</strong> <code>var_dump($buku);</code></p>
                <pre><?php var_dump($buku); ?></pre>
                <p class="mb-0">
                    <small class="text-muted">
                        Menampilkan struktur array lengkap dengan tipe data setiap elemen
                    </small>
                </p>
            </div>
        </div>
        
        <!-- print_r untuk Array -->
        <div class="card mb-3">
            <div class="card-header bg-secondary text-white">
                <h5 class="mb-0">6. print_r() untuk Array (Lebih Readable)</h5>
            </div>
            <div class="card-body">
                <p><strong>Code:</strong> <code>print_r($buku);</code></p>
                <pre><?php print_r($buku); ?></pre>
                <p class="mb-0">
                    <small class="text-muted">
                        print_r() lebih mudah dibaca untuk array, tapi tidak menampilkan tipe data
                    </small>
                </p>
            </div>
        </div>
        
        <!-- Multiple var_dump -->
        <div class="card mb-3">
            <div class="card-header bg-dark text-white">
                <h5 class="mb-0">7. Multiple var_dump()</h5>
            </div>
            <div class="card-body">
                <p><strong>Code:</strong> <code>var_dump($judul, $harga, $stok, $tersedia);</code></p>
                <pre><?php var_dump($judul, $harga, $stok, $tersedia); ?></pre>
                <p class="mb-0">
                    <small class="text-muted">
                        Bisa debug beberapa variabel sekaligus
                    </small>
                </p>
            </div>
        </div>
        
        <!-- Perbandingan gettype() -->
        <div class="card">
            <div class="card-header" style="background-color: #6610f2; color: white;">
                <h5 class="mb-0">8. Alternatif: gettype()</h5>
            </div>
            <div class="card-body">
                <table class="table table-bordered">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Tipe Data</th>
                            <th>Nilai</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>$judul</td>
                            <td><?php echo gettype($judul); ?></td>
                            <td><?php echo $judul; ?></td>
                        </tr>
                        <tr>
                            <td>$harga</td>
                            <td><?php echo gettype($harga); ?></td>
                            <td><?php echo $harga; ?></td>
                        </tr>
                        <tr>
                            <td>$stok</td>
                            <td><?php echo gettype($stok); ?></td>
                            <td><?php echo $stok; ?></td>
                        </tr>
                        <tr>
                            <td>$tersedia</td>
                            <td><?php echo gettype($tersedia); ?></td>
                            <td><?php echo $tersedia ? 'true' : 'false'; ?></td>
                        </tr>
                        <tr>
                            <td>$kategori</td>
                            <td><?php echo gettype($kategori); ?></td>
                            <td><em>NULL</em></td>
                        </tr>
                        <tr>
                            <td>$buku</td>
                            <td><?php echo gettype($buku); ?></td>
                            <td><em>Array (4 elements)</em></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Testing:

  1. Akses: http://localhost/perpustakaan/debug_demo.php
  2. Perhatikan perbedaan output var_dump() dan print_r()
  3. Pahami kapan menggunakan masing-masing

6. PRAKTIKUM 5: Halaman Dashboard Perpustakaan

Tujuan

Mengintegrasikan semua konsep PHP dasar dalam satu halaman dashboard.

Langkah-langkah

Buat file dashboard.php:

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dashboard Perpustakaan</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
</head>
<body>
    <?php
    // ========== DATA PERPUSTAKAAN ==========
    $nama_perpus = "Perpustakaan Digital Universitas ABC";
    $alamat = "Jl. Pendidikan No. 123, Jakarta";
    $telepon = "(021) 1234-5678";
    $email = "info@perpusdigunabc.ac.id";
    
    // ========== STATISTIK BUKU ==========
    $total_buku = 1500;
    $buku_dipinjam = 234;
    $buku_tersedia = $total_buku - $buku_dipinjam;
    $persentase_dipinjam = ($buku_dipinjam / $total_buku) * 100;
    $persentase_tersedia = ($buku_tersedia / $total_buku) * 100;
    
    // ========== STATISTIK ANGGOTA ==========
    $total_anggota = 450;
    $anggota_aktif = 378;
    $anggota_nonaktif = $total_anggota - $anggota_aktif;
    
    // ========== TRANSAKSI HARI INI ==========
    $transaksi_hari_ini = 15;
    $peminjaman = 9;
    $pengembalian = 6;
    
    // ========== BUKU TERPOPULER ==========
    $buku1 = "Pemrograman Web PHP";
    $buku2 = "Database MySQL";
    $buku3 = "Laravel Framework";
    
    $pinjam1 = 45;
    $pinjam2 = 38;
    $pinjam3 = 32;
    
    // ========== INFORMASI WAKTU ==========
    $hari_ini = date('l, d F Y');
    $jam_sekarang = date('H:i:s');
    
    // Tentukan salam berdasarkan waktu
    $jam = date('H');
    if ($jam >= 5 && $jam < 12) {
        $salam = "Selamat Pagi";
        $icon_waktu = "bi-sunrise";
    } elseif ($jam >= 12 && $jam < 15) {
        $salam = "Selamat Siang";
        $icon_waktu = "bi-sun";
    } elseif ($jam >= 15 && $jam < 18) {
        $salam = "Selamat Sore";
        $icon_waktu = "bi-cloud-sun";
    } else {
        $salam = "Selamat Malam";
        $icon_waktu = "bi-moon-stars";
    }
    ?>
    
    <!-- Navbar -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
        <div class="container-fluid">
            <a class="navbar-brand" href="#">
                <i class="bi bi-book"></i> <?php echo $nama_perpus; ?>
            </a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ms-auto">
                    <li class="nav-item">
                        <a class="nav-link active" href="#"><i class="bi bi-house"></i> Dashboard</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#"><i class="bi bi-book"></i> Buku</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#"><i class="bi bi-people"></i> Anggota</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#"><i class="bi bi-arrow-left-right"></i> Transaksi</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    
    <div class="container-fluid mt-4">
        <!-- Header -->
        <div class="row mb-4">
            <div class="col-md-8">
                <h2><i class="<?php echo $icon_waktu; ?>"></i> <?php echo $salam; ?>, Admin!</h2>
                <p class="text-muted">
                    <i class="bi bi-calendar"></i> <?php echo $hari_ini; ?> | 
                    <i class="bi bi-clock"></i> <?php echo $jam_sekarang; ?>
                </p>
            </div>
            <div class="col-md-4 text-end">
                <button class="btn btn-primary">
                    <i class="bi bi-plus-circle"></i> Tambah Buku
                </button>
                <button class="btn btn-success">
                    <i class="bi bi-arrow-left-right"></i> Transaksi Baru
                </button>
            </div>
        </div>
        
        <!-- Cards Statistik -->
        <div class="row mb-4">
            <!-- Total Buku -->
            <div class="col-md-3 mb-3">
                <div class="card border-primary">
                    <div class="card-body">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <h6 class="text-muted mb-2">Total Buku</h6>
                                <h2 class="mb-0"><?php echo number_format($total_buku); ?></h2>
                            </div>
                            <div class="text-primary" style="font-size: 48px;">
                                <i class="bi bi-book"></i>
                            </div>
                        </div>
                    </div>
                    <div class="card-footer bg-primary text-white">
                        <small><i class="bi bi-info-circle"></i> Koleksi perpustakaan</small>
                    </div>
                </div>
            </div>
            
            <!-- Buku Dipinjam -->
            <div class="col-md-3 mb-3">
                <div class="card border-warning">
                    <div class="card-body">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <h6 class="text-muted mb-2">Dipinjam</h6>
                                <h2 class="mb-0"><?php echo number_format($buku_dipinjam); ?></h2>
                                <small class="text-warning">
                                    <?php echo number_format($persentase_dipinjam, 1); ?>%
                                </small>
                            </div>
                            <div class="text-warning" style="font-size: 48px;">
                                <i class="bi bi-arrow-left"></i>
                            </div>
                        </div>
                    </div>
                    <div class="card-footer bg-warning text-dark">
                        <small><i class="bi bi-info-circle"></i> Sedang dipinjam</small>
                    </div>
                </div>
            </div>
            
            <!-- Buku Tersedia -->
            <div class="col-md-3 mb-3">
                <div class="card border-success">
                    <div class="card-body">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <h6 class="text-muted mb-2">Tersedia</h6>
                                <h2 class="mb-0"><?php echo number_format($buku_tersedia); ?></h2>
                                <small class="text-success">
                                    <?php echo number_format($persentase_tersedia, 1); ?>%
                                </small>
                            </div>
                            <div class="text-success" style="font-size: 48px;">
                                <i class="bi bi-check-circle"></i>
                            </div>
                        </div>
                    </div>
                    <div class="card-footer bg-success text-white">
                        <small><i class="bi bi-info-circle"></i> Siap dipinjam</small>
                    </div>
                </div>
            </div>
            
            <!-- Total Anggota -->
            <div class="col-md-3 mb-3">
                <div class="card border-info">
                    <div class="card-body">
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <h6 class="text-muted mb-2">Anggota</h6>
                                <h2 class="mb-0"><?php echo number_format($total_anggota); ?></h2>
                                <small class="text-info">
                                    <?php echo number_format($anggota_aktif); ?> aktif
                                </small>
                            </div>
                            <div class="text-info" style="font-size: 48px;">
                                <i class="bi bi-people"></i>
                            </div>
                        </div>
                    </div>
                    <div class="card-footer bg-info text-white">
                        <small><i class="bi bi-info-circle"></i> Member terdaftar</small>
                    </div>
                </div>
            </div>
        </div>
        
        <div class="row">
            <!-- Transaksi Hari Ini -->
            <div class="col-md-4 mb-3">
                <div class="card">
                    <div class="card-header bg-primary text-white">
                        <h5 class="mb-0">
                            <i class="bi bi-clock-history"></i> Transaksi Hari Ini
                        </h5>
                    </div>
                    <div class="card-body">
                        <div class="d-flex justify-content-between align-items-center mb-3">
                            <h3 class="mb-0"><?php echo $transaksi_hari_ini; ?></h3>
                            <span class="badge bg-primary">Transaksi</span>
                        </div>
                        <hr>
                        <div class="d-flex justify-content-between mb-2">
                            <span><i class="bi bi-arrow-left text-danger"></i> Peminjaman</span>
                            <strong><?php echo $peminjaman; ?></strong>
                        </div>
                        <div class="d-flex justify-content-between">
                            <span><i class="bi bi-arrow-right text-success"></i> Pengembalian</span>
                            <strong><?php echo $pengembalian; ?></strong>
                        </div>
                    </div>
                </div>
            </div>
            
            <!-- Buku Terpopuler -->
            <div class="col-md-4 mb-3">
                <div class="card">
                    <div class="card-header bg-success text-white">
                        <h5 class="mb-0">
                            <i class="bi bi-star"></i> Buku Terpopuler
                        </h5>
                    </div>
                    <div class="card-body">
                        <div class="d-flex justify-content-between align-items-center mb-2">
                            <div>
                                <span class="badge bg-warning text-dark me-2">1</span>
                                <span><?php echo $buku1; ?></span>
                            </div>
                            <span class="badge bg-success"><?php echo $pinjam1; ?>×</span>
                        </div>
                        <hr>
                        <div class="d-flex justify-content-between align-items-center mb-2">
                            <div>
                                <span class="badge bg-secondary me-2">2</span>
                                <span><?php echo $buku2; ?></span>
                            </div>
                            <span class="badge bg-success"><?php echo $pinjam2; ?>×</span>
                        </div>
                        <hr>
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <span class="badge bg-secondary me-2">3</span>
                                <span><?php echo $buku3; ?></span>
                            </div>
                            <span class="badge bg-success"><?php echo $pinjam3; ?>×</span>
                        </div>
                    </div>
                </div>
            </div>
            
            <!-- Informasi Perpustakaan -->
            <div class="col-md-4 mb-3">
                <div class="card">
                    <div class="card-header bg-info text-white">
                        <h5 class="mb-0">
                            <i class="bi bi-info-circle"></i> Informasi
                        </h5>
                    </div>
                    <div class="card-body">
                        <p class="mb-2">
                            <i class="bi bi-geo-alt text-danger"></i>
                            <strong>Alamat:</strong><br />
                            <small><?php echo $alamat; ?></small>
                        </p>
                        <hr>
                        <p class="mb-2">
                            <i class="bi bi-telephone text-success"></i>
                            <strong>Telepon:</strong><br />
                            <small><?php echo $telepon; ?></small>
                        </p>
                        <hr>
                        <p class="mb-0">
                            <i class="bi bi-envelope text-primary"></i>
                            <strong>Email:</strong><br />
                            <small><?php echo $email; ?></small>
                        </p>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Progress Bar Ketersediaan -->
        <div class="row">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header bg-dark text-white">
                        <h5 class="mb-0">
                            <i class="bi bi-bar-chart"></i> Status Ketersediaan Buku
                        </h5>
                    </div>
                    <div class="card-body">
                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <h6>Buku Tersedia</h6>
                                <div class="progress" style="height: 30px;">
                                    <div class="progress-bar bg-success" role="progressbar" 
                                         style="width: <?php echo $persentase_tersedia; ?>%;" 
                                         aria-valuenow="<?php echo $persentase_tersedia; ?>" 
                                         aria-valuemin="0" aria-valuemax="100">
                                        <?php echo number_format($persentase_tersedia, 1); ?>% 
                                        (<?php echo $buku_tersedia; ?> buku)
                                    </div>
                                </div>
                            </div>
                            <div class="col-md-6 mb-3">
                                <h6>Buku Dipinjam</h6>
                                <div class="progress" style="height: 30px;">
                                    <div class="progress-bar bg-warning" role="progressbar" 
                                         style="width: <?php echo $persentase_dipinjam; ?>%;" 
                                         aria-valuenow="<?php echo $persentase_dipinjam; ?>" 
                                         aria-valuemin="0" aria-valuemax="100">
                                        <?php echo number_format($persentase_dipinjam, 1); ?>% 
                                        (<?php echo $buku_dipinjam; ?> buku)
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Ringkasan -->
                        <div class="alert alert-info mt-3">
                            <h6><i class="bi bi-info-circle"></i> Ringkasan:</h6>
                            <ul class="mb-0">
                                <li>Total koleksi buku perpustakaan: <strong><?php echo number_format($total_buku); ?></strong> buku</li>
                                <li>Saat ini tersedia untuk dipinjam: <strong><?php echo number_format($buku_tersedia); ?></strong> buku</li>
                                <li>Sedang dipinjam oleh anggota: <strong><?php echo number_format($buku_dipinjam); ?></strong> buku</li>
                                <li>Tingkat peminatan: <strong><?php echo number_format($persentase_dipinjam, 1); ?>%</strong></li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <!-- Footer -->
    <footer class="bg-dark text-white text-center py-3 mt-5">
        <p class="mb-0">
            &copy; <?php echo date('Y'); ?> <?php echo $nama_perpus; ?>. All rights reserved.<br />
            <small>Powered by PHP <?php echo phpversion(); ?></small>
        </p>
    </footer>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Testing:

  1. Akses: http://localhost/perpustakaan/dashboard.php
  2. Perhatikan semua data yang ditampilkan secara dinamis
  3. Refresh halaman dan lihat perubahan waktu
  4. Coba akses di waktu berbeda untuk melihat salam yang berbeda

E. TUGAS

Tugas 1: Modifikasi Halaman Info Buku (40%)

Instruksi:

  1. Copy file info_buku.php menjadi info_buku_tugas.php
  2. Tambahkan 3 buku lagi dengan data berbeda
  3. Untuk setiap buku, tampilkan:
    • Semua informasi yang sudah ada
    • Kategori buku (Programming / Database / Web Design)
    • Bahasa (Indonesia / Inggris)
    • Jumlah halaman
    • Berat buku (dalam gram)
  4. Gunakan Bootstrap cards untuk menampilkan setiap buku
  5. Tambahkan badge untuk kategori dengan warna berbeda

Contoh Output yang Diharapkan:

<?php
// Buku 1
$judul1 = "Pemrograman PHP Modern";
$kategori1 = "Programming";
$bahasa1 = "Indonesia";
$halaman1 = 450;
// ... data lainnya
 
// Buku 2
$judul2 = "MySQL Database Administration";
$kategori2 = "Database";
// ... dan seterusnya
?>

Tugas 2: Sistem Perhitungan Diskon Bertingkat (60%)

Instruksi: Buat file hitung_diskon_tugas.php yang menghitung total pembelian buku dengan sistem diskon bertingkat.

Spesifikasi:

  1. Data Input:

    • Nama pembeli
    • Judul buku
    • Harga satuan buku
    • Jumlah buku yang dibeli
    • Status member (member / non-member)
  2. Aturan Diskon:

    • Beli 1-2 buku: Tidak ada diskon
    • Beli 3-5 buku: Diskon 10%
    • Beli 6-10 buku: Diskon 15%
    • Beli > 10 buku: Diskon 20%
    • BONUS: Jika member, tambahan diskon 5%
  3. Perhitungan:

    • Subtotal = Harga satuan × Jumlah
    • Diskon = Subtotal × Persentase diskon
    • Total setelah diskon = Subtotal - Diskon
    • PPN 11% = Total setelah diskon × 0.11
    • Total Akhir = Total setelah diskon + PPN
  4. Output yang Harus Ditampilkan:

    • Nama pembeli
    • Detail buku dan harga
    • Subtotal
    • Diskon (jumlah rupiah dan persentase)
    • Diskon member (jika ada)
    • Total setelah diskon
    • PPN
    • Total Akhir (dengan format rupiah)
    • Total penghematan

Contoh Kasus:

Nama Pembeli: Budi Santoso
Judul Buku: Laravel Advanced
Harga Satuan: Rp 150.000
Jumlah: 4 buku
Status: Member

Perhitungan:
Subtotal: Rp 600.000
Diskon (10%): Rp 60.000
Diskon Member (5%): Rp 27.000 (dari Rp 540.000)
Total setelah diskon: Rp 513.000
PPN (11%): Rp 56.430
Total Akhir: Rp 569.430
Total Hemat: Rp 87.000

Template Code:

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sistem Perhitungan Diskon - Tugas</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <h1 class="mb-4">Sistem Perhitungan Diskon Bertingkat</h1>
        
        <?php
        // TODO: Isi data pembeli dan buku di sini
        $nama_pembeli = "Budi Santoso";
        $judul_buku = "Laravel Advanced";
        $harga_satuan = 150000;
        $jumlah_beli = 4;
        $is_member = true; // true atau false
        
        // TODO: Hitung subtotal
        $subtotal = 0; // Lengkapi perhitungan
        
        // TODO: Tentukan persentase diskon berdasarkan jumlah
        $persentase_diskon = 0; // Gunakan if-else atau switch
        
        // TODO: Hitung diskon
        $diskon = 0; // Lengkapi perhitungan
        
        // TODO: Total setelah diskon pertama
        $total_setelah_diskon1 = 0; // Lengkapi
        
        // TODO: Hitung diskon member jika member
        $diskon_member = 0;
        if ($is_member) {
            // Lengkapi perhitungan
        }
        
        // TODO: Total setelah semua diskon
        $total_setelah_diskon = 0; // Lengkapi
        
        // TODO: Hitung PPN
        $ppn = 0; // Lengkapi
        
        // TODO: Total akhir
        $total_akhir = 0; // Lengkapi
        
        // TODO: Total penghematan
        $total_hemat = 0; // Lengkapi
        ?>
        
        <!-- TODO: Tampilkan hasil perhitungan dengan Bootstrap -->
        <!-- Gunakan card, table, dan badge -->
        
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Submission:

  • Format: Link repository GitHub
  • Deadline: Pertemuan 3
  • Upload ke: Ngaji UIN Gusdur (submit link repository GitHub)

F. EVALUASI

1. Kuis Singkat (Dikerjakan di Kelas)

Soal Pilihan Ganda:

  1. Tag pembuka dan penutup PHP yang benar adalah:

    • A. <?php> </<?php>
    • B. <?php ... ?>
    • C. &lt;? ?>
    • D. {% %}
  2. Variabel PHP harus diawali dengan:

    • A. @
    • B. #
    • C. $
    • D. %
  3. Manakah yang BUKAN tipe data PHP?

    • A. String
    • B. Integer
    • C. Character
    • D. Boolean
  4. Untuk menggabungkan string di PHP menggunakan:

    • A. +
    • B. .
    • C. &
    • D. ,
  5. Fungsi untuk menampilkan tipe data dan nilai variabel adalah:

    • A. echo()
    • B. print()
    • C. var_dump()
    • D. show()
  6. Operator assignment untuk string concatenation adalah:

    • A. +=
    • B. .=
    • C. &=
    • D. |=
  7. Hasil dari 5 % 2 adalah:

    • A. 2
    • B. 2.5
    • C. 1
    • D. 0
  8. Perbedaan == dan === adalah:

    • A. Tidak ada perbedaan
    • B. === lebih cepat
    • C. === memeriksa tipe data juga
    • D. == tidak bisa untuk string
  9. Untuk menampilkan output ke browser menggunakan:

    • A. echo
    • B. print_screen
    • C. display
    • D. show
  10. Cara penulisan komentar multi-line di PHP:

    • A. // komentar //
    • B. <!-- komentar -->
    • C. /* komentar */
    • D. # komentar #

Jawaban dan contoh kode untuk soal essay tersedia di bahan pembelajaran lebih lanjut.