La validació de formularis és una part essencial del desenvolupament web, ja que garanteix que les dades introduïdes pels usuaris siguin correctes i segures abans de ser processades. En aquest tema, aprendrem com validar formularis en PHP, tant del costat del client com del servidor.
Continguts
Introducció a la Validació de Formularis
La validació de formularis és el procés de verificar que les dades introduïdes per l'usuari compleixin amb certs criteris abans de ser processades. Això inclou assegurar-se que els camps obligatoris no estiguin buits, que les adreces de correu electrònic tinguin un format vàlid, que les contrasenyes compleixin amb els requisits de seguretat, etc.
Validació del Costat del Client vs. Costat del Servidor
Validació del Costat del Client
- Avantatges:
- Resposta immediata a l'usuari.
- Redueix la càrrega del servidor.
- Desavantatges:
- Pot ser desactivada o manipulada per l'usuari.
- No és suficient per garantir la seguretat.
Validació del Costat del Servidor
- Avantatges:
- Més segura, ja que no pot ser manipulada per l'usuari.
- Necessària per a la seguretat de les dades.
- Desavantatges:
- Pot augmentar la càrrega del servidor.
- La resposta no és immediata.
Validació Bàsica en PHP
Exemple de Formulari HTML
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Nom: <input type="text" name="nom"> <br><br> Correu Electrònic: <input type="text" name="email"> <br><br> Contrasenya: <input type="password" name="contrasenya"> <br><br> <input type="submit" name="submit" value="Enviar"> </form>
Validació del Costat del Servidor en PHP
<?php // Definició de variables i inicialització amb valors buits $nom = $email = $contrasenya = ""; $nomErr = $emailErr = $contrasenyaErr = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["nom"])) { $nomErr = "El nom és obligatori"; } else { $nom = test_input($_POST["nom"]); if (!preg_match("/^[a-zA-Z-' ]*$/",$nom)) { $nomErr = "Només es permeten lletres i espais en blanc"; } } if (empty($_POST["email"])) { $emailErr = "El correu electrònic és obligatori"; } else { $email = test_input($_POST["email"]); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Format de correu electrònic invàlid"; } } if (empty($_POST["contrasenya"])) { $contrasenyaErr = "La contrasenya és obligatòria"; } else { $contrasenya = test_input($_POST["contrasenya"]); if (strlen($contrasenya) < 6) { $contrasenyaErr = "La contrasenya ha de tenir almenys 6 caràcters"; } } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
Mostrar Errors en el Formulari
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Nom: <input type="text" name="nom" value="<?php echo $nom;?>"> <span class="error">* <?php echo $nomErr;?></span> <br><br> Correu Electrònic: <input type="text" name="email" value="<?php echo $email;?>"> <span class="error">* <?php echo $emailErr;?></span> <br><br> Contrasenya: <input type="password" name="contrasenya" value="<?php echo $contrasenya;?>"> <span class="error">* <?php echo $contrasenyaErr;?></span> <br><br> <input type="submit" name="submit" value="Enviar"> </form>
Exemples Pràctics de Validació
Validació d'un Número de Telèfon
if (empty($_POST["telefon"])) { $telefonErr = "El número de telèfon és obligatori"; } else { $telefon = test_input($_POST["telefon"]); if (!preg_match("/^[0-9]{10}$/",$telefon)) { $telefonErr = "El número de telèfon ha de tenir 10 dígits"; } }
Validació d'una URL
if (empty($_POST["website"])) { $websiteErr = "El lloc web és obligatori"; } else { $website = test_input($_POST["website"]); if (!filter_var($website, FILTER_VALIDATE_URL)) { $websiteErr = "Format de lloc web invàlid"; } }
Exercicis Pràctics
Exercici 1: Validació d'un Formulari de Registre
Crea un formulari de registre que inclogui els següents camps: nom, correu electrònic, contrasenya, confirmació de contrasenya i número de telèfon. Implementa la validació del costat del servidor per assegurar-te que:
- El nom només contingui lletres i espais en blanc.
- El correu electrònic tingui un format vàlid.
- La contrasenya tingui almenys 6 caràcters.
- La confirmació de la contrasenya coincideixi amb la contrasenya.
- El número de telèfon tingui 10 dígits.
Solució de l'Exercici 1
<?php $nom = $email = $contrasenya = $confirmarContrasenya = $telefon = ""; $nomErr = $emailErr = $contrasenyaErr = $confirmarContrasenyaErr = $telefonErr = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["nom"])) { $nomErr = "El nom és obligatori"; } else { $nom = test_input($_POST["nom"]); if (!preg_match("/^[a-zA-Z-' ]*$/",$nom)) { $nomErr = "Només es permeten lletres i espais en blanc"; } } if (empty($_POST["email"])) { $emailErr = "El correu electrònic és obligatori"; } else { $email = test_input($_POST["email"]); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Format de correu electrònic invàlid"; } } if (empty($_POST["contrasenya"])) { $contrasenyaErr = "La contrasenya és obligatòria"; } else { $contrasenya = test_input($_POST["contrasenya"]); if (strlen($contrasenya) < 6) { $contrasenyaErr = "La contrasenya ha de tenir almenys 6 caràcters"; } } if (empty($_POST["confirmarContrasenya"])) { $confirmarContrasenyaErr = "La confirmació de la contrasenya és obligatòria"; } else { $confirmarContrasenya = test_input($_POST["confirmarContrasenya"]); if ($confirmarContrasenya !== $contrasenya) { $confirmarContrasenyaErr = "Les contrasenyes no coincideixen"; } } if (empty($_POST["telefon"])) { $telefonErr = "El número de telèfon és obligatori"; } else { $telefon = test_input($_POST["telefon"]); if (!preg_match("/^[0-9]{10}$/",$telefon)) { $telefonErr = "El número de telèfon ha de tenir 10 dígits"; } } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
Formulari HTML
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Nom: <input type="text" name="nom" value="<?php echo $nom;?>"> <span class="error">* <?php echo $nomErr;?></span> <br><br> Correu Electrònic: <input type="text" name="email" value="<?php echo $email;?>"> <span class="error">* <?php echo $emailErr;?></span> <br><br> Contrasenya: <input type="password" name="contrasenya" value="<?php echo $contrasenya;?>"> <span class="error">* <?php echo $contrasenyaErr;?></span> <br><br> Confirmar Contrasenya: <input type="password" name="confirmarContrasenya" value="<?php echo $confirmarContrasenya;?>"> <span class="error">* <?php echo $confirmarContrasenyaErr;?></span> <br><br> Telèfon: <input type="text" name="telefon" value="<?php echo $telefon;?>"> <span class="error">* <?php echo $telefonErr;?></span> <br><br> <input type="submit" name="submit" value="Registrar"> </form>
Conclusió
La validació de formularis és una part crucial del desenvolupament web per garantir la integritat i seguretat de les dades. Hem après a implementar validació del costat del servidor en PHP, que és essencial per protegir les nostres aplicacions de dades incorrectes o malicioses. A més, hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. En el següent tema, explorarem com gestionar pujades de fitxers en PHP.
Curs de Programació PHP
Mòdul 1: Introducció a PHP
- Què és PHP?
- Configuració de l'Entorn de Desenvolupament
- El teu Primer Script PHP
- Sintaxi i Variables de PHP
- Tipus de Dades en PHP
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Àmbit de Variables
- Funcions Anònimes i Closures
Mòdul 4: Arrays
Mòdul 5: Treballant amb Formularis
Mòdul 6: Treballant amb Fitxers
- Lectura i Escriptura de Fitxers
- Funcions de Gestió de Fitxers
- Permisos de Fitxers
- Funcions de Directori
Mòdul 7: Programació Orientada a Objectes (OOP)
- Introducció a OOP
- Classes i Objectes
- Propietats i Mètodes
- Herència
- Interfícies i Classes Abstractes
- Traits
Mòdul 8: Treballant amb Bases de Dades
- Introducció a les Bases de Dades
- Connexió a una Base de Dades MySQL
- Realització d'Operacions CRUD
- Ús de PDO per a la Interacció amb Bases de Dades
- Seguretat en Bases de Dades
Mòdul 9: Tècniques Avançades de PHP
- Gestió d'Errors i Excepcions
- Sessions i Cookies
- Expressions Regulars
- Treballant amb JSON i XML
- PHP i Serveis Web
Mòdul 10: Frameworks PHP i Millors Pràctiques
- Introducció als Frameworks PHP
- Començant amb Laravel
- Arquitectura MVC
- Millors Pràctiques en Desenvolupament PHP
- Proves i Depuració