Registre d'usuaris: diferència entre les revisions
Es crea la pàgina amb «== 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.<pre> require 'funcions.php'; requ...». |
Cap resum de modificació |
||
| (Hi ha 4 revisions intermèdies que no es mostren del mateix usuari) | |||
| Línia 1: | Línia 1: | ||
== Inicialització de la sessió i connexió a la BD == | == 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 aquest cas, no cal iniciar la sessió en aquesta pàgina, ja que no requerim recuperar-n'hi ni desar-n'hi 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 [[Connexions a la BD (A5.3)#Connexió d'escriptura|connexió d'escriptura]].<pre> | 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 [[Connexions a la BD (A5.3)#Connexió d'escriptura|connexió d'escriptura]].<pre> | ||
require 'funcions.php'; | require 'funcions.php'; | ||
require './connexioBD/connexioRW.php'; | require './connexioBD/connexioRW.php'; | ||
</pre> | |||
== 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 | |||
[[Fitxer:FormulariRegistreUsuari.png|center|miniatura|606x606px]] | |||
== Procés de registre == | |||
=== Comprovacions bàsiques === | |||
Un cop l'usuari ha emplenat i ha enviat el formulari de registre, recuperarem les dades enviades i les desarem en variables<pre> | |||
// 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']; | |||
</pre>Seguidament, amb aquestes dades, realitzarem les següents comprovacions bàsiques: | |||
* Verificació d'emplenament (que cap camp estigui buit) | |||
* Verificació de l'email (que tingui un valor correcte, amb @ i un domini) | |||
* Verificació de telèfon (que tingui 9 dígits) | |||
* Verificació de ciutat (que no tingui més de 100 caràcters) | |||
* Que l'edat sigui vàlida (major de 18 i menor de 120 anys) | |||
En cas que alguna d'aquestes condicions no es cumpleixi, la desarem a una variable nomenada $error<pre> | |||
// 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 < 18 || $edat > 120) { | |||
$error = "Edat no vàlida"; | |||
} | |||
</pre> | |||
=== Enregistrament de l'usuari === | |||
En cas que les condicions bàsiques es cumpleixin, comprovant la variable $error, començarem l'enregistrament de l'usuari<pre> | |||
// En cas que no hagi hagut cap error en les comprobacions | |||
if ($error === ''){ | |||
</pre>Primer, comprovarem que cap altre usuari ja tingui registrat un nom d'usuari, email o telèfon igual que s'ha enviat. Per això realitzem una consulta on cerquem un resultat coincident amb el valor de qualsevol dels tres camps. | |||
Si la consulta retorna algun resultat, voldrà dir que ja existeix un usuari amb el mateix valor en algun dels camps<pre> | |||
// 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."; | |||
</pre>Si no retorna res, podrem inserir les dades a la BD<pre> | |||
} 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 | |||
]); | |||
</pre>Un cop s'ha registrat l'usuari, recuperarem la ID de l'usuari inserit per, amb la funció registrar_activitat, registrar l'acció "registre" a aquest usuari acabat de crear.<pre> | |||
// 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 | |||
</pre>Per últim, en cas que el procés s'hagi realitzat de forma correcte en la seva totalitat, redirigirem a l'usuari a l'inici de sessió<pre> | |||
// Redirigir a login | |||
header('Location: login.php'); | |||
exit; | |||
</pre> | |||
== Mostra de missatges d'error o èxit == | |||
En cas que l'usuari completi el procés de registre correctament, no es mostrarà cap missatge, sinó que directament es redirigirà a la pàgina d'inici de sessió. | |||
En canvi, si hi ha qualsevol error, en la part superior del formulari s'imprimirà el valor de la variable $error, per indicar a l'usuari quin és el problema.<pre> | |||
<?php if ($error): // En cas que hi hagi un error es mostrarà?> | |||
<div class="alert alert-error"><?= htmlspecialchars($error) ?></div> | |||
<?php endif; ?> | |||
</pre>Un exemple d'error seria el següent | |||
[[Fitxer:ErrorRegistre.png|center|miniatura|545x545px]] | |||
== Codi complet == | |||
<pre> | |||
<?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> | |||
</pre> | </pre> | ||
Revisió de 02:10, 12 gen 2026
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-n'hi ni desar-n'hi 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
Un cop l'usuari ha emplenat i ha enviat el formulari de registre, recuperarem les dades enviades i les desarem en variables
// 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'];
Seguidament, amb aquestes dades, realitzarem les següents comprovacions bàsiques:
- Verificació d'emplenament (que cap camp estigui buit)
- Verificació de l'email (que tingui un valor correcte, amb @ i un domini)
- Verificació de telèfon (que tingui 9 dígits)
- Verificació de ciutat (que no tingui més de 100 caràcters)
- Que l'edat sigui vàlida (major de 18 i menor de 120 anys)
En cas que alguna d'aquestes condicions no es cumpleixi, la desarem a una variable nomenada $error
// 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 < 18 || $edat > 120) {
$error = "Edat no vàlida";
}
Enregistrament de l'usuari
En cas que les condicions bàsiques es cumpleixin, comprovant la variable $error, començarem l'enregistrament de l'usuari
// En cas que no hagi hagut cap error en les comprobacions
if ($error === ''){
Primer, comprovarem que cap altre usuari ja tingui registrat un nom d'usuari, email o telèfon igual que s'ha enviat. Per això realitzem una consulta on cerquem un resultat coincident amb el valor de qualsevol dels tres camps. Si la consulta retorna algun resultat, voldrà dir que ja existeix un usuari amb el mateix valor en algun dels camps
// 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.";
Si no retorna res, podrem inserir les dades a la BD
} 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 ]);
Un cop s'ha registrat l'usuari, recuperarem la ID de l'usuari inserit per, amb la funció registrar_activitat, registrar l'acció "registre" a aquest usuari acabat de crear.
// 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
Per últim, en cas que el procés s'hagi realitzat de forma correcte en la seva totalitat, redirigirem a l'usuari a l'inici de sessió
// Redirigir a login header('Location: login.php'); exit;
Mostra de missatges d'error o èxit
En cas que l'usuari completi el procés de registre correctament, no es mostrarà cap missatge, sinó que directament es redirigirà a la pàgina d'inici de sessió.
En canvi, si hi ha qualsevol error, en la part superior del formulari s'imprimirà el valor de la variable $error, per indicar a l'usuari quin és el problema.
<?php if ($error): // En cas que hi hagi un error es mostrarà?>
<div class="alert alert-error"><?= htmlspecialchars($error) ?></div>
<?php endif; ?>
Un exemple d'error seria el següent

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>