Show sourcecode
The following files exists in this folder. Click to view.
.gitignore
admin/
config.php
createtable.php
crumbs_design_system.html
dbconnection.php
icons/
includes/
index.php
js/
login.php
logout.php
order/
register.php
style/
register.php
146 lines UTF-8 Windows (CRLF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
<?php
session_start();
$message = null;
$messageClass = 'alert-warning';
if (
isset($_POST['username']) && isset($_POST['password']) &&
!empty($_POST['username']) && !empty($_POST['password'])
) {
// Input variablar, hämta från POST
$username = trim($_POST['username']);
$fullname = trim($_POST['fullname'] ?? '');
$password = $_POST['password'];
$email = trim($_POST['email'] ?? '');
$phone = trim($_POST['phone'] ?? '');
// SÄKERHET: Validera indata på serversidan (klientsidan kan kringgås)
$errors = [];
if (strlen($password) < 4) {
$errors[] = "Lösenordet måste vara minst 4 tecken.";
}
if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Ogiltig e-postadress.";
}
if (empty($errors)) {
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
include('./dbconnection.php');
if (!$dbconn) {
die("Connection failed: Can't connect to database.");
}
try {
// Skicka in variablar till databas
$sql = "INSERT INTO users (username, fullname, password, email, phone) VALUES (?, ?, ?, ?, ?)";
$stmt = $dbconn->prepare($sql);
$data = array($username, $fullname, $passwordHash, $email, $phone);
$stmt->execute($data);
// FÖRBÄTTRING: Spara meddelande i session så det visas efter redirect till login
$_SESSION['register_success'] = "Konto skapat! Du kan nu logga in.";
header('Location: ./login.php');
die();
} catch (PDOException $e) {
// SÄKERHET: Visa inte detaljerade databasfel för användaren (avslöjar intern information)
error_log("register error: " . $e->getMessage());
$messageClass = 'alert-error';
$message = "Ett fel uppstod vid registreringen. Försök igen.";
}
$dbconn = null;
}
if (!empty($errors)) {
$messageClass = 'alert-error';
$message = implode(' ', $errors);
}
}
?>
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Registrera - Crumbs</title>
<link rel="shortcut icon" href="./icons/cookie_24dp_E3E3E3_FILL0_wght400_GRAD0_opsz24.svg" type="image/svg">
<link rel="stylesheet" href="./style/stylesheet.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
</head>
<body>
<div class="auth-wrapper">
<div class="auth-card">
<div class="auth-header">
<span class="material-symbols-rounded">person_add</span>
<h1>Registrera</h1>
<p>Skapa ett nytt konto för att börja beställa.</p>
</div>
<!-- Visa felmeddelande -->
<?php if ($message): ?>
<div class="alert <?= $messageClass ?>"><?= $message ?></div>
<?php endif; ?>
<!-- Registreringsformulär -->
<form method="post" action="">
<div class="form-group">
<label for="username">Användarnamn *</label>
<div class="input-wrapper">
<input type="text" id="username" name="username" maxlength="32" required placeholder="Välj ett användarnamn">
<span class="char-count">32</span>
</div>
</div>
<div class="form-group">
<label for="fullname">Namn</label>
<div class="input-wrapper">
<input type="text" id="fullname" name="fullname" maxlength="64" required placeholder="För- och Efternamn (Valfritt)">
<span class="char-count">64</span>
</div>
</div>
<div class="form-group">
<label for="email">E-post *</label>
<div class="input-wrapper">
<input type="email" id="email" name="email" maxlength="64" required autocomplete="email" placeholder="namn@exempel.se">
<span class="char-count">64</span>
</div>
</div>
<div class="form-group">
<label for="phone">Telefon</label>
<div class="input-wrapper">
<input type="tel" id="phone" name="phone" maxlength="20" autocomplete="tel" placeholder="+46 70 123 45 78">
<span class="char-count">20</span>
</div>
</div>
<div class="form-group">
<label for="password">Lösenord *</label>
<div class="input-wrapper">
<input type="password" id="password" name="password" maxlength="32" required autocomplete="new-password" placeholder="Minst 4 tecken">
<span class="char-count">32</span>
</div>
</div>
<p class="meta" style="margin-bottom: 12px;">* = Obligatoriskt fält</p>
<div class="actions">
<button type="submit" class="btn btn-success" style="flex:1">
<span class="material-symbols-rounded">how_to_reg</span>
Registrera
</button>
</div>
<div style="text-align:center; margin-top: 16px;">
<a href="./login.php" class="meta" style="color: var(--primary);">
Har redan ett konto? Logga in
</a>
</div>
</form>
</div>
</div>
<script src="./js/charcount.js"></script>
</body>
</html>