Formulari d'alta d'usuari: diferència entre les revisions
Cap resum de modificació |
Cap resum de modificació |
||
| Línia 96: | Línia 96: | ||
</pre> | </pre> | ||
Amb la següent taula es pot comprovar quines comprovacions es fan en cada camp i amb quines funcions | |||
{| class="wikitable" | |||
|Camp | |||
|Comprovacions | |||
|Funcions utilitzades | |||
|- | |||
|Tipus de document | |||
| | |||
* És buit | |||
| | |||
* Funció campBuit | |||
|- | |||
|Número de document | |||
| | |||
* És buit | |||
* Número de document vàlids segons el tipus | |||
| | |||
* Funció campBuit | |||
* Funció validarDNI, validarNIE, validarPassaport, segons el tipus de document | |||
|- | |||
|Nom | |||
| | |||
* És buit | |||
| | |||
* Funció campBuit | |||
|- | |||
|Cognoms | |||
| | |||
* És buit | |||
| | |||
* Funció campBuit | |||
|- | |||
|Sexe | |||
| | |||
* És buit | |||
| | |||
* Funció campBuit | |||
|- | |||
|Data de naixement | |||
| | |||
* És buit | |||
* Major d’edat | |||
| | |||
* Funció campBuit | |||
* Funció esMajorEdat | |||
|- | |||
|Correu electrònic i verificació | |||
| | |||
* És buit | |||
* Els dos camps són iguals | |||
| | |||
* Funció campBuit | |||
* Comparació (==) | |||
|- | |||
|Telèfon | |||
| | |||
* És buit | |||
* Telèfon vàlid | |||
| | |||
* Funció campBuit | |||
* Funció validarTelefon | |||
|- | |||
|Població | |||
| | |||
* És buit | |||
| | |||
* Funció campBuit | |||
|- | |||
|Codi Postal | |||
| | |||
* És buit | |||
* Codi postal vàlid | |||
| | |||
* Funció campBuit | |||
* Funció codiPostalValid | |||
|- | |||
|Adreça | |||
| | |||
* És buit | |||
| | |||
* Funció campBuit | |||
|- | |||
|Periodicitat | |||
| | |||
* És buit | |||
| | |||
* Funció campBuit | |||
|- | |||
|Acceptació condicions | |||
| | |||
* És buit | |||
| | |||
* Funció isset de PHP | |||
|- | |||
|Contrasenya i verificació | |||
| | |||
* És buit | |||
* Els dos camps són iguals | |||
| | |||
* Funció campBuit | |||
* Comparació (==) | |||
|- | |||
|Fitxer PDF | |||
| | |||
* És buit | |||
* És un fitxer PDF | |||
| | |||
* Funció isset de PHP | |||
* Comparació (==) | |||
|} | |||
Revisió del 00:00, 9 des 2025
Formulari inicial d'alta d'usuari
Dins d'aquesta web trobarem el formulari per dona d'alta usuaris. L'aspecta serà aquest:
En total hi haurà 19 camp a emplenar, a partir de la següent taula es pot veure quins són i de quin tipus
| Nom del camp | Tipus de camp |
| Tipus de Document | Desplegable de selecció |
| Número Document | Text |
| Nom | Text |
| Cognoms | Text |
| Sexe | Desplegable de selecció |
| Data de naixement | Data |
| Correu electrònic | |
| Confirmació de correu electrònic | |
| Telèfon mòbil | Telèfon |
| Població | Desplegable de selecció |
| Codi Postal | Text |
| Adreça | Text |
| Periodicitat de cobrament | Botons d’opció |
| Acceptació de condicions | Casella de selecció |
| Acceptació de comunicacions | Casella de selecció |
| Contrasenya | Contrasenya |
| Confirmació de contrasenya | Contrasenya |
| Observacions | Àrea de text |
| Fitxer | Fitxer |
Tots ells tenen en comú:
- Tots tenen un label, indicant el nom del campCompten amb un placeholder.
- En cas de la data i els desplegables de selecció, se’ls hi ha assignat el valor per defecte
- Tots tenen l’atribut required excepte l’acceptació de comunicacions i les observacions
Alguns elements en especial, tenen certes peculiaritats:
- En el text de les condicions, s’inclou l’enllaç a les condicions
El formulari serà de tipus POST i inclourà un tipus d'encoding, el qual permet pujar fitxers PDF. L'acció del formulari es un fitxer php que valida les dades segons certes condicions i les enregistra a la BBDD
<form action="../php/validacioDades.php" method="post" enctype="multipart/form-data">
A la part final del formulari comptarem amb dos botons, el primer per enviar el formulari i el segon per netejar les dades, que també dirigeix a l'usuari a l'inici del formulari
<!-- Botons --> <input type="submit" value="Enviar"> <input type="reset" value="Netejar" onclick="window.location.href='#'">
Validació de dades d’alta d’usuari i inserció de dades a la BBDD
Un cop s'envia el formulari, s'ha de passar per un procés de validació de dades segons certs criteris. Moltes de les verificacions es duen a terme amb les funcions desenvolupades prèviament, i per això les hem d'incorporar a un document (com si fos una biblioteca)
require_once "funcions.php"; // Fem un "copia i enganxa" del contingut del fitxer en el codi // Únicament ho fem una vegada, en cas d'haver-hi més require iguals, s'ignoraran.
Per comptabilitzar els possibles errors que hi hagi durant les comprovacions, crearem una array. Aquesta emmagatzemarà cadenes de text indicant els errors, que cada verificació podrà personalitzar segons l'error detectat. Així, podrem tant comprovar si hi ha hagut errors per evitar l'inserció de dades, com mostrar els errors trobats a l'usuari
$errors = []; // S'inicïa una array d'errors, on es desaran tots els errors
Amb la següent taula es pot comprovar quines comprovacions es fan en cada camp i amb quines funcions
| Camp | Comprovacions | Funcions utilitzades |
| Tipus de document |
|
|
| Número de document |
|
|
| Nom |
|
|
| Cognoms |
|
|
| Sexe |
|
|
| Data de naixement |
|
|
| Correu electrònic i verificació |
|
|
| Telèfon |
|
|
| Població |
|
|
| Codi Postal |
|
|
| Adreça |
|
|
| Periodicitat |
|
|
| Acceptació condicions |
|
|
| Contrasenya i verificació |
|
|
| Fitxer PDF |
|
|
Un cop fetes totes les verificacions, es comprovarà si l'array d'errors és buida (indicant que no hi ha hagut cap error). En cas que hi hagi hagut, recorrerem tota l'array i imprimirem les cadenes de text (que són els errors) per tal de que l'usuari pugui saber-ho
if (count($errors) > 0) { // Si la quantitat d'errors a l'array és més gran que 0
echo "<h2>No s'ha pogut processar el registre. S'han trobat errors:</h2>";
foreach ($errors as $error) { // Per cada error dins de l'array d'error
echo htmlspecialchars($error); // S'imprimeix l'error
echo '<br>';
}
// S'ha acabat
En cas d'haber-hi errors, es podria veure de la següent forma:
En cas contrari, es podrà procedir amb la inserció de dades. El primer serà connectar-se amb una connexió de lectura i escriptura.
require_once "connexioRW.php";// Fem un "copia i enganxa" de la connexió de lectura i escriptura en el codi
Seguidament, prepararem la inserció, on després assignarem les variables rebudes del formulari
$stmt = $conn->prepare("
INSERT INTO $nomTaula ( tipusDocument, numeroDocument, nom, cognoms, sexe, dataNaixement, email, telf, poblacio, codiPostal, adreca, periodicitat, rebreComunicacions, contrasenya, hash, observacions, arxiu ) VALUES ( :tipusDocument, :numeroDocument, :nom, :cognoms, :sexe, :dataNaixement, :email, :telf, :poblacio, :codiPostal, :adreca, :periodicitat, :rebreComunicacions, :contrasenya, :hash, :observacions, :arxiu )"
I assignarem cada variable amb el seu paràmetre enllaçat
// Bind dels paràmetres
$stmt->bindParam(':tipusDocument', $_POST["tipus_document"]); $stmt->bindParam(':numeroDocument', $_POST["numero_document"]); $stmt->bindParam(':nom', $_POST["nom"]); $stmt->bindParam(':cognoms', $_POST["cognoms"]); $stmt->bindParam(':sexe', $_POST["sexe"]); $stmt->bindParam(':dataNaixement', $_POST["data_naixement"]); $stmt->bindParam(':email', $_POST["email"]); $stmt->bindParam(':telf', $_POST["telefon"]); $stmt->bindParam(':poblacio', $_POST["poblacio"]); $stmt->bindParam(':codiPostal', $_POST["codi_postal"]); $stmt->bindParam(':adreca', $_POST["adreca"]); $stmt->bindParam(':periodicitat', $_POST["periodicitat"]);// Camps opcionals (checkbox) if (!isset($_POST["accepto_comunicacions"])){ // Si "accepto_comunicacions" NO està marcat $rebreComunicacions = "No"; } else { // Si "accepto_comunicacions" ESTÀ marcat $rebreComunicacions = "Si"; }$stmt->bindParam(':rebreComunicacions', $rebreComunicacions);$stmt->bindParam(':contrasenya', $_POST["contrasenya"]); // Hash de contrasenya $hashContrasenya = password_hash($_POST["contrasenya"], PASSWORD_DEFAULT); // Creem un hash a partir de la contrasenya $stmt->bindParam(':hash', $hashContrasenya);$stmt->bindParam(':observacions', $_POST["observacions"]);$fitxerContingut = file_get_contents($_FILES['fitxer']['tmp_name']); // Afafem el contingut binari del fitxer $stmt->bindParam(':arxiu', $fitxerContingut, PDO::PARAM_LOB); // Dins del camp arxiu, inserim el contingut binari, indicant que és un binari amb PARAM_LOB$stmt->execute();
A més a més, el PDF no només s'ha de desar a la BBDD, sinó també a un directori del servidor. Aquest procés està definit a l’apartat “Emmagatzematge de PDF al servidor”
Per últim, definirem el missatge d'èxit
// Definim les variables necessàries pel missatge final
$nom = $_POST["nom"];
$cognoms = $_POST["cognoms"];
$hora = date("H:i");
$data = date("d/m/Y");
echo "<p class='result-message'>Sr/a $nom $cognoms, les seves dades han estat enregistrades correctament a les $hora hores del $data</p>";
Per assegurar que la data i la hora és la correcte, indicarem a PHP quina és la nostra zona horària al principi del codi
date_default_timezone_set('Europe/Madrid'); // Definim la zona horària
En cas que hi hagi algun error, saltarà el catch, on comprovarà el codi d’error obtingut. En cas de ser 23000, voldrà dir que el número de document ja existeix a la BBDD i mostrarà un missatge informant-ho, i en cas de ser qualsevol altre, indicarà el missatge genèric de PHP. Degut a que és probable que l’error del número de document surti en diverses situacions, es crea un missatge específic per aquest error, mentre que la resta d’errors tenen una probabilitat molt baixa d’aparèixer.
catch (PDOException $e) { // En cas que hi hagi hagut algun error en inserir les dades
if ($e->getCode() == 23000) { // Si l'error és que el número de document ja existeix (Camp UNIQUE a la taula)
echo "<p class='result-message' style='color:red;'>❌ El número de document ja està registrat.</p>";
} else {
// Altres errors
echo "<p class='result-message' style='color:red;'>❌ Error en inserir les dades: " . htmlspecialchars($e->getMessage()) . "</p>";
}El resultat d’inserir un Nº de document ja existeix és el següent:
En complementació, s’afageix que en cas que s’accedeixi sense haver enviat cap dada des d’un formulari a la pàgina, es redirigeixi al formulari inicial
if ($_SERVER["REQUEST_METHOD"] == "POST") {
...
} else {
// En cas d'accedir a la pàgina sense haver enviat cap formulari
header("Location: ../formularis/altaUsuari.html"); // Es redirigeix a la pàgina altaUsuari.html
exit;