Memperbaiki register

This commit is contained in:
aldo 2025-12-01 14:50:26 +07:00
parent 6fc5352be1
commit f3ac99887d
2 changed files with 66 additions and 58 deletions

View File

@ -2,7 +2,7 @@
ini_set('display_errors', 1);
error_reporting(E_ALL);
include 'db.php'; // Pastikan file koneksi PDO Anda benar
include 'db.php';
session_start();
@ -18,18 +18,18 @@ if (isset($_POST['login'])) {
} else {
try {
// 1. Ambil data user berdasarkan username
// Menggunakan Prepared Statement (Aman dari SQL Injection)
// Menggunakan Prepared Statement
$stmt = $conn->prepare("SELECT id, username, password FROM users WHERE username = ?");
$stmt->execute([$username_input]);
$user_data = $stmt->fetch(PDO::FETCH_ASSOC);
// 2. Verifikasi Password
// password_verify akan mencocokkan input user dengan HASH di database (seperti milik 'bejo')
// password_verify akan mencocokkan input user dengan HASH di database
if ($user_data && password_verify($pass, $user_data['password'])) {
// Login Berhasil!
// Regenerasi ID Session (Security Best Practice)
// Regenerasi ID Session
session_regenerate_id(true);
// Simpan data ke session
@ -37,7 +37,7 @@ if (isset($_POST['login'])) {
$_SESSION['username'] = $user_data['username'];
$_SESSION['login'] = true;
// Arahkan ke halaman game (sesuai gambar pertama Anda)
// Arahkan ke halaman game
header("Location: sudoku.php");
exit();
@ -51,14 +51,10 @@ if (isset($_POST['login'])) {
}
}
?>
<!DOCTYPE html>
<html lang="id">
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<style>
/* Style disamakan persis dengan register.php Anda */
body { font-family: Arial; background:#eef2f7; display:flex; height:100vh; justify-content:center; align-items:center; margin:0; }
.card { width:350px; background:white; padding:20px; border-radius:10px; box-shadow:0 6px 20px rgba(0,0,0,0.1); }
.input { width:100%; padding:10px; margin:8px 0; border:1px solid #ccc; border-radius:8px; box-sizing: border-box; }

View File

@ -2,83 +2,95 @@
ini_set('display_errors', 1);
error_reporting(E_ALL);
include 'db.php'; // Pastikan $conn ada di sini
include 'db.php';
session_start();
$err = ''; // Variabel untuk pesan error
$ok = ''; // Variabel untuk pesan sukses
// Regex password: minimal 6, huruf + angka
function password_valid($p) {
return preg_match('/^(?=.*[A-Za-z])(?=.*\d).{6,}$/', $p);
}
$err = '';
$success = '';
$username_input = '';
if (isset($_POST['register'])) {
// 1. Ambil dan bersihkan input
$user = trim($_POST['username'] ?? '');
$username_input = trim($_POST['username'] ?? '');
$pass = $_POST['password'] ?? '';
$pass2 = $_POST['password_confirm'] ?? '';
$konfirmasi_pass = $_POST['konfirmasi_password'] ?? '';
// 2. Validasi Input
if ($user === '' || $pass === '' || $pass2 === '') {
$err = "Semua field harus diisi.";
} elseif ($pass !== $pass2) {
if ($username_input === '' || $pass === '' || $konfirmasi_pass === '') {
$err = "Semua kolom wajib diisi.";
}
elseif ($pass !== $konfirmasi_pass) {
$err = "Konfirmasi password tidak cocok.";
} elseif (!password_valid($pass)) {
$err = "Password minimal 6 karakter, harus mengandung huruf & angka.";
} else {
}
elseif (strlen($pass) < 6) {
$err = "Password terlalu pendek. Minimal 6 karakter.";
}
else {
try {
// 3. Hash Password (Keamanan Kritis!)
$hash = password_hash($pass, PASSWORD_DEFAULT);
$check = $conn->prepare("SELECT id FROM users WHERE username = ?");
$check->execute([$username_input]);
// 4. Prepared Statement (Mencegah SQL Injection)
$stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$user, $hash]); // Eksekusi query dengan data
$ok = "Registrasi berhasil, silakan login.";
} catch (PDOException $e) {
// Tangani error jika username sudah ada (Unique Constraint)
if ($e->getCode() == "23000") {
$err = "Username sudah digunakan.";
if($check->rowCount() > 0){
$err = "Username sudah terdaftar, silakan pilih nama lain.";
} else {
$err = "Error: Terjadi kesalahan saat registrasi database.";
$hashed_pass = password_hash($pass, PASSWORD_DEFAULT);
$stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$username_input, $hashed_pass]);
$success = "Registrasi berhasil! Silakan <a href='login.php'>Login disini</a>.";
$username_input = '';
}
} catch (PDOException $e) {
$err = "Terjadi kesalahan sistem: " . $e->getMessage();
}
}
}
?>
<!DOCTYPE html>
<html lang="id">
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
<title>Daftar Akun Baru</title>
<style>
body { font-family: Arial; background:#eef2f7; display:flex; height:100vh; justify-content:center; align-items:center; margin:0; }
.card { width:350px; background:white; padding:20px; border-radius:10px; box-shadow:0 6px 20px rgba(0,0,0,0.1); }
.input { width:100%; padding:10px; margin:8px 0; border:1px solid #ccc; border-radius:8px; }
.btn { width:100%; padding:12px; background:#28a745; color:white; border:none; border-radius:8px; cursor:pointer; }
.err { color:#d00000; margin-bottom:10px; text-align:center; }
.ok { color:green; margin-bottom:10px; text-align:center; }
.link { text-align:center; margin-top:10px; }
.input { width:100%; padding:10px; margin:8px 0; border:1px solid #ccc; border-radius:8px; box-sizing: border-box; }
.btn { width:100%; padding:12px; background:#28a745; color:white; border:none; border-radius:8px; cursor:pointer; font-weight: bold;}
.btn:hover { background:#218838; }
.err { color:#721c24; margin-bottom:10px; text-align:center; background: #f8d7da; padding: 10px; border-radius: 5px; border: 1px solid #f5c6cb; font-size: 14px;}
.success { color:#155724; margin-bottom:10px; text-align:center; background: #d4edda; padding: 10px; border-radius: 5px; border: 1px solid #c3e6cb;}
.link { text-align:center; margin-top:10px; font-size: 14px; color: #666; }
a { text-decoration: none; color: #007bff; }
h2 { text-align: center; margin-top: 0; color: #333; }
p { text-align:center; color:gray; font-size: 14px; margin-bottom: 20px; }
</style>
</head>
<body>
<div class="card">
<h2>Register</h2>
<?php if ($err): ?>
<div class="err"><?= htmlspecialchars($err) ?></div>
<?php endif; ?>
<form method="POST" action="register.php">
<input class="input" type="text" name="username" placeholder="Masukkan Username">
<input class="input" type="password" name="password" placeholder="Masukkan Password">
<input class="input" type="password" name="password_confirm" placeholder="Konfirmasi Password">
<button class="btn" type="submit" name="register">Daftar</button>
<?php if ($success): ?>
<div class="success"><?= $success ?></div>
<?php endif; ?>
<form method="POST" action="">
<input class="input" type="text" name="username" placeholder="Username" value="<?= htmlspecialchars($username_input) ?>" required autocomplete="off">
<input class="input" type="password" name="password" placeholder="Password (Min 6 huruf)" required minlength="6">
<input class="input" type="password" name="konfirmasi_password" placeholder="Ulangi Password" required>
<button type="submit" name="register" class="btn">Daftar Sekarang</button>
</form>
<div class="link">
Sudah punya akun? <a href="login.php">Login</a>
Sudah punya akun? <a href="login.php">Login disini</a>
</div>
</div>
</body>
</html>