1971 views
# SKKPd (Pemrograman Web & Perangkat Bergerak) XII RPL # Mockup / Wireframe ``` --- Dibawah ini contoh 3 desain mockup dari program kakak kelas tahun lalu : --- ``` ![](https://doc.nas-kusuma-my.cloud/uploads/f539e117-22d4-42f3-8643-4c838906c6d4.png) ![](https://doc.nas-kusuma-my.cloud/uploads/7107726a-8fc6-49c6-8604-b13cb7d17826.png) ![](https://doc.nas-kusuma-my.cloud/uploads/b2b9fd86-e8e8-4d31-909b-e89298b0a527.png) # XAMPP ## Cara Mengatasi Error: MySQL shutdown unexpectedly (XAMPP) :::danger Video Youtube : πŸ”— https://www.youtube.com/watch?v=B6PVXmj_QLM ::: ## Berikut cara untuk merubah folder agar XAMPP tidak bermasalah. 1. Masuk ke file direktori mysql yang ada di dalam folder XAMPP **C:\xampp\mysql** ![](https://doc.nas-kusuma-my.cloud/uploads/fbd7527c-2bb6-495a-9ce7-c44be7ba886c.png) 2. Kemudian **Rename** folder **data** menjadi **data_lama**. ![](https://doc.nas-kusuma-my.cloud/uploads/957075bb-2dfc-4372-9e55-c19822d86427.png) 3. Buat folder baru dan beri nama **data**. ![](https://doc.nas-kusuma-my.cloud/uploads/0a31fab4-9178-4608-a089-4568abb8060c.png) 4. Pada folder **backup**, copy seluruh file dan paste ke dalam folder data. ![](https://doc.nas-kusuma-my.cloud/uploads/bb6d2e83-8e1d-4db7-b7e0-895d6a9ca8ca.png) 5. Selanjutnya, copy data **ibdata1** yang berada pada folder **data_lama**. ![](https://doc.nas-kusuma-my.cloud/uploads/7b3fedb2-41a3-480b-8ef8-7cc1e6b49539.png) 6. Lalu hasil copy data **ibdata1** dari folder **data_lama**, paste ke dalam folder **data** dan **replace** data lama dengan data **ibdata1** dari folder **data_lama**. ![](https://doc.nas-kusuma-my.cloud/uploads/49132c78-3124-4c8d-9d6c-ea02819547e5.png) 7. Lalu kembali ke folder **data_lama** dan copy **file database** dan paste kembali kedalam folder **data**, apabila muncul notifikasi replace, klik **replace file**. ![](https://doc.nas-kusuma-my.cloud/uploads/58b92c18-a7f5-43eb-b5b6-5998213b9310.png) ## XAMPP untuk pengguna MacOS :::info Link Download : πŸ”— https://sourceforge.net/projects/xampp/files/XAMPP%20Mac%20OS%20X/ ::: ### Konfigurasi Untuk Menampilkan Error di MacOs 1. Buka Folder **/Applications/XAMPP/xamppfiles/etc** lalu buka file **php.ini** dengan aplikasi **text editor**, seperti gambar berikut : ![](https://doc.nas-kusuma-my.cloud/uploads/8efd0966-80ed-4fad-9272-6694e3554076.png) 2. Tekan di keyboard tombol command + f di keyboard untuk mencari kata : **display_errors** ubah dari display_errors=**Off** menjadi display_errors=**On** dan **save**. ![](https://doc.nas-kusuma-my.cloud/uploads/63b0591c-ec03-4980-bf8b-d563571c8d2e.png) --- ## Apache **Apache** adalah perangkat lunak **web server** yang digunakan untuk meng-host dan menyajikan situs web di internet atau jaringan lokal. Nama lengkapnya adalah **Apache HTTP Server**, dan dikembangkan oleh **Apache Software Foundation (ASF)**. Fungsi Apache Apache berfungsi sebagai **perantara** antara pengguna (browser) dan server, dengan cara: 1. **Menerima permintaan HTTP** dari browser (misalnya: Chrome, Firefox). 1. **Memproses permintaan**, termasuk menjalankan skrip PHP atau membaca file HTML. 1. **Mengirimkan respons** kembali ke browser (misalnya: halaman web yang diminta). ---- ## MySql **MySQL** adalah **sistem manajemen basis data relasional (RDBMS)** yang menggunakan **Structured Query Language (SQL)** untuk mengelola dan menyimpan data. **Fungsi MySQL** MySQL digunakan untuk menyimpan, mengelola, dan mengambil data dalam aplikasi berbasis database. Beberapa fungsi utamanya: 1. **Menyimpan Data** β†’ Digunakan untuk menyimpan berbagai jenis data, seperti data pengguna, produk, transaksi, dll. 2. **Mengelola Database** β†’ Bisa membuat, menghapus, dan mengatur database secara efisien. 3. **Mendukung Query SQL** β†’ Bisa menjalankan perintah SQL seperti SELECT, INSERT, UPDATE, dan DELETE. 4. **Terhubung dengan Berbagai Bahasa Pemrograman** β†’ Bisa digunakan bersama PHP, Python, Java, dll. Fitur Utama MySQL βœ… **Cepat dan ringan** β†’ Cocok untuk aplikasi kecil hingga besar. βœ… **Open-source dan gratis** β†’ Tersedia juga versi berbayar dengan fitur tambahan. βœ… **Mendukung banyak pengguna sekaligus (multi-user)**. βœ… **Dapat menangani database besar** dengan jutaan baris data. βœ… **Terintegrasi dengan berbagai platform** seperti Windows, Linux, dan macOS. --- **Contoh Penggunaan MySQL** **1. Membuat Database** ```SQL= CREATE DATABASE sekolah; ``` **2. Membuat Tabel Siswa** ```SQL= CREATE TABLE siswa ( NIS VARCHAR(10) PRIMARY KEY, Nama VARCHAR(50), Kelas VARCHAR(10), Email VARCHAR(50) ); ``` **3. Menambahkan Data ke Tabel** ```SQL= INSERT INTO siswa (NIS, Nama, Kelas, Email) VALUES ('12345', 'Budi Santoso', 'XII IPA 1', '[email protected]'); ``` **4. Menampilkan Data Siswa** ```SQL= SELECT * FROM siswa; ``` --- # Bootstrap Online :::info πŸ”— Link Dokumentasi Bootstrap: https://getbootstrap.com/docs/5.3/getting-started/introduction/ ::: ```PHP= <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap demo</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> </head> <body> <h1>Hello, world!</h1> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> </body> </html> ``` # πŸ“ Struktur Folder ``` SKKPd/ # Folder Utama. |- bootstrap/ # Folder untuk menampung framework Bootstrap 5.3 offline. |- sertifikat/ # Folder untuk menampung file sertifikat dengan format.pdf. |- tambah/ # Folder untuk menampung file create/tambah data dari database. |- tampilan/ # Folder untuk menampung file read/tampil data dari database. |- ubah/ # Folder untuk menampung file update/ubah datai dari database. - koneksi.php # File koneksi ke database MySql. - login.php # File login user operator dan siswa. - logout.php # File logout semua user. ``` # Halaman Utama / Dashboard ## πŸ“ Struktur Folder ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ |- tampilan/ - halaman_utama.php # File dashboard dengan menampilkan konten dinamis. |- ubah/ - koneksi.php - login.php - logout.php ``` ## Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/53368292-ffe6-46a6-ae90-0a271d3dc33f.png) > [color=#37AFE1] > Kode ini merupakan halaman utama (dashboard) dari sebuah sistem berbasis web. Fungsinya adalah: >βœ… Menampilkan **navbar** navigasi. >βœ… Menampilkan **halaman** berdasarkan parameter **page**. >βœ… Menggunakan **Bootstrap** untuk tampilan yang responsif. >βœ… Mengelola sesi pengguna dengan πŸͺ `$_COOKIE['nama_lengkap']`. ## 1️⃣ Menghubungkan ke Database ```PHP= <?php include "../koneksi.php"; ?> ``` > [color=#37AFE1] > Kode ini mengimpor πŸ“„ **file koneksi.php** yang berisi koneksi ke **database**. Ini memungkinkan **halaman utama** mengambil dan menampilkan data dari database. ## 2️⃣ Navbar Navigasi, Menampilkan menu β€œSiswa” ```PHP=26 <?php if($_GET['page']=='siswa'){ echo "active";} else{ echo "";} ?> ``` ## 3️⃣ Menampilkan Halaman Berdasarkan β€œpage” ```PHP=26 switch($_GET['page']){ case "siswa": include "siswa.php"; break; } ``` > [color=#37AFE1] > Menggunakan **switch($_GET['page'])** untuk memuat halaman yang sesuai. >> Jika `page=siswa`, maka akan memuat πŸ“„ siswa.php. >> contoh : localhost/SKKPd/tampilan/halaman_utama.php`?page=siswa` >> Jika `page=jurusan`, maka akan memuat πŸ“„ jurusan.php. >> contoh : localhost/SKKPd/tampilan/halaman_utama.php`?page=jurusan` >> Dst. # CRUD Siswa ::: info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=siswa ::: ## PhpMyAdmin (struktur tabel siswa) ![](https://doc.nas-kusuma-my.cloud/uploads/6c4c0fec-65a3-43a0-8529-09101c8140a8.png) ## PhpMyAdmin (Isi data tabel siswa) | NIS | No_Absen | Nama_Siswa | No_Telp | Email | Id_Jurusan | Kelas | Angkatan | |------|---------|--------------------------------|----------------|------------------------|------------|-------|----------| | 7024 | 2 | Agus Satya Pardede | 62856555519 | [email protected] | J1 | 2 | 2024 | | 7025 | 2 | Pantai | 62878555382 | [email protected] | J1 | 1 | 2024 | | 7026 | 3 | Gede Ardi Dharma Putra | 62878555383 | [email protected] | J1 | 1 | 2024 | | 7027 | 4 | Gede Dhairya Aditama | 62878555384 | [email protected] | J1 | 1 | 2024 | | 7028 | 5 | Ghazy Maulana Pratama | 62878555385 | [email protected] | J1 | 2 | 2024 | | 7029 | 6 | Gusti Ngurah Agung Setiawan | 62878555386 | [email protected]| J2 | 3 | 2024 | | 7030 | 7 | I Gusti Ngurah Andhika Diputra| 62878555387 | [email protected] | J2 | 3 | 2023 | | 7031 | 8 | I Gusti Ngurah Arya Wiguna | 62878555388 | [email protected] | J2 | 3 | 2023 | | 7032 | 9 | I Kadek Abiyogi Mandala Satyaki | 62878555389 | [email protected] | J4 | 2 | 2023 | | 7033 | 10 | I Kadek Bayu Wiradinata | 62878555390 | [email protected] | J4 | 2 | 2023 | ## Create Siswa (tambah_siswa.php) ### πŸ“ Struktur Folder Buat file dengan nama `tambah_siswa.php` di dalam πŸ“ ==**folder tambah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_siswa.php # File insert data ke table siswa dan table pengguna sebagai operator. |- tampilan/ - halaman_utama.php |- ubah/ - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/4c1b87c8-7cda-4e9e-bbc5-dac7505bcf7d.png) ### Code (`tambah_siswa.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/ab12f6ef-4f1a-4ae3-b3bb-5237a0e4f365.png) ::: info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=tambah_siswa ::: > [color=#77B254] > Kode PHP tersebut digunakan untuk menangani proses penambahan data siswa ke dalam database ketika tombol **β€œTambah”** ditekan dalam sebuah **form HTML**. Berikut adalah penjelasan kode secara rinci: ### 1️⃣ Mengecek Apakah Tombol β€œTambah” Diklik ```PHP=2 if(isset($_POST['tombol_tambah'])){ ``` > [color=#77B254] > `isset($_POST['tombol_tambah'])` memeriksa apakah tombol dengan `name="tombol_tambah"` diklik. Jika iya, maka proses di dalam blok `if` akan dijalankan. ### 2️⃣ Mengambil Data Dari Form ```PHP=3 $nis = htmlspecialchars($_POST['nis']); $no_absen = htmlspecialchars($_POST['no_absen']); $nama_siswa = htmlspecialchars($_POST['nama_siswa']); $no_telp = htmlspecialchars($_POST['no_telp']); $email = htmlspecialchars($_POST['email']); $id_jurusan = htmlspecialchars($_POST['jurusan']); $kelas = htmlspecialchars($_POST['kelas']); $angkatan = htmlspecialchars($_POST['angkatan']); ``` > [color=#77B254] > Data yang dikirim melalui metode **POST** diambil dari **form input**. > > **htmlspecialchars()** digunakan untuk mencegah serangan XSS (Cross-Site Scripting) dengan mengubah karakter khusus menjadi entitas HTML. ### 3️⃣ Membuat Password Siswa Berdasarkan NIS ```PHP=12 $pass_siswa = "siswa".$nis; ``` > [color=#77B254] > `$nis` adalah Nomor Induk Siswa yang diambil dari form input. > > **Password default** dibuat dengan format **β€œsiswa” + NIS**. > > Misalnya, jika **NIS = 12345**, maka password = **β€œsiswa12345”** > > Password ini digunakan untuk login pertama kali sebelum siswa menggantinya. ### 4️⃣ Enkripsi Password Siswa ```PHP=13 $enkrip = password_hash($pass_siswa, PASSWORD_DEFAULT); ``` > [color=#77B254] > Fungsi **password_hash()** digunakan untuk mengenkripsi password. **PASSWORD_DEFAULT** akan menggunakan algoritma **bcrypt** secara otomatis. Contoh hasil enkripsi (tabel **pengguna** di database): ``` $2y$10$E6hYJbN2Nc2OEh9zOllDQOrQuwQ1mj8jE3sXyLptF9aKmKopftXPC ``` > [color=#77B254] > Password yang sudah **di-hash** tidak bisa dikembalikan ke bentuk asli(plaintext). > > Untuk mengecek login nanti, gunakan **password_verify(... , ...)**. ### 5️⃣ Memasukkan Data Siswa Ke Tabel Siswa dan Pengguna ```PHP=15 $hasil = mysqli_query($koneksi, "INSERT INTO siswa VALUES('$nis', '$no_absen', '$nama_siswa', '$no_telp', '$email', '$id_jurusan', '$kelas', '$angkatan')"); $hasil_pengguna = mysqli_query($koneksi, "INSERT INTO pengguna VALUES(NULL, NULL, '$nis', '$enkrip')"); ``` > [color=#77B254] > Query pertama **($hasil)**: Memasukkan data siswa ke dalam **tabel siswa** dengan **NIS** sebagai primary key. > > Query kedua (**$hasil_pengguna**): Memasukkan data login siswa ke dalam **tabel pengguna**, dengan **NIS** sebagai identitas pengguna dan **password default**. ### 6️⃣ Notifikasi Berhasil atau Gagal ```PHP=19 if(!$hasil){ echo "<script>alert('gagal memasukkan data');window.location.href='halaman_utama.php?page=tambah_siswa'</script>"; }else{ echo "<script>alert('Berhasil Menambahkan Data');window.location.href='halaman_utama.php?page=siswa'</script>"; } ``` > [color=#77B254] > Jika penyimpanan data gagal **($hasil == false)**, akan muncul **alert β€œgagal memasukkan data”** dan halaman akan dialihkan ke **halaman tambah siswa**. > > Jika berhasil, muncul **alert β€œBerhasil Menambahkan Data”** dan halaman akan dialihkan ke **halaman daftar siswa**. --- :::warning Kode ini berfungsi untuk: βœ… Menangani input data siswa dari form. βœ… Memastikan data aman dari serangan XSS. βœ… Menyimpan data siswa ke dalam database. βœ… Menyimpan akun login siswa dengan password default sekaligus dienkripsi. βœ… Menggunakan password hashing β†’ Data lebih aman. βœ… Memberikan alert apakah proses berhasil atau gagal. ::: --- ## Read dan Delete Siswa (`siswa.php`) ### πŸ“ Struktur Folder Buat file dengan nama `tambah_siswa.php` di dalam πŸ“ ==**folder tampilan**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_siswa.php |- tampilan/ - halaman_utama.php - siswa.php # File tampil data dari table siswa dan delete dari table sertifikat, pengguna, dan siswa sebagai operator. - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/a3f5898d-9214-467e-a77a-fa4242b41c11.png) ### Code (`siswa.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/f332e06f-a6a9-4de6-aaa5-b64e69008b99.png) ::: info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=siswa ::: > [color=red] > Kode ini terdiri dari dua bagian utama: >>**1️⃣ PHP (Proses Penghapusan Data Siswa)** >>**2️⃣ HTML + Bootstrap (Menampilkan Data Siswa dalam Bentuk Kartu)** --- ### 1️⃣ PHP (Menghapus Data Siswa dari Database) ```PHP=2 if(isset($_GET['nis'])){ $nis = $_GET['nis']; $delete_pengguna = mysqli_query($koneksi, "DELETE FROM pengguna WHERE NIS='$nis'"); $delete_sertifikat = mysqli_query($koneksi, "DELETE FROM sertifikat WHERE NIS='$nis'"); $delete_siswa = mysqli_query($koneksi, "DELETE FROM siswa WHERE NIS='$nis'"); if(!$delete_siswa){ echo "<script>alert('gagal menghapus data');window.location.href='halaman_utama.php?page=siswa'</script>"; }else{ echo "<script>alert('berhasil menghapus data');window.location.href='halaman_utama.php?page=siswa'</script>"; } } ``` > [color=red] > Mengecek apakah ada parameter nis yang dikirim melalui **URL (GET)**. > [color=red] > Jika ada, maka akan: >> 1. Menghapus data siswa dari tabel pengguna. >> 2. Menghapus data terkait dari tabel sertifikat. >> 3. Menghapus data siswa dari tabel siswa. > [color=red] > Jika penghapusan gagal, muncul **alert gagal**. > [color=red] > Jika berhasil, muncul **alert sukses** dan pengguna diarahkan kembali ke halaman daftar siswa. ### 2️⃣ HTML + Bootstrap (Menampilkan Data Siswa dalam Kartu) ```PHP=17 <div class="container-fluid"> <div class="row"> <div class="col"></div> <div class="col-10 mt-5"> <div class="row"> <a href="halaman_utama.php?page=tambah_siswa" class="btn btn-success float-end">+ Tambah siswa</a> </div> <div class="row row-cols-1 row-cols-md-3 g-4"> <?php $data_siswa = mysqli_query($koneksi, "SELECT * FROM siswa INNER JOIN jurusan USING(Id_Jurusan)"); while($data = mysqli_fetch_assoc($data_siswa)){ ?> <div class="col"> <div class="card mb-3 mt-5" style="max-width: 540px;"> <div class="row g-0"> <div class="col-md-4"> <div class="card-body"> <div class="badge text-bg-primary mb-2 text-wrap" style="width: 4rem;"> <?=$data['NIS']?> </div> <p class="card-text">Absen : <?=$data['No_Absen']?></p> <p class="card-text"><?=$data['Jurusan']?> <?=$data['Kelas']?></p> <p class="card-text"><small class="text-body-secondary">Angkatan : <?=$data['Angkatan']?></small> </p> </div> </div> <div class="col-md-8"> <div class="card-body"> <h5 class="card-title"><?=$data['Nama_Siswa']?></h5> <p class="card-text"><?=$data['Email']?></p> <p class="card-text">+<?=$data['No_Telp']?></p> <a href="halaman_utama.php?page=ubah_siswa&nis=<?=$data['NIS']?>" class="btn btn-warning">update</a> <a onclick="return confirm('Yakin mau hapus?');" href="halaman_utama.php?page=siswa&nis=<?=$data['NIS']?>" class="btn btn-danger">delete</a> </div> </div> </div> </div> </div> <?php } ?> </div> </div> <div class="col"></div> </div> </div> ``` > [color=#37AFE1] > **1. Mengambil Data Siswa:** ```PHP=27 $data_siswa = mysqli_query($koneksi, "SELECT * FROM siswa INNER JOIN jurusan USING(Id_Jurusan)"); ``` > [color=#37AFE1] > Mengambil semua data siswa dari tabel siswa dan **menghubungkan ke tabel jurusan** menggunakan `INNER JOIN`. > [color=#37AFE1] > `USING(Id_Jurusan)` β†’ Menyambungkan tabel siswa dengan jurusan berdasarkan Id_Jurusan. > [color=#37AFE1] > **2. Menampilkan Data dalam Card Bootstrap:** > [color=#37AFE1] > Setiap siswa ditampilkan dalam format kartu (card) dengan informasi: ---- ## Update Siswa (`ubah_siswa.php`) ### πŸ“ Struktur Folder Buat file dengan nama `ubah_siswa.php` di dalam πŸ“ ==**folder ubah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_siswa.php |- tampilan/ - halaman_utama.php - siswa.php |- ubah/ - siswa.php # File update data dari table siswa sebagai operator. - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/e2e39b24-10d4-4c4c-aaef-9b42a4723ed6.png) ### Code (`ubah_siswa.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/c9649e2b-ad88-47fc-a824-be411ccbec0a.png) ::: info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=ubah_siswa&nis=7028 ::: ### 1️⃣ Mengambil Data Siswa Berdasarkan NIS ```PHP=2 $nis = $_GET['nis']; $data_update = mysqli_fetch_assoc(mysqli_query($koneksi, "SELECT * FROM siswa WHERE NIS='$nis'")); ``` > [color=#FFD65A] > Mengambil parameter nis dari URL (halaman_utama.php?page=ubah_siswa&nis=12345). > [color=#FFD65A] > Mengambil data siswa berdasarkan **NIS** dari tabel siswa. ### 2️⃣ Proses Update Data Siswa ```PHP=5 if(isset($_POST['tombol_update'])){ ``` > [color=#FFD65A] > Ketika tombol β€œUpdate” ditekan: > [color=#FFD65A] > πŸ“Œ Mengambil & Memfilter Input dari Form ```PHP=6 $no_absen = htmlspecialchars($_POST['no_absen']); $nama_siswa = htmlspecialchars($_POST['nama_siswa']); $no_telp = htmlspecialchars($_POST['no_telp']); $email = htmlspecialchars($_POST['email']); $password = htmlspecialchars($_POST['password']); $konfirmasi_pass = htmlspecialchars($_POST['konfirmasi_pass']); $id_jurusan = htmlspecialchars($_POST['jurusan']); $kelas = htmlspecialchars($_POST['kelas']); $angkatan = htmlspecialchars($_POST['angkatan']); ``` > [color=#FFD65A] > **Mengamankan input** dengan `htmlspecialchars()` (mencegah XSS). > [color=#FFD65A] > $_POST mengambil data dari formulir. ### 3️⃣ **Update Data Siswa (Tanpa Mengubah Password)** ```PHP=16 if($password == NULL){ if($password !== $konfirmasi_pass){ echo "<script>alert('password dengan konfirmasi password tidak sama');window.location.href='halaman_utama.php?page=ubah_siswa&nis=".$nis."'</script>"; }else{ $hasil = mysqli_query($koneksi, "UPDATE siswa SET No_Absen = '$no_absen', Nama_Siswa = '$nama_siswa', No_Telp = '$no_telp', Email = '$email', Id_Jurusan = '$id_jurusan', Kelas = '$kelas', Angkatan = $angkatan WHERE NIS = '$nis'"); if(!$hasil){ echo "<script>alert('Gagal update data siswa');window.location.href='halaman_utama.php?page=ubah_siswa&nis=$nis'</script>"; }else{ echo "<script>alert('Berhasil update data siswa');window.location.href='halaman_utama.php?page=siswa'</script>"; } } } ``` > [color=#FFD65A] > πŸ”Ή Jika password tidak diisi, maka hanya data siswa yang diperbarui. ### 4️⃣ **Update Data Siswa (Dengan Password Baru)** ```PHP=28 }else{ if($password !== $konfirmasi_pass){ echo "<script>alert('password dengan konfirmasi password tidak sama');window.location.href='halaman_utama.php?page=ubah_siswa&nis=".$nis."'</script>"; }else{ $hasil = mysqli_query($koneksi, "UPDATE siswa SET No_Absen = '$no_absen', Nama_Siswa = '$nama_siswa', No_Telp = '$no_telp', Email = '$email', Id_Jurusan = '$id_jurusan ', Kelas = '$kelas', Angkatan = $angkatan WHERE NIS = '$nis'"); $enkrip = password_hash($password, PASSWORD_DEFAULT); $hasil_pengguna = mysqli_query($koneksi, "UPDATE pengguna SET Password = '$enkrip' WHERE NIS = '$nis'"); if(!$hasil){ echo "<script>alert('Gagal update data siswa');window.location.href='halaman_utama.php?page=ubah_siswa&nis=$nis'</script>"; }else{ echo "<script>alert('Berhasil update data siswa');window.location.href='halaman_utama.php?page=siswa'</script>"; } } } ``` > [color=#FFD65A] > πŸ”Ή Jika password diisi, sistem akan: > [color=#FFD65A] >> 1. Memeriksa kesesuaian password & konfirmasi password. >> 1. Mengupdate data siswa. >> 1. Mengupdate password di tabel pengguna (pengguna menyimpan login siswa). >> 1. Password di-hash dengan password_hash() sebelum disimpan. ### 5️⃣ **Formulir Input Data** > [color=#FFD65A] > πŸ“Œ Menampilkan data siswa yang sudah ada dan menyediakan kolom edit. ```PHP <input type="number" class="form-control" name="nis" value="<?=$data_update['NIS']?>" required> <input type="number" class="form-control" name="no_absen" value="<?=$data_update['No_Absen']?>" required> <input type="text" class="form-control" name="nama_siswa" value="<?=$data_update['Nama_Siswa']?>" required> <input type="text" class="form-control" name="no_telp" value="<?=$data_update['No_Telp']?>" required> <input type="email" class="form-control" name="email" value="<?=$data_update['Email']?>" required> ``` ### 6️⃣ **Update Password (Opsional)** ```PHP <input type="text" name="password" class="form-control"> <input type="text" name="konfirmasi_pass" class="form-control"> ``` > [color=#FFD65A] > **Opsional**, jika user ingin mengganti password. ### 7️⃣ **Menampilkan Jurusan dalam Dropdown** ```PHP=93 <select name="jurusan" class="form-select"> <?php $list = mysqli_query($koneksi, "SELECT * FROM jurusan"); while($data = mysqli_fetch_assoc($list)){ ?> <option value="<?=$data['Id_Jurusan']?>" <?php if($data['Id_Jurusan']==$data_update['Id_Jurusan']){echo "selected";} ?>> <?=$data['Jurusan']?> </option> <?php } ?> </select> ``` > [color=#FFD65A] > **Menampilkan daftar jurusan** dari tabel jurusan. > [color=#FFD65A] > Jika `Id_Jurusan` siswa cocok dengan jurusan, maka dipilih otomatis. ---- :::warning πŸ’‘ **Kesimpulan** βœ… Mengambil data siswa berdasarkan NIS. βœ… Memeriksa apakah password ingin diubah. βœ… Jika hanya data siswa diubah β†’ update data di tabel siswa. βœ… Jika password juga diubah β†’ update password di tabel pengguna dengan hashing. βœ… Menggunakan alert JavaScript untuk memberi notifikasi keberhasilan/gagal. βœ… Form menampilkan data yang sudah ada untuk diedit. ::: ---- # CRUD Jurusan :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=jurusan ::: ## PhpMyAdmin (struktur tabel jurusan) ![](https://doc.nas-kusuma-my.cloud/uploads/65488380-a295-4b80-a392-6263cfb0d0fa.png) ## PhpMyAdmin (Isi data tabel jurusan) | Id_Jurusan | Jurusan | |------------|---------| | J1 | RPL | | J2 | TKJ | | J3 | AN | | J4 | DKV | | J5 | BD | ## Create Jurusan (`tambah_jurusan.php`) ### πŸ“ Struktur Folder Buat file dengan nama `tambah_jurusan.php` di dalam πŸ“ ==**folder tambah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php # File insert data dari table jurusan sebagai operator. - tambah_siswa.php |- tampilan/ - halaman_utama.php - siswa.php |- ubah/ - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/f2c5f0d9-af37-4e69-8d04-fa8e1126332d.png) ### Code (`tambah_jurusan.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/a145a1b4-471b-4416-bd20-758a6bd71885.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=tambah_jurusan ::: ### 1️⃣ Mengecek Apakah Tombol β€œTambah” Diklik ```PHP=2 if(isset($_POST['tombol_tambah'])){ ``` > [color=#77B254] > Kode ini memeriksa apakah tombol **β€œTambah”** (`name="tombol_tambah"`) telah diklik oleh pengguna. > > Jika tombol diklik, maka proses insert data ke database akan berjalan. ### 2️⃣ Mengambil ID Jurusan Terakhir ```PHP=4 $id_jurusan = mysqli_fetch_assoc(mysqli_query($koneksi, "SELECT Id_Jurusan FROM jurusan ORDER BY Id_Jurusan DESC LIMIT 1")); ``` > [color=#77B254] > Query ini mengambil **ID Jurusan terakhir** dari tabel jurusan, dengan mengurutkan berdasarkan **`Id_Jurusan`** dari yang terbesar **(`DESC`)**. > > `LIMIT 1` memastikan hanya **satu data** terakhir yang diambil. ### 3️⃣ Menentukan ID Jurusan Baru ```PHP=6 if ($id_jurusan) { $angkaTerakhir = intval(substr($id_jurusan['Id_Jurusan'], 1)); $noUrut = $angkaTerakhir + 1; } else { $noUrut = 1; } $Id = "J".$noUrut; ``` > [color=#77B254] > **Jika ada data jurusan sebelumnya**, maka ID terakhir diproses: >`substr($id_jurusan['Id_Jurusan'], 1)` β†’ Mengambil angka dari `ID` terakhir (mengabaikan huruf β€œJ”). > >`intval(...)` β†’ Mengubah string angka menjadi integer. > >`+1` β†’ Menambahkan angka 1 agar `ID` berikutnya meningkat. > >**Jika tidak ada data jurusan**, maka `ID` pertama adalah "J1". | ID Terakhir | ID Baru | | -------- | -------- | | J1 | J2 | | J9 | J10 | | J20 | J21 | ### 4️⃣ Menyimpan Data Jurusan Baru ke Database ```PHP=13 $jurusan = $_POST['jurusan']; $hasil = mysqli_query($koneksi, "INSERT INTO jurusan VALUES('$Id', '$jurusan')"); ``` > [color=#77B254] >Membaca input dari form β†’ `$jurusan` = `$_POST['jurusan']`; > >Memasukkan data ke database β†’ `INSERT INTO jurusan VALUES('$Id', '$jurusan')` > >`$Id` = ID jurusan yang baru dibuat (J1, J2, dst.) > >`$jurusan` = Nama jurusan yang dimasukkan dari form. ### 5️⃣ Notifikasi Berhasil atau Gagal ```PHP=17 if(!$hasil){ echo "<script>alert('gagal memasukkan data');window.location.href='halaman_utama.php?page=tambah_jurusan'</script>"; }else{ echo "<script>alert('Berhasil Menambahkan Data');window.location.href='halaman_utama.php?page=jurusan'</script>"; } ``` > [color=#77B254] >Jika **insert gagal**, tampilkan **alert β€œgagal memasukkan data”** dan kembali ke halaman tambah jurusan. > >Jika **insert sukses**, tampilkan **alert β€œBerhasil Menambahkan Data”** dan pindah ke halaman daftar jurusan. ### 6️⃣ Form Input Data Jurusan ```HTML=25 <form action="" method="post"> ``` > [color=#77B254] > Form ini digunakan untuk memasukkan data jurusan. > > **`method="post"`** β†’ Data akan dikirim ke halaman yang sama. ```HTML=32 <input type="text" class="form-control" name="jurusan" required> <label for="floatingInput">Nama Jurusan</label> ``` > [color=#77B254] > Input **Nama Jurusan** (wajib diisi, karena required). ```HTML=37 <input type="submit" name="tombol_tambah" class="btn btn-success float-end" value="kirim"> ``` > [color=#77B254] > Tombol untuk mengirim data. --- :::warning πŸ’‘ **Kesimpulan** βœ… Kode ini **menambahkan jurusan baru** dengan ID otomatis (J1, J2, J3, ...). βœ… ID jurusan dibuat **secara berurutan** berdasarkan ID terakhir di database. βœ… Jika **insert berhasil**, pengguna dialihkan ke halaman daftar jurusan. βœ… Jika **insert gagal**, muncul peringatan dan tetap di halaman tambah jurusan. ::: --- ## Read Jurusan dan Delete Jurusan (`jurusan.php`) ### πŸ“ Struktur Folder Buat file dengan nama `jurusan.php` di dalam πŸ“ ==**folder tampilan**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_siswa.php |- tampilan/ - halaman_utama.php - jurusan.php # File delete dan tampilkan data dari table jurusan sebagai operator. - siswa.php |- ubah/ - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/29132bc4-7861-4948-a572-d04d097dc0cf.png) ### Code (`jurusan.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/00fd63df-1014-46fb-b136-56f09f848b96.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=jurusan ::: ### 1️⃣ Menghapus Jurusan dari Database ```PHP=2 if(isset($_GET['id'])){ $id_jurusan = $_GET['id']; $hasil_jurusan = mysqli_query($koneksi, "DELETE FROM jurusan WHERE Id_Jurusan='$id_jurusan'"); if(!$hasil_jurusan){ echo "<script>alert('gagal menghapus data');window.location.href='halaman_utama.php?page=jurusan'</script>"; }else{ echo "<script>alert('berhasil menghapus data');window.location.href='halaman_utama.php?page=jurusan'</script>"; } } ``` > [color=red] > `isset($_GET['id'])` β†’ Mengecek apakah parameter id dikirim melalui URL. > > `$id_jurusan = $_GET['id'];` β†’ Mengambil ID jurusan dari URL. > > `mysqli_query($koneksi, "DELETE FROM jurusan WHERE Id_Jurusan='$id_jurusan'");` β†’ Menghapus data jurusan berdasarkan ID. > > **Jika query gagal**, muncul peringatan "gagal menghapus data", dan pengguna tetap di halaman jurusan. > > **Jika query berhasil**, muncul peringatan "berhasil menghapus data", lalu pengguna diarahkan ke halaman daftar jurusan. ### 2️⃣ Tabel Menampilkan Daftar Jurusan ```PHP=33 $data_jurusan = mysqli_query($koneksi, "SELECT * FROM jurusan"); while($data = mysqli_fetch_assoc($data_jurusan)){ .... } ``` > [color=#37AFE1] > Mengambil semua data jurusan > > Menggunakan **while** untuk menampilkan **semua jurusan** dalam bentuk **tabel**. > > Kolom **β€œAksi”** berisi **tombol update** dan **delete** untuk setiap jurusan. ### 3️⃣ Mencegah Penghapusan Jika Data Jurusan Masih Digunakan di Tabel Siswa ```PHP=43 $id_cek = $data['Id_Jurusan']; $cek_data = mysqli_query($koneksi, "SELECT Id_Jurusan FROM siswa WHERE Id_Jurusan='$id_cek'"); if(mysqli_num_rows($cek_data) > 0){ echo ""; }else{ ?> <a onclick="return confirm('Yakin mau hapus?');" href="halaman_utama.php?page=jurusan&id=<?=$data['Id_Jurusan']?>" class="btn btn-danger">delete</a> <?php } ?> ``` > [color=#37AFE1] > Kode berikut mengecek apakah ada siswa yang masih terhubung dengan jurusan tersebut. > > Jika jurusan sudah digunakan oleh siswa, maka tombol **β€œdelete” tidak ditampilkan**. > > Jika jurusan belum digunakan, maka tombol **β€œdelete” ditampilkan**. --- :::warning πŸ’‘ **Kesimpulan** βœ… Menampilkan daftar jurusan dalam tabel. βœ… Memastikan jurusan tidak bisa dihapus jika masih digunakan oleh siswa. βœ… Memungkinkan pengguna mengupdate atau menghapus jurusan dengan tombol aksi. βœ… Menampilkan tombol tambah jurusan untuk menambahkan data baru. ::: --- ## Update Jurusan (`ubah_jurusan.php`) ### πŸ“ Struktur Folder Buat file dengan nama `ubah_jurusan.php` di dalam πŸ“ ==**folder ubah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_siswa.php |- tampilan/ - halaman_utama.php - jurusan.php - siswa.php |- ubah/ - ubah_jurusan.php # File update data dari table jurusan sebagai operator. - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/7b771a2a-5db3-42ef-9186-1b824b253be1.png) ### Code (`ubah_jurusan.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/e8d089fd-8552-4cce-ad64-0f541c5db581.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=ubah_jurusan&id=J3 ::: ### 1️⃣ Mengambil Data Jurusan yang Akan Diubah ```PHP=2 $id = $_GET['id']; $data_update = mysqli_fetch_assoc(mysqli_query($koneksi, "SELECT * FROM jurusan WHERE Id_Jurusan='$id'")); ``` > [color=#FFD65A] > Komputer akan melihat **ID jurusan** yang dikirim melalui alamat web (URL). > > Lalu, komputer mencari jurusan tersebut di dalam database dan menyimpannya dalam `$data_update`. > > **Misalnya:** Jika kita ingin mengubah jurusan β€œMatematika”, komputer akan mencari jurusan β€œMatematika” berdasarkan ID-nya. ### 2️⃣ Jika Tombol β€œUpdate” Ditekan ```PHP=5 if(isset($_POST['tombol_update'])){ $jurusan = $_POST['jurusan']; $hasil = mysqli_query($koneksi, "UPDATE jurusan SET Jurusan = '$jurusan' WHERE Id_Jurusan='$id'"); ``` > [color=#FFD65A] > Jika tombol update ditekan, komputer akan mengambil **nama jurusan baru** yang ditulis pengguna. > > Lalu, komputer akan mengganti **nama jurusan lama** dengan **nama jurusan baru** di dalam database. > > **Misalnya:** Jika sebelumnya β€œMatematika”, lalu kita ganti jadi β€œFisika”, maka di dalam database, β€œMatematika” akan berubah menjadi β€œFisika”. ### 3️⃣ Menampilkan Notifikasi Berhasil atau Gagal ```PHP=10 if(!$hasil){ echo "<script>alert('Gagal update data jurusan');window.location.href='halaman_utama.php?page=ubah_jurusan&nis=$nis'</script>"; }else{ echo "<script>alert('Berhasil update data jurusan');window.location.href='halaman_utama.php?page=jurusan'</script>"; } ``` > [color=#FFD65A] > Jika berhasil, akan muncul pesan **β€œBerhasil update data jurusan”**. > > Jika gagal, akan muncul pesan **β€œGagal update data jurusan”**. ### 4️⃣ Menampilkan Form untuk Mengubah Jurusan ```PHP=18 <form action="" method="post"> <div class="container"> <div class="row"> <div class="col"></div> <div class="col-6 mt-5"> <div class="form-floating mb-3"> <input type="text" class="form-control" id="floatingInput" placeholder="[email protected]" name="jurusan" value="<?=$data_update['Jurusan']?>" required> <label for="floatingInput">Nama Jurusan</label> </div> <input type="submit" name="tombol_update" class="btn btn-success float-end" id="" value="kirim"> </div> <div class="col"></div> </div> </div> </form> ``` > [color=#FFD65A] > Tampilan ini memungkinkan pengguna untuk **mengubah nama jurusan**. > > **Nama jurusan lama akan langsung muncul di kotak isia** (agar lebih mudah diedit). > > Setelah diubah, pengguna bisa **menekan tombol β€œKirim”** untuk menyimpan perubahan. --- :::warning πŸ’‘ **Kesimpulan** βœ… Kode ini digunakan untuk mengedit nama jurusan di database. βœ… Data jurusan lama diambil dan ditampilkan di form. βœ… Setelah diedit, data disimpan ke dalam database. βœ… Jika berhasil, muncul pesan sukses. Jika gagal, muncul pesan error. ::: --- # CRUD Pegawai :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=pegawai ::: ::: info [πŸŽ₯ Alur CRUD Pegwai > Tonton Video](https://drive.google.com/file/d/17nDCR7FN-8dXGcTs3lA2BZYHBXhiDvot/view?usp=drive_link) ::: ## PhpMyAdmin (struktur tabel pegawai) ![](https://doc.nas-kusuma-my.cloud/uploads/38ef5349-d0f6-4fd6-a174-86ebd3a93899.png) ## PhpMyAdmin (Isi data tabel pegawai) | Nama_Lengkap | Username | |------------------------------|----------| | Putu Yenni Suryantari, S.Pd | yenny | ## Create Pegawai (`tambah_pegawai.php`) ### πŸ“ Struktur Folder Buat file dengan nama `tambah_pegawai.php` di dalam πŸ“ ==**folder tambah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_pegawai.php # File tambah data ke table pegawai dan table pengguna sebagai operator. - tambah_siswa.php |- tampilan/ - halaman_utama.php - jurusan.php - siswa.php |- ubah/ - ubah_jurusan.php - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/5c6c1140-2df7-4915-a2e9-6387eabf7e88.png) ### Code (`tambah_pegawai.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/6166c081-cb65-4342-8c9d-48eb4c868697.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=tambah_pegawai ::: ## Read Pegawai dan Delete Pegawai (`pegawai.php`) ### Code (`halaman_utama.php`) Modifikasi file`halaman_utama.php` di dalam **Navbar** ==**folder tampilan**== ![](https://doc.nas-kusuma-my.cloud/uploads/02437288-84da-4242-8174-3a6fad48c158.png) ![](https://doc.nas-kusuma-my.cloud/uploads/f76cb217-6643-4742-a4a1-ad99f6984ff0.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=ubah_pegawai&username=yenny ::: ## Update Pegawai (`ubah_pegawai.php`) ### πŸ“ Struktur Folder Buat file dengan nama `ubah_pegawai.php` di dalam πŸ“ ==**folder ubah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_pegawai.php - tambah_siswa.php |- tampilan/ - halaman_utama.php - jurusan.php - siswa.php |- ubah/ - ubah_jurusan.php - ubah_pegawai.php # File tampilkan, update, delete data dari table pegawai dan table pengguna sebagai operator. - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`ubah_pegawai.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/a64e7d75-405c-44c7-9e70-029ed14c5d12.png) :::info >login sebagai pegawai/operator dengan akun : username = yenny password = admin12345 πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=ubah_pegawai ::: --- # CRUD Kategori Kegiatan :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=kategori_kegiatan ::: ## PhpMyAdmin (struktur tabel kategori) ![](https://doc.nas-kusuma-my.cloud/uploads/2598317c-ab82-4499-abb4-3d0e9a37ffb7.png) ## PhpMyAdmin (Isi data tabel kategori) | Id_Kategori | Kategori | Sub_Kategori | |------------|----------|--------------------------------------------| | KTG01 | Wajib | Kurikulum Merdeka Project P5 | | KTG02 | Opsional | Perlombaan / Kejuaraan / Kompetisi | | KTG03 | Opsional | Komunitas Kreatif Siswa | | KTG04 | Wajib | Ekstra Kurikuler | | KTG05 | Opsional | TEFA (Teaching Factory) | | KTG06 | Opsional | Penalaran / Karya Ilmiah / Akademik | | KTG07 | Opsional | Lainnya | | KTG08 | Opsional | Penalaran / Organisasi Sekolah | ## PhpMyAdmin (struktur tabel kegiatan) ![](https://doc.nas-kusuma-my.cloud/uploads/562f8a97-f360-4efa-b19f-186da05fe90d.png) ## PhpMyAdmin (Isi data tabel kegiatan) | Id_Kegiatan | Jenis_Kegiatan | Angka_Kredit | Id_Kategori | |------------|----------------------------------|--------------|------------| | 1 | Project Gaya Hidup Berkelanjutan | 1 | KTG01 | | 2 | Project Kebekerjaan | 1 | KTG01 | | 3 | Project Bhinneka Tunggal Ika | 1 | KTG01 | | 4 | Juara 1 Internasional | 7 | KTG02 | | 5 | Harapan 2 Nasional | 5 | KTG02 | | 6 | Juara 1 Internal Sekolah | 3 | KTG02 | | 7 | Wakil Ketua Rohis | 5 | KTG03 | | 8 | Sekretaris Osis | 7 | KTG03 | | 10 | Project Baru | 1 | KTG01 | | 11 | Ketua Rohis | 3 | KTG03 | | 13 | Project Bersama | 4 | KTG03 | | 24 | Bendahara Rohis | 3 | KTG03 | | 25 | Bendahara Sehati | 5 | KTG08 | ## Create Kategori Kegiatan (`tambah_kategori_kegiatan.php`) ### πŸ“ Struktur Folder Buat file dengan nama `tambah_kategori_kegiatan.php` di dalam πŸ“ ==**folder tambah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php # File insert data kategori dan data kegiatan ke dalam table kategori dan table kegiatan sekaligus. - tambah_pegawai.php - tambah_siswa.php |- tampilan/ - halaman_utama.php - jurusan.php - siswa.php |- ubah/ - ubah_jurusan.php - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/0b1bcfe1-e2c1-4d7e-852f-da64eee94deb.png) ### Code (`tambah_kategori_kegiatan.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/812139da-1e63-42a9-8125-52e33bc1d211.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=tambah_kegiatan ::: ## Read Kategori Kegiatan dan Delete Kategori Kegiatan (`kategori_kegiatan.php`) ### πŸ“ Struktur Folder Buat file dengan nama `kategori_kegiatan.php` di dalam πŸ“ ==**folder tampilan**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php - tambah_pegawai.php - tambah_siswa.php |- tampilan/ - halaman_utama.php - jurusan.php - kategori_kegiatan.php # File tampil & delete data kategori kegiatan dari table kategori dan table kegiatan dikelompokkan berdasarkan id_kategori. - siswa.php |- ubah/ - ubah_jurusan.php - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/b11214ca-8906-406e-afb6-948fc9a5b219.png) ### Code (`kategori_kegiatan.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/8a6dfde2-6e8f-4ae9-bbbf-52482eb00926.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=kategori_kegiatan ::: Kode di atas terdiri dari dua bagian utama: 1️⃣ Proses Penghapusan Data (DELETE SQL) 2️⃣ Tampilan Data dalam Tabel ### 1️⃣ Proses Penghapusan Data (DELETE SQL) ```PHP= <?php if(isset($_GET['Id_Kegiatan'])){ // Cek apakah parameter Id_Kegiatan ada di URL $Id_Kegiatan = $_GET['Id_Kegiatan']; // Ambil nilai Id_Kegiatan dari URL $hasil_kegiatan = mysqli_query($koneksi, "DELETE FROM kegiatan WHERE Id_Kegiatan='$Id_Kegiatan'"); if(!$hasil_kegiatan){ echo "<script>alert('gagal menghapus data');window.location.href='halaman_utama.php?page=kategori_kegiatan'</script>"; }else{ echo "<script>alert('berhasil menghapus data');window.location.href='halaman_utama.php?page=kategori_kegiatan'</script>"; } } ?> ``` > [color=red] > `isset($_GET['Id_Kegiatan'])` β†’ Mengecek apakah ada parameter Id_Kegiatan dalam URL. > > `$Id_Kegiatan = $_GET['Id_Kegiatan'];` β†’ Mengambil nilai Id_Kegiatan dari URL. > > `mysqli_query($koneksi, "DELETE FROM kegiatan WHERE Id_Kegiatan='$Id_Kegiatan'")` β†’ Menjalankan query SQL untuk menghapus data kegiatan berdasarkan Id_Kegiatan. > > Jika query gagal `(!$hasil_kegiatan)`, tampilkan alert β€œgagal menghapus data”, lalu kembali ke halaman utama. > > Jika berhasil, tampilkan alert β€œberhasil menghapus data”, lalu kembali ke halaman utama. ### 2️⃣ Tampilan Data dalam Tabel ```PHP=35 $query = mysqli_query($koneksi, "SELECT * FROM kategori INNER JOIN kegiatan ON kategori.Id_Kategori = kegiatan.Id_Kategori ORDER BY kategori.Sub_Kategori"); $last_kategori_id = null; // Menyimpan ID kategori sebelumnya $no = 1; // Nomor urut kegiatan while ($baris = mysqli_fetch_assoc($query)) { ``` > [color=#37AFE1] > Mengambil data dari tabel kategori dan kegiatan menggunakan **INNER JOIN**. > > Mengurutkan data berdasarkan Sub_Kategori. > > Menyimpan ID kategori sebelumnya di $last_kategori_id untuk mengelompokkan data berdasarkan kategori. ### 3️⃣ Menampilkan Header Kategori ```PHP=41 if ($last_kategori_id !== $baris['Id_Kategori']) { if ($last_kategori_id !== null) { echo "<tr><td colspan='7'>&nbsp;</td></tr>"; // Baris kosong untuk pemisah antar kategori } echo " <tr class='table-active'> <td colspan='7' class='fw-bold text-start'>Kategori: " . htmlspecialchars($baris['Sub_Kategori']) . "</td> </tr> "; $no = 1; // Reset nomor kegiatan jika kategori berubah } ``` > [color=#37AFE1] > Menampilkan kategori hanya sekali per kelompok data. > > Menggunakan table-active untuk menyoroti kategori. > > Menambahkan baris kosong untuk memisahkan antar kategori. ### 4️⃣ Menampilkan Data Kegiatan ```PHP=59 <tr class="text-center"> <td><?=$no++?></td> <td align="left"><?=htmlspecialchars($baris['Jenis_Kegiatan'])?></td> <td><?=htmlspecialchars($baris['Angka_Kredit'])?></td> <td> <a href="halaman_utama.php?page=ubah_kegiatan.php&Id_Kegiatan=<?=htmlspecialchars($baris['Id_Kegiatan'])?>" class="btn btn-warning">Edit</a> </td> <td> <a href="halaman_utama.php?page=kategori_kegiatan&Id_Kegiatan=<?=htmlspecialchars($baris['Id_Kegiatan'])?>" class="btn btn-danger" onclick="return confirm('Yakin ingin menghapus kegiatan ini?');">Hapus</a> </td> </tr> ``` ### 5️⃣ Memperbarui ID Kategori Terakhir ```PHP=78 $last_kategori_id = $baris['Id_Kategori']; ``` > [color=#37AFE1] > Menjaga agar kategori tidak ditampilkan berulang. --- :::warning πŸ’‘ **Kesimpulan** βœ… Menghapus Kegiatan dari Database (berdasarkan Id_Kegiatan yang dikirim via URL). βœ… Menampilkan Daftar Kegiatan dengan kategori yang dikelompokkan. βœ… Memisahkan Data Berdasarkan Kategori dengan menampilkan header kategori. βœ… Memiliki Tombol Edit dan Hapus untuk mengelola data kegiatan. ::: --- ## Update Kategori_kegiatan (`ubah_kategori_kegiatan.php`) ### πŸ“ Struktur Folder Buat file dengan nama `ubah_kategori_kegiatan.php` di dalam πŸ“ ==**folder ubah**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php - tambah_pegawai.php - tambah_siswa.php |- tampilan/ - halaman_utama.php - jurusan.php - kategori_kegiatan.php - siswa.php |- ubah/ - ubah_jurusan.php - ubah_kategori_kegaitan.php # File update data sub_kategori dan kegiatan dari table kategori dan table kegiatan. - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` ### Code (`ubah_kategori_kegiatan.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/35b0f6ba-827f-4767-9953-7a3d38c886c7.png) :::info πŸ”— Mengubah Sub Kategori : https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=ubah_kategori_kegiatan&Id_Kegiatan=24 πŸ”— Mengubah Jenis Kegiatan & Point : https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=ubah_kategori_kegiatan&Id_Kategori=KTG03 ::: --- # Generate Sertifikat & Laporan :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=sertifikat ::: ## PhpMyAdmin (struktur tabel sertifikat) ![](https://doc.nas-kusuma-my.cloud/uploads/d18d9116-2c7e-4552-853e-99054120e55d.png) ## PhpMyAdmin (Isi data tabel sertifikat) | Id_Sertifikat | Tanggal_Upload | Catatan | Sertifikat | Status | Tanggal_Status_Berubah | NIS | Id_Kegiatan | |--------------|---------------|-------------------|--------------------------------|---------------------|-----------------------|------|-------------| | 1 | 2024-12-22 | NULL | sertif1.pdf | Valid | 2025-01-11 | 7024 | 1 | | 7 | 2024-12-25 | NULL | sertif7.pdf | Valid | 2025-01-14 | 7027 | 1 | | 11 | 2024-12-24 | salah file | sertif1.pdf | Tidak Valid | 2025-02-27 | 7029 | 1 | | 21 | 2025-03-01 | NULL | 7024y3h85.pdf | Menunggu Validasi | NULL | 7024 | 1 | | 22 | 2025-03-01 | NULL | 7024c9y1k.pdf | Menunggu Validasi | NULL | 7024 | 1 | | 2 | 2024-12-22 | NULL | sertif2.pdf | Valid | 2025-01-11 | 7024 | 2 | | 4 | 2024-12-23 | NULL | sertif4.pdf | Valid | 2025-01-12 | 7025 | 2 | | 5 | 2024-12-24 | NULL | sertif5.pdf | Valid | 2025-01-13 | 7025 | 2 | | 9 | 2024-12-25 | salah file, silahkan upload ualng | sertif9.pdf | Tidak Valid | 2025-02-28 | 7027 | 2 | | 10 | 2024-12-26 | NULL | sertif10.pdf | Valid | 2025-02-27 | 7028 | 2 | | 12 | 2024-12-25 | NULL | sertif2.pdf | Menunggu Validasi | 2025-02-24 | 7029 | 2 | | 20 | 2025-03-01 | NULL | sertif3.pdf | Menunggu Validasi | NULL | 7024 | 2 | | 3 | 2024-12-22 | NULL | sertif3.pdf | Valid | 2025-01-11 | 7024 | 3 | | 6 | 2024-12-24 | NULL | sertif6.pdf | Valid | 2025-01-13 | 7026 | 3 | | 8 | 2024-12-25 | NULL | sertif8.pdf | Valid | 2025-01-14 | 7027 | 3 | | 13 | 2024-12-27 | NULL | sertif3.pdf | Valid | 2025-01-16 | 7029 | 4 | | 19 | 2025-02-28 | salah file | sertif10.pdf | Menunggu Validasi | 2025-02-28 | 7024 | 5 | | 14 | 2024-12-28 | NULL | sertif4.pdf | Valid | 2025-01-17 | 7030 | 5 | | 15 | 2024-12-29 | Perbaiki dokumen | sertif5.pdf | Tidak Valid | 2025-01-18 | 7031 | 6 | | 16 | 2024-12-30 | NULL | sertif6.pdf | Valid | 2025-01-19 | 7032 | 7 | | 17 | 2024-12-31 | NULL | sertif7.pdf | Valid | 2025-01-20 | 7033 | 8 | ## Read Sertifikat (`Sertifikat.php`) ### πŸ“ Struktur Folder Buat file dengan nama `upload_sertifikat.php` di dalam πŸ“ ==**folder tambah**== Buat file dengan nama `cek_sertifikat_siswa.php` di dalam πŸ“ ==**folder tampilan**== Buat file dengan nama `sertifikat_siswa.php` di dalam πŸ“ ==**folder tampilan**== Buat file dengan nama `sertifikat_siswa.php` di dalam πŸ“ ==**folder tampilan**== Buat file dengan nama `sertifikat.php` di dalam πŸ“ ==**folder tampilan**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php - tambah_pegawai.php - tambah_siswa.php - upload_sertifikat.php # File upload sertifikat ==> login sebagai level_user siswa. |- tampilan/ - cek_sertifikat_siswa.php # File cek sertifikat apakah valid atau tidak valid ==> login sebagai level_user siswa. - cek_sertifikat.php # File cek sertifikat sekaligus mengubah status sertifikat menjadi valid atau tidak valid ==> login sebagai level_user operator. - halaman_utama.php - jurusan.php - kategori_kegiatan.php - sertifikat_siswa.php # File menampilkan list sertifikat berdasarkan status sertifikat dan nis siswa ==> login sebagai level_user siswa. - sertifikat.php # File menampilkan list sertifikat berdasarkan status sertifikat dan jenis kegiatan ==> login sebagai level_user operator. - siswa.php |- ubah/ - ubah_jurusan.php - ubah_kategori_kegaitan.php - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` modifikasi file `halaman_utama.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/52521a2d-802a-497a-99e1-bbcb1dc1c5c8.png) Buat file dengan nama `sertifikat.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`sertifikat.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/45825223-c529-4d4e-8bd6-7a7fec9addc0.png) Buat file dengan nama `cek_sertifikat.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`cek_sertifikat.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/7c8a13f4-eaba-4e2e-a3a2-aaabe281a1d7.png) Buat file dengan nama `sertifikat_siswa.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`sertifikat_siswa.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/897b4ad8-ce4d-4418-bfac-f16101715f56.png) Buat file dengan nama `cek_sertifikat_siswa.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`cek_sertifikat_siswa.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/3812d4bd-8ee1-400f-ba43-61e2d9a4cefa.png) Buat file dengan nama `upload_sertifikat.php` di dalam πŸ“ ==**folder tambah**== ### Code (`upload_sertifikat.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/39e6bc38-60fc-45dd-9887-13d8018cfc5e.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=sertifikat πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=sertifikat_siswa πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=upload_sertifikat ::: ## Cetak Laporan/Generate Laporan (`laporan.php`) :::info ⬇️ link download FPDF : http://www.fpdf.org/en/dl.php?v=186&f=zip ⬇️ link download logo TI : https://drive.google.com/file/d/1HUYBBvv6R1MTsPb0mQ5S_bMfpY20jIA2/view?usp=sharing ::: setelah download lalu extract menjadi πŸ“ ==**fpdf186**== lalu rename folder tersebut menjadi πŸ“ ==**fpdf**== dan pindahkan ke dalam project dalam πŸ“ ==**folder cetak**== seperti di gambar berikut: ![](https://doc.nas-kusuma-my.cloud/uploads/9a5bfd0e-bbef-43a0-9382-d2ce8a21a31b.png) ### πŸ“ Struktur Folder Buat folder dengan nama πŸ“ `cetak` Buat folder dengan nama πŸ“ `laporan` πŸ“ di dalam folder `cetak` ``` SKKPd/ |- bootstrap/ |- cetak/ # folder menampung file cetak laporan dan cetak sertifikat |- fpdf/ # Menampung file library FPDF |- laporan/ - laporan.php # file generate laporan ==> login sebagai level_user operator. |- gambar/ - logoti.png # file logo TI untuk kop surat generate laporan |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php - tambah_pegawai.php - tambah_siswa.php - upload_sertifikat.php |- tampilan/ - cek_sertifikat_siswa.php - cek_sertifikat.php - halaman_utama.php # Modifikasi file, case baru - jurusan.php - kategori_kegiatan.php - sertifikat_siswa.php - sertifikat.php # Modifikasi file, arahkan tombol cetak laporan ke file laporan.php - siswa.php |- ubah/ - ubah_jurusan.php - ubah_kategori_kegaitan.php - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` Modifikasi file `halaman_utama.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/16c08502-5588-4f04-b85d-b6a2873cb212.png) Modifikasi file `sertifikat.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`sertifikat.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/a1a73b3d-4ff0-4b82-962e-0b10275e28e6.png) Buat file dengan nama `laporan.php` di dalam πŸ“ ==**folder laporan**== ### Code (`laporan.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/737c88ca-d806-489f-bad3-51190efaf851.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=sertifikat πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/cetak/laporan/laporan.php ::: ## Cetak Sertifikat Siswa/Generate Sertifikat (`generate_sertifikat.php`) ### πŸ“ Struktur Folder Buat folder dengan nama πŸ“ `sertifikat_skkpd` πŸ“ di dalam folder `cetak` ``` SKKPd/ |- bootstrap/ |- cetak/ |- fpdf/ # Menampung file library FPDF |- laporan/ - laporan.php |- sertifikat_skkpd/ - background-sertif.jpeg # file gambar untuk sertifikat - generate_sertifikat.php # file untuk generate sertifikat ==> login sebagai level_user siswa apabila 30 point atau lebih. |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php - tambah_pegawai.php - tambah_siswa.php - upload_sertifikat.php |- tampilan/ - cek_sertifikat_siswa.php - cek_sertifikat.php - halaman_utama.php - jurusan.php - kategori_kegiatan.php - sertifikat_siswa.php # modifikasi file, tambahkan tampilan informasi data sertifikat berdasarkan status dan tombol cetak sertifikat akan tampil apabila sudah 30 point atau lebih - sertifikat.php - siswa.php |- ubah/ - ubah_jurusan.php - ubah_kategori_kegaitan.php - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` Modifikasi file `sertifikat_siswa.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`sertifikat_siswa.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/bbc82b1d-7dfc-4b52-90e3-70241b31af35.png) :::info link download contoh background sertifikat : https://drive.google.com/file/d/19AnliGR9cv5JqCal0v6lHpxJLhn0I0v8/view?usp=sharing ::: Buat file dengan nama `generate_sertifikat.php` di dalam πŸ“ ==**folder sertifikat_skkpd**== ### Code (`generate_sertifikat.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/adc4e178-6ff5-4866-a09a-c9a4f901fa1d.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=sertifikat_siswa ::: # Halaman Utama untuk Operator dan Siswa ## Cetak Sertifikat Siswa/Generate Sertifikat (`generate_sertifikat.php`) ### πŸ“ Struktur Folder Buat folder dengan nama πŸ“ `sertifikat_skkpd` πŸ“ di dalam folder `cetak` ``` SKKPd/ |- bootstrap/ |- cetak/ |- fpdf/ |- laporan/ - laporan.php |- sertifikat_skkpd/ - background-sertif.jpeg - generate_sertifikat.php |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php - tambah_pegawai.php - tambah_siswa.php - upload_sertifikat.php |- tampilan/ - cek_sertifikat_siswa.php - cek_sertifikat.php - halaman_utama.php # modifikasi file, membagi tampilan setelah login antara operator dan siswa - jurusan.php - kategori_kegiatan.php - sertifikat_siswa.php - sertifikat.php - siswa.php |- ubah/ - ubah_jurusan.php - ubah_kategori_kegaitan.php - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` Modifikasi file `halaman_utama.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/673f6178-b091-490d-91ef-0eaa3aa87b42.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php ::: # Ganti Password Siswa ## Ubah Password (`ubah_pass_siswa.php`) ### πŸ“ Struktur Folder Buat folder dengan nama πŸ“ `sertifikat_skkpd` πŸ“ di dalam folder `cetak` ``` SKKPd/ |- bootstrap/ |- cetak/ |- fpdf/ |- laporan/ - laporan.php |- sertifikat_skkpd/ - background-sertif.jpeg - generate_sertifikat.php |- sertifikat/ |- tambah/ - tambah_jurusan.php - tambah_kategori_kegiatan.php - tambah_pegawai.php - tambah_siswa.php - upload_sertifikat.php |- tampilan/ - cek_sertifikat_siswa.php - cek_sertifikat.php - halaman_utama.php # modifikasi file, ke halaman ubah password siswa - jurusan.php - kategori_kegiatan.php - sertifikat_siswa.php - sertifikat.php - siswa.php |- ubah/ - ubah_jurusan.php - ubah_kategori_kegaitan.php - ubah_pass_siswa.php # file ubah password siswa - ubah_pegawai.php - siswa.php - koneksi.php - login.php - logout.php ``` Modifikasi file `halaman_utama.php` di dalam πŸ“ ==**folder tampilan**== ### Code (`halaman_utama.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/7a24a26e-fb9e-4d72-a5fb-bb32e9504afe.png) ### Code (`ubah_pass_siswa.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/4c2185e4-47fc-413e-9edc-ac7a73b6d1dd.png) :::info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/tampilan/halaman_utama.php?page=ubah_pass ::: # Login & Logout # πŸ“ Struktur Folder Buat file dengan nama `login.php` di dalam πŸ“ ==**folder root SKKPd/**== ``` SKKPd/ |- bootstrap/ |- sertifikat/ |- tambah/ |- tampilan/ |- ubah/ - koneksi.php - login.php # File login sebagai operator dan siswa dengan password yang sudah dienkripsi. - logout.php # File logout semua user. ``` ### PhpMyAdmin (struktur tabel pengguna) ![](https://doc.nas-kusuma-my.cloud/uploads/c18e03f3-9480-40a2-9cee-161b31f67006.png) ### PhpMyAdmin (Isi data tabel pengguna) | Id_Pengguna | Username | NIS | Password | |------------|----------|------|----------------------------------------------| | 1 | yenny | NULL | $2y$10$OK2BhpKRsHihc3HUAdeeyO.RV5I/YvPZnFSUz/... | | 2 | NULL | 7024 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 3 | NULL | 7025 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 4 | NULL | 7026 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 5 | NULL | 7027 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 6 | NULL | 7028 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 7 | NULL | 7029 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 8 | NULL | 7030 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 9 | NULL | 7031 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 10 | NULL | 7032 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 11 | NULL | 7033 | $2y$10$mTBdwX2uxzv3On78pKZCs.i5pGioLnWeDAhntA/... | | 14 | ariewira | NULL | $2y$10$URGp92DP6ZFZISd7yl5EQO3m1dlvN/LozA5lEiosV... | ## Login (`login.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/f47cef3b-35b8-4105-a5f5-ff2839b15fb0.png) ::: info https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/login.php ::: ## Video Alur Login ::: info [πŸŽ₯ Tonton Video](https://drive.google.com/file/d/17R1ESxutr02nJtbnYslRnlzFnT6yTOCT/view?usp=drive_link) ::: > [color=#B771E5] > Kode PHP ini adalah skrip autentikasi login yang memeriksa apakah pengguna adalah operator atau siswa, lalu melakukan validasi dengan password yang tersimpan dalam database. ### 1️⃣ Menghubungkan ke Database ```PHP=2 include "koneksi.php"; ``` ### 2️⃣ Mengecek Apakah Tombol Login Ditekan ```PHP=3 if(isset($_POST['tombol_login'])){ ``` > [color=#B771E5] > **isset($_POST['tombol_login'])** memastikan bahwa form login dikirim (tombol **β€œLogin”** ditekan). ### 3️⃣ Mengambil Data dari Form Input ```PHP=4 $user = $_POST['username']; $pass = $_POST['password']; ``` > [color=#B771E5] > Mengambil username/NIS dan password yang dikirim dari form login melalui metode **POST**. ### 4️⃣ Mengecek Apakah Pengguna Adalah Operator ```PHP=7 $cek_operator = mysqli_query($koneksi, "SELECT Username, Password FROM pengguna WHERE Username='$user'"); $data_operator = mysqli_fetch_assoc($cek_operator); ``` > [color=#B771E5] > Query ini mencari **operator** berdasarkan **Username** di tabel pengguna. > [color=#B771E5] > Jika ditemukan, hasilnya disimpan dalam array $data_operator. ### 5️⃣ Mengecek Apakah Pengguna Adalah Siswa ```PHP=10 $cek_siswa = mysqli_query($koneksi, "SELECT NIS, Password FROM pengguna WHERE NIS='$user'"); $data_siswa = mysqli_fetch_assoc($cek_siswa); ``` > [color=#B771E5] > Query ini mencari **siswa** berdasarkan **NIS** di tabel pengguna. > [color=#B771E5] > Jika ditemukan, hasilnya disimpan dalam array $data_siswa. ### 6️⃣ Proses Login untuk Operator ```PHP=15 if(mysqli_num_rows($cek_operator) > 0){ if(password_verify($pass, $data_operator['Password'])){ ``` > [color=#B771E5] > Jika operator ditemukan, maka sistem akan: >> 1. Memverifikasi password dengan **password_verify()**. >> 2. Jika cocok, mengambil Nama Operator dari tabel pegawai: ```PHP=18 $nama_operator = mysqli_fetch_assoc(mysqli_query($koneksi, "SELECT Nama_Lengkap FROM pegawai WHERE Username = '$user_operator'")); ``` > [color=#B771E5] >> 3. Menyimpan data dalam πŸͺ cookie selama 7 hari: ```PHP=19 setcookie('username', $data_operator['Username'], time() + (60 * 60 * 24 * 7), '/'); setcookie('nama_lengkap', $nama_operator['Nama_Lengkap'], time() + (60 * 60 * 24 * 7), '/'); setcookie('level_user', 'operator', time() + (60 * 60 * 24 * 7), '/'); ``` > [color=#B771E5] >> 4. Jika login berhasil, pengguna diarahkan ke halaman utama: ```PHP=22 echo "<script>alert('Berhasil Login');window.location.href='tampilan/halaman_utama.php?page=siswa'</script>"; ``` > [color=#B771E5] >> 5. Jika password salah, muncul **alert** dan halaman tetap di login.php. ### 7️⃣ Proses Login untuk Siswa ```PHP=27 }elseif(mysqli_num_rows($cek_siswa) > 0){ if(password_verify($pass, $data_siswa['Password'])){ ``` > [color=#B771E5] > Jika siswa ditemukan, maka sistem akan: >> 1. **Memverifikasi password** dengan **password_verify()**. >> 2. Jika cocok, mengambil Nama Siswa dari tabel siswa: ```PHP=30 $nama_siswa = mysqli_fetch_assoc(mysqli_query($koneksi, "SELECT Nama_Siswa FROM siswa WHERE NIS = '$user_siswa'")); ``` > [color=#B771E5] >> 3. Menyimpan data dalam πŸͺ **cookie** selama **7 hari**: ```PHP=31 setcookie('nis', $data_siswa['NIS'], time() + (60 * 60 * 24 * 7), '/'); setcookie('level_user', 'siswa', time() + (60 * 60 * 24 * 7), '/'); setcookie('nama_lengkap', $nama_siswa['Nama_Siswa'], time() + (60 * 60 * 24 * 7), '/'); ``` > [color=#B771E5] >> 4. Jika login berhasil, pengguna diarahkan ke halaman utama. >> 5. Jika password salah, muncul **alert** dan halaman tetap di login.php. ### 8️⃣ Jika Username Tidak Ditemukan ```PHP=36 else{ echo "<script>alert('Gagal Login, username atau password salah');window.location.href='login.php'</script>"; } ``` > [color=#B771E5] > Jika tidak ditemukan dalam kedua tabel (pengguna untuk operator dan siswa), maka muncul alert error. --- :::warning πŸ’‘ **Kesimpulan** βœ… Kode ini menangani login untuk operator dan siswa dengan sistem role-based. βœ… Menggunakan password_verify() untuk memeriksa password yang dienkripsi dengan password_hash(). βœ… Pastikan password dalam database sudah menggunakan password_hash(). ::: --- ## Logout (`logout.php`) ![](https://doc.nas-kusuma-my.cloud/uploads/fbc94f57-7707-4705-8f49-68c13d456ec8.png) ::: info πŸ”— https://web.nas-kusuma-my.cloud/SKKPd_XIIRPL2/logout.php ::: ```PHP=2 setcookie('username', '', time(), '/'); setcookie('level_user', '', time(), '/'); setcookie('nama_lengkap', '', time(), '/'); setcookie('nis', '', time(), '/'); setcookie('angkatan', '', time(), '/'); setcookie('status', '', time(), '/'); session_start(); session_destroy(); ``` > [color=red] > πŸͺ setcookie() adalah fungsi untuk mengatur cookie di browser. > [color=red] > Dengan memberikan nilai '' (kosong) dan πŸ•“ waktu kedaluwarsa = time() (saat ini), πŸͺ cookie akan langsung dihapus. > [color=red] > πŸͺ Cookie yang dihapus: >> **username** β†’ Menyimpan username/NIS dari pengguna yang login. >> **level_user** β†’ Menyimpan peran pengguna (operator atau siswa). >> **nama_lengkap** β†’ Menyimpan nama lengkap pengguna.