File manager - Edit - /home/webapp69.cm.in.th/u69319090036/Shop/register.php
Back
<?php // register.php - User Registration Page require_once 'db_connect.php'; // Redirect if already logged in if (isLoggedIn()) { header("Location: index.php"); exit(); } $errorMsg = ""; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = trim($_POST['username'] ?? ''); $email = trim($_POST['email'] ?? ''); $password = $_POST['password'] ?? ''; $role = $_POST['role'] ?? 'buyer'; // Force-whitelist role — can only be buyer or seller, never admin if (!in_array($role, ['buyer', 'seller'])) { $role = 'buyer'; } if (empty($username) || empty($email) || empty($password)) { $errorMsg = "All fields are required."; } elseif (strlen($username) < 3 || strlen($username) > 30) { $errorMsg = "Username must be between 3 and 30 characters."; } elseif (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) { $errorMsg = "Username may only contain letters, numbers, and underscores."; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errorMsg = "Invalid email format."; } elseif (strlen($password) < 8) { $errorMsg = "Password must be at least 8 characters long."; } else { // Check if username/email already exists $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $email]); if ($stmt->fetch()) { $errorMsg = "Username or email is already registered."; } else { // Hash password and insert $hashedPassword = password_hash($password, PASSWORD_BCRYPT); $insertStmt = $pdo->prepare("INSERT INTO users (username, email, password, role) VALUES (?, ?, ?, ?)"); try { $insertStmt->execute([$username, $email, $hashedPassword, $role]); header("Location: login.php?success=" . urlencode("Registration successful! Please log in.")); exit(); } catch (PDOException $e) { $errorMsg = "Registration failed. Please try again."; } } } } renderHeader(__('register_page_title')); ?> <div class="max-w-md mx-auto my-10 bg-white p-8 sm:p-10 rounded-2xl shadow-xl border border-gray-100/80"> <div class="text-center mb-8"> <div class="w-14 h-14 bg-orange-50 border border-orange-100 text-orange-600 rounded-2xl flex items-center justify-center mx-auto mb-3"> <svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM3 20a6 6 0 0112 0v1H3v-1z"/></svg> </div> <h1 class="text-2xl font-extrabold text-gray-900 tracking-tight"><?php echo __('register_heading'); ?></h1> <p class="mt-1.5 text-xs text-gray-500"><?php echo __('register_subheading'); ?></p> </div> <?php if (!empty($errorMsg)): ?> <div class="bg-red-50 border border-red-200 text-red-800 px-4 py-3 rounded-xl mb-6 text-sm font-semibold flex items-center gap-2.5"> <svg class="w-4 h-4 text-red-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/></svg> <span><?php echo sanitize($errorMsg); ?></span> </div> <?php endif; ?> <form action="register.php" method="POST" class="space-y-4"> <div> <label for="username" class="block text-xs font-bold uppercase tracking-wider text-gray-500 mb-2"><?php echo __('register_label_user'); ?></label> <input type="text" name="username" id="username" required minlength="3" maxlength="30" autocomplete="username" placeholder="<?php echo __('register_ph_user'); ?>" value="<?php echo isset($_POST['username']) ? sanitize($_POST['username']) : ''; ?>" class="w-full px-4 py-3 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-500/20 focus:border-orange-500 focus:bg-white transition-all" > </div> <div> <label for="email" class="block text-xs font-bold uppercase tracking-wider text-gray-500 mb-2"><?php echo __('register_label_email'); ?></label> <input type="email" name="email" id="email" required autocomplete="email" placeholder="<?php echo __('register_ph_email'); ?>" value="<?php echo isset($_POST['email']) ? sanitize($_POST['email']) : ''; ?>" class="w-full px-4 py-3 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-500/20 focus:border-orange-500 focus:bg-white transition-all" > </div> <div> <label for="password" class="block text-xs font-bold uppercase tracking-wider text-gray-500 mb-2"><?php echo __('register_label_pass'); ?></label> <div class="relative"> <input type="password" name="password" id="password" required minlength="8" autocomplete="new-password" placeholder="<?php echo __('register_ph_pass'); ?>" class="w-full px-4 py-3 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-500/20 focus:border-orange-500 focus:bg-white transition-all pr-16" > <button type="button" onclick="toggleRegPw()" id="reg-pw-btn" class="absolute right-3.5 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 text-xs font-bold select-none transition-colors"><?php echo __('login_show'); ?></button> </div> <p class="text-[10px] text-gray-400 mt-1.5"><?php echo __('register_pass_hint'); ?></p> </div> <div> <label for="role" class="block text-xs font-bold uppercase tracking-wider text-gray-500 mb-2"><?php echo __('register_label_role'); ?></label> <select name="role" id="role" class="w-full px-4 py-3 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-orange-500/20 focus:border-orange-500 focus:bg-white transition-all" > <option value="buyer" <?php echo (!isset($_POST['role']) || $_POST['role'] === 'buyer') ? 'selected' : ''; ?>><?php echo __('register_role_buyer'); ?></option> <option value="seller" <?php echo (isset($_POST['role']) && $_POST['role'] === 'seller') ? 'selected' : ''; ?>><?php echo __('register_role_seller'); ?></option> </select> </div> <button type="submit" class="w-full py-3 px-4 bg-gradient-to-r from-orange-500 to-rose-500 text-white font-bold rounded-xl shadow hover:shadow-lg transition-all duration-200 hover:-translate-y-0.5 focus:outline-none text-sm" > <?php echo __('register_btn'); ?> </button> </form> <div class="mt-6 text-center text-xs text-gray-500"> <?php echo __('register_have_account'); ?> <a href="login.php" class="font-bold text-orange-500 hover:text-orange-600 ml-1"><?php echo __('register_login_link'); ?></a> </div> </div> <script> function toggleRegPw() { const input = document.getElementById('password'); const btn = document.getElementById('reg-pw-btn'); if (input.type === 'password') { input.type = 'text'; btn.textContent = '<?php echo __('login_hide'); ?>'; } else { input.type = 'password'; btn.textContent = '<?php echo __('login_show'); ?>'; } } </script> <?php renderFooter(); ?>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.26 |
proxy
|
phpinfo
|
Settings