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

Mòdul 2: Estructures de Control

Mòdul 3: Funcions

Mòdul 4: Arrays

Mòdul 5: Treballant amb Formularis

Mòdul 6: Treballant amb Fitxers

Mòdul 7: Programació Orientada a Objectes (OOP)

Mòdul 8: Treballant amb Bases de Dades

Mòdul 9: Tècniques Avançades de PHP

Mòdul 10: Frameworks PHP i Millors Pràctiques

Mòdul 11: Projecte: Construint una Aplicació Web

© Copyright 2024. Tots els drets reservats