Registre d'usuaris
Inicialització de la sessió i connexió a la BD
En aquest cas, no cal iniciar la sessió en aquesta pàgina, ja que no requerim recuperar ni desar cap informació
En canvi, hem de requerir el fitxer amb les funcions i una connexió a la BD. En aquest cas, per registrar un usuari, necessitem modificar la BD per afegir-lo, per tant farem servir la connexió d'escriptura.
require 'funcions.php'; require './connexioBD/connexioRW.php';
Formulari de registre d'usuari
Un usuari es registra mitjançant un formulari de registre, el qual incorpora la següent informació
- Nom d’usuari (únic en l’aplicació)
- Contrasenya
- Nom complet
- Email (únic en l’aplicació)
- Telèfon (únic en l’aplicació)
- Ciutat
- Edat
Totes les dades han de ser emplenades obligatòriament. Posteriorment, es faran verificacions bàsiques per assegurar que les dades són reals.
El nom d'usuari, el correu electrònic i el telèfon són dades úniques que no es poden repetir a l'aplicació, per tant l'usuari no pot introduir cap valor d'aquests camps que un altre usuari ja hagi registrat
La pàgina inclou un botó de navegació que dirigeix a l'usuari a que iniciï sessió en cas que ja tingui un compte a l'aplicatiu
El formulari de registre es visualitzaria de la següent forma

Procés de registre
Comprovacions bàsiques
Enregistrament de l'usuari
Mostra de missatges d'error o èxit
Codi complet
<?php
// No necessitem iniciar la sessió ja que no s'utilitza en aquest codi
require 'funcions.php';
require './connexioBD/connexioRW.php';
// Inicialitzem la variable que mostra els errors
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Recuperem les dades enviades pel formulari
$nom_usuari = trim($_POST['nom_usuari']);
$contrasenya = $_POST['contrasenya'];
$nom_complet = trim($_POST['nom_complet']);
$email = trim($_POST['email']);
$telefon = trim($_POST['telefon']);
$ciutat = trim($_POST['ciutat']);
$edat = $_POST['edat'];
// Verifiquem que cap camp estigui buit
if (empty($nom_usuari) || empty($contrasenya) || empty($nom_complet) || empty($email) || empty($telefon) || empty($ciutat) || empty($edat)){
$error = "Manca algun camp";
}
// Verifiquem que l'email sigui realment un email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = "L'email introduït no és vàlid";
}
// Verifiquem que el telèfon sigui vàlid
if (strlen($telefon) > 9) {
$error = "Telèfon no vàlid";
}
// Verifiquem que la ciutat sigui vàlida
if (strlen($ciutat) > 100) {
$error = "Ciutat no vàlida";
}
// Verifiquem que l'edat sigui vàlida
if ($edat < 0 || $edat > 120) {
$error = "Edat no vàlida";
}
// En cas que no hagi hagut cap error en les comprobacions
if ($error === ''){
try {
// Comprobar si l'usuari, email o telèfon ja existeixin
$stmt = $pdo->prepare("SELECT * FROM usuaris WHERE nom_usuari = ? OR email = ? OR telefon = ?");
$stmt->execute([$nom_usuari, $email, $telefon]);
if ($stmt->fetch()) {
$error = "El nom d'usuari, email o telèfon ja existeix.";
} else {
// Insertar usuari amb contrasenya encriptada
$hash = encriptar_contrasenya($contrasenya);
$stmt = $pdo->prepare("
INSERT INTO usuaris
(nom_usuari, contrasenya, nom_complet, email, telefon, ciutat, edat)
VALUES (?, ?, ?, ?, ?, ?, ?)
");
$stmt->execute([
$nom_usuari,
$hash,
$nom_complet,
$email,
$telefon,
$ciutat,
$edat
]);
// Registrar activitat
$usuari_id = $pdo->lastInsertId(); // Recuperem la ID de l'usuari inserit abans
registrar_activitat($pdo, $usuari_id, 'registre'); // Registrem l'acció "registre" a l'usuari creat anteriorment
// Redirigir a login
header('Location: login.php');
exit;
}
} catch (PDOException $e) {
$error = "Error en registrar l'usuari. Motiu: " . $e->getMessage();
}
}
}
?>
<!DOCTYPE html>
<html lang="ca">
<head>
<meta charset="UTF-8">
<title>Crea el teu compte</title>
<link rel="stylesheet" href="./css/registre.css">
</head>
<body>
<div class="register-container">
<header class="register-header">
<h2>Crea el teu compte</h2>
<p>Uneix-te a la nostra comunitat en pocs segons</p>
</header>
<?php if ($error): // En cas que hi hagi un error es mostrarà?>
<div class="alert alert-error"><?= htmlspecialchars($error) ?></div>
<?php endif; ?>
<form method="post" class="register-card">
<div class="form-section">
<h3>Informació de compte</h3>
<div class="input-grid">
<div class="input-group">
<label>Nom d'usuari</label>
<input type="text" name="nom_usuari" required autofocus>
</div>
<div class="input-group">
<label>Contrasenya</label>
<input type="password" name="contrasenya" required>
</div>
</div>
<hr class="divider">
<h3>Dades personals</h3>
<div class="input-group">
<label>Nom complet</label>
<input type="text" name="nom_complet" required>
</div>
<div class="input-group">
<label>Correu electrònic</label>
<input type="email" name="email" required>
</div>
<div class="input-grid">
<div class="input-group">
<label>Telèfon</label>
<input type="text" name="telefon" required>
</div>
<div class="input-group">
<label>Edat</label>
<input type="number" name="edat" min="0" max="120" required>
</div>
</div>
<div class="input-group">
<label>Ciutat</label>
<input type="text" name="ciutat" required>
</div>
</div>
<button type="submit" class="btn-register">Registrar-me ara</button>
<div class="register-footer">
Ja tens un compte? <a href="./login.php">Inicia sessió</a>
</div>
</form>
</div>
</body>
</html>