Ringkasan Eksekutif
Proyek ini adalah sistem sederhana CRUD (Create, Read, Update, Delete)
untuk data siswa menggunakan PHP dan MySQL di lingkungan XAMPP.
Sistem mencakup fungsi registrasi/login pengguna dan manajemen data
siswa. Kami membuat database db_xitkj3 dengan dua tabel: users (untuk
akun) dan tb_xitkj3 (untuk data siswa: id, nama, nis, jurusan). Semua
interaksi database menggunakan prepared statements (mysqli) untuk
keamanan SQL, dan password disimpan sebagai hash. Kode PHP yang
diperlukan meliputi: [Link] (koneksi DB), [Link] (pendaftaran
akun), [Link] (autentikasi), [Link] (form input siswa), [Link]
(tabel data siswa + aksi Edit/Hapus/Tambah), [Link], dan [Link].
Semua halaman kecuali register/login dilindungi dengan sesi agar hanya
pengguna terlogin yang mengakses. Berikut tabel ringkasan file dan
fungsinya:
Nama File Fungsi utama
db_xitkj3.s Skrip SQL: Buat database db_xitkj3 dan tabel users,
ql tb_xitkj3
[Link] Koneksi PHP ke MySQL (db_xitkj3) menggunakan mysqli (host
localhost, user root, password '')[1].
[Link] Form registrasi (username, email, password) + pemrosesan
p penyimpanan akun (hash password, prepared INSERT).
[Link] Form login (username, password) + pemrosesan autentikasi
(verifikasi password, SESSION).
[Link] Form input data siswa (nama, nis, jurusan) + pemrosesan
simpan ke tabel tb_xitkj3.
dashboard.p Daftar seluruh data siswa dalam tabel HTML (SELECT) dengan
hp tombol Edit, Hapus, dan Tambah Data.
[Link] Form edit untuk data siswa yang dipilih (UPDATE melalui
prepared statement).
[Link] Proses menghapus data siswa berdasarkan id (DELETE query)
[2].
Skrip SQL (db_xitkj3.sql)
Buka phpMyAdmin di XAMPP, buat database baru db_xitkj3, lalu jalankan
skrip di bawah di tab SQL. Skrip ini membuat tabel users untuk akun (id PK
auto-inc, username, email, password) dan tabel tb_xitkj3 untuk data siswa
(id PK auto-inc, nama, nis, jurusan). Password akan disimpan sebagai
VARCHAR(255) untuk hash.
-- Buat database
CREATE DATABASE IF NOT EXISTS db_xitkj3;
USE db_xitkj3;
-- Tabel untuk akun pengguna (login/registrasi)
CREATE TABLE IF NOT EXISTS users (
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_username (username),
UNIQUE KEY uq_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Tabel untuk data siswa
CREATE TABLE IF NOT EXISTS tb_xitkj3 (
id INT NOT NULL AUTO_INCREMENT,
nama VARCHAR(100) NOT NULL,
nis VARCHAR(20) NOT NULL,
jurusan VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
[Link]
File ini membuat koneksi database (mysqli) ke db_xitkj3. Gunakan host
localhost, user root, password kosong. Contoh kode (berdasarkan tutorial
GeeksforGeeks)[1]:
<?php
$servername = "localhost";
$username = "root";
$password = ""; // Asumsi password kosong default di XAMPP
$dbname = "db_xitkj3";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
?>
[Link]
Menampilkan form pendaftaran akun (username, email, password) dan
memproses penyimpanan akun baru. Password disimpan sebagai hash
(menggunakan password_hash). Contoh ringkas:
<?php
session_start();
include '[Link]';
if (isset($_POST['register'])) {
$user = trim($_POST['username']);
$email = trim($_POST['email']);
$pass = $_POST['password'];
// Hash password
$hash = password_hash($pass, PASSWORD_DEFAULT);
// Cek username/email unik (opsional)
$stmt = $conn->prepare("INSERT INTO users (username, email,
password) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $user, $email, $hash);
if ($stmt->execute()) {
echo "Registrasi berhasil. <a href='[Link]'>Login di
sini</a>.";
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
}
?>
<!DOCTYPE html>
<html>
<head><title>Register</title></head>
<body>
<h2>Form Register</h2>
<form method="post" action="">
Username: <input type="text" name="username" required><br>
Email: <input type="email" name="email" required><br>
Password: <input type="password" name="password" required><br>
<button type="submit" name="register">Register</button>
</form>
</body>
</html>
[Link]
Form login (username, password) dan verifikasi akun. Gunakan SESSION
untuk menyimpan status login. Contoh:
<?php
session_start();
include '[Link]';
if (isset($_POST['login'])) {
$user = trim($_POST['username']);
$pass = $_POST['password'];
$stmt = $conn->prepare("SELECT id, password FROM users WHERE
username=?");
$stmt->bind_param("s", $user);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->bind_result($id, $hash);
$stmt->fetch();
if (password_verify($pass, $hash)) {
// Login berhasil
$_SESSION['user_id'] = $id;
$_SESSION['username'] = $user;
header("Location: [Link]");
exit();
} else {
echo "Password salah.";
}
} else {
echo "Username tidak ditemukan.";
}
$stmt->close();
}
?>
<!DOCTYPE html>
<html>
<head><title>Login</title></head>
<body>
<h2>Form Login</h2>
<form method="post" action="">
Username: <input type="text" name="username" required><br>
Password: <input type="password" name="password" required><br>
<button type="submit" name="login">Login</button>
</form>
</body>
</html>
[Link] (Input Data Siswa)
Halaman form input data siswa (nama, NIS, jurusan). Setelah submit, data
disimpan ke tb_xitkj3. Contoh kode:
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: [Link]");
exit();
}
include '[Link]';
if (isset($_POST['input_data'])) {
$nama = trim($_POST['nama']);
$nis = trim($_POST['nis']);
$jurusan = trim($_POST['jurusan']);
$stmt = $conn->prepare("INSERT INTO tb_xitkj3 (nama, nis, jurusan)
VALUES (?, ?, ?)");
$stmt->bind_param("sss", $nama, $nis, $jurusan);
if ($stmt->execute()) {
echo "Data siswa berhasil disimpan.";
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
}
?>
<!DOCTYPE html>
<html>
<head><title>Input Data Siswa</title></head>
<body>
<h2>Form Input Data Siswa</h2>
<form method="post" action="">
Nama: <input type="text" name="nama" required><br>
NIS: <input type="text" name="nis" required><br>
Jurusan: <input type="text" name="jurusan" required><br>
<button type="submit" name="input_data">Input Data</button>
</form>
<p><a href="[Link]">Lihat Data Siswa</a></p>
</body>
</html>
[Link]
Menampilkan tabel berisi semua data siswa dengan opsi Edit, Hapus, dan
tombol Tambah Data. Hanya bisa diakses setelah login (session). Contoh:
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: [Link]");
exit();
}
include '[Link]';
$result = $conn->query("SELECT * FROM tb_xitkj3");
?>
<!DOCTYPE html>
<html>
<head><title>Dashboard</title></head>
<body>
<h2>Data Siswa</h2>
<p><a href="[Link]">Tambah Data</a> | <a
href="[Link]">Logout</a></p>
<table border="1" cellpadding="5">
<tr><th>ID</th><th>Nama</th><th>NIS</th><th>Jurusan</th><th>Aksi</
th></tr>
<?php if ($result && $result->num_rows > 0): ?>
<?php while($row = $result->fetch_assoc()): ?>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo htmlspecialchars($row['nama']); ?></td>
<td><?php echo htmlspecialchars($row['nis']); ?></td>
<td><?php echo htmlspecialchars($row['jurusan']); ?></td>
<td>
<a href="[Link]?id=<?php echo $row['id']; ?>">Edit</a> |
<a href="[Link]?id=<?php echo $row['id']; ?>"
onclick="return confirm('Yakin hapus data?')">Hapus</a>
</td>
</tr>
<?php endwhile; ?>
<?php else: ?>
<tr><td colspan="5">Tidak ada data.</td></tr>
<?php endif; ?>
</table>
</body>
</html>
[Link]
Form edit data siswa terpilih. Ambil id dari $_GET, tampilkan form terisi saat
ini lalu proses update. Contoh:
<?php
session_start();
if (!isset($_SESSION['user_id'])) { header("Location: [Link]");
exit(); }
include '[Link]';
if (isset($_GET['id'])) {
$id = $_GET['id'];
$stmt = $conn->prepare("SELECT nama, nis, jurusan FROM tb_xitkj3
WHERE id=?");
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($nama, $nis, $jurusan);
$stmt->fetch();
$stmt->close();
} else {
header("Location: [Link]");
exit();
}
if (isset($_POST['update'])) {
$nama = trim($_POST['nama']);
$nis = trim($_POST['nis']);
$jurusan = trim($_POST['jurusan']);
$stmt = $conn->prepare("UPDATE tb_xitkj3 SET nama=?, nis=?,
jurusan=? WHERE id=?");
$stmt->bind_param("sssi", $nama, $nis, $jurusan, $id);
if ($stmt->execute()) {
header("Location: [Link]");
exit();
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
}
?>
<!DOCTYPE html>
<html>
<head><title>Edit Data Siswa</title></head>
<body>
<h2>Edit Data Siswa</h2>
<form method="post" action="">
Nama: <input type="text" name="nama" value="<?php echo
htmlspecialchars($nama); ?>" required><br>
NIS: <input type="text" name="nis" value="<?php echo
htmlspecialchars($nis); ?>" required><br>
Jurusan: <input type="text" name="jurusan" value="<?php echo
htmlspecialchars($jurusan); ?>" required><br>
<button type="submit" name="update">Update</button>
</form>
<p><a href="[Link]">Kembali ke Dashboard</a></p>
</body>
</html>
[Link]
Script untuk menghapus data siswa berdasarkan id (dioper via $_GET).
Contoh:
<?php
session_start();
if (!isset($_SESSION['user_id'])) { header("Location: [Link]");
exit(); }
include '[Link]';
if (isset($_GET['id'])) {
$id = $_GET['id'];
$stmt = $conn->prepare("DELETE FROM tb_xitkj3 WHERE id=?");
$stmt->bind_param("i", $id);
if ($stmt->execute()) {
$stmt->close();
header("Location: [Link]");
exit();
} else {
echo "Error: " . $stmt->error;
}
}
?>
Petunjuk Penggunaan
1. Impor SQL: Jalankan file db_xitkj3.sql di phpMyAdmin untuk
membuat database dan tabel.
2. Letak File: Simpan semua file PHP di folder proyek Anda (misal
htdocs/xitkj3/). File [Link], [Link], [Link], [Link],
[Link], [Link], [Link].
3. Mulai XAMPP: Aktifkan Apache & MySQL di Control Panel XAMPP.
4. Akses Website: Buka di browser:
5. [Link] untuk registrasi akun baru.
6. Setelah register, login di [Link]
7. Setelah login, akses [Link] untuk melihat dan mengelola data
siswa.
8. Login/Logout: [Link] juga perlu dibuat untuk sesi. (Kode logout
sederhana: session_destroy() dan redirect ke login.)
Catatan: Semua query menggunakan prepared statements seperti
dicontohkan oleh manual PHP[3] untuk keamanan. Kode di atas merupakan
adaptasi umum (original) berdasarkan praktik PHP-MySQL standar.
Referensi: Kode dan metode diilhami oleh dokumentasi resmi PHP/MySQL
dan tutorial terkait[1][3][2].