Registre d'usuaris: diferència entre les revisions

De Wiki personal d'en Guillem Serrat
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ó
Línia 5: Línia 5:
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 ===
=== Enregistrament de l'usuari ===
== Mostra de missatges d'error o èxit ==
== 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ó del 16:59, 10 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 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>