setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // create table if not exists $pdo->exec(" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) "); } catch (Exception $e) { die("DB Error: " . $e->getMessage()); } $err = ""; $ok = ""; // Regex password: minimal 6, huruf + angka function password_valid($p) { return preg_match('/^(?=.*[A-Za-z])(?=.*\d).{6,}$/', $p); } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $user = trim($_POST['username'] ?? ''); $pass = $_POST['password'] ?? ''; $pass2 = $_POST['password_confirm'] ?? ''; if ($user === '' || $pass === '' || $pass2 === '') { $err = "Semua field harus diisi."; } elseif ($pass !== $pass2) { $err = "Konfirmasi password tidak cocok."; } elseif (!password_valid($pass)) { $err = "Password minimal 6 karakter, harus mengandung huruf & angka."; } else { try { $hash = password_hash($pass, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:u, :p)"); $stmt->execute([':u' => $user, ':p' => $hash]); $ok = "Registrasi berhasil, silakan login."; } catch (PDOException $e) { if ($e->getCode() == "23000") { $err = "Username sudah digunakan."; } else { $err = "Error: " . $e->getMessage(); } } } } ?> Register

Register