Traitement des Données de Formulaire en PHP

Header :

Une fois qu'un utilisateur soumet un formulaire HTML, les données saisies sont envoyées au serveur où elles doivent être traitées. En PHP, vous récupérez ces données à l'aide de |la superglobale `$_POST` ou `$_GET`, en fonction de la méthode d'envoi du formulaire, puis vous les traitez selon les besoins de votre application.


Body

Récupération des Données

Méthode POST

Pour récupérer les données envoyées via la méthode POST, vous pouvez accéder aux valeurs à partir de la superglobale $_POST. Cette superglobale est un tableau associatif où les clés sont les noms des champs de formulaire et les valeurs sont les données saisies par l'utilisateur.

// Récupération des données POST
$nom = $_POST['nom'];
$email = $_POST['email'];

Méthode GET

De même, pour récupérer les données envoyées via la méthode GET, vous utilisez la superglobale $_GET.

// Récupération des données GET
$nom = $_GET['nom'];
$email = $_GET['email'];

Validation des Données

Avant de traiter les données, il est crucial de les valider pour garantir qu'elles sont conformes aux attentes et qu'elles ne contiennent pas de valeurs malveillantes. Vous pouvez utiliser des fonctions de validation prédéfinies en PHP ou créer vos propres règles de validation.

// Validation des données
if (empty($nom) || empty($email)) {
    echo "Veuillez remplir tous les champs.";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "Adresse e-mail invalide.";
} else {
    // Traitement des données
    // Envoi des données à la base de données, etc.
}

Traitement des Données

Une fois que les données sont validées, vous pouvez les traiter selon les besoins de votre application. Cela peut inclure l'envoi des données à une base de données, l'envoi d'un e-mail, la génération d'un rapport, etc.

// Traitement des données
// Par exemple, envoi d'un e-mail
$destinataire = "destinataire@example.com";
$sujet = "Nouveau message de $nom";
$message = "Adresse e-mail : $email";
$headers = "From: $email";
mail($destinataire, $sujet, $message, $headers);

Feedback à l'Utilisateur

Après le traitement des données, il est important de fournir un feedback à l'utilisateur pour lui indiquer si l'opération s'est déroulée avec succès ou s'il y a eu des erreurs.

// Feedback à l'utilisateur
if (/* opération réussie */) {
    echo "Votre message a été envoyé avec succès.";
} else {
    echo "Une erreur s'est produite lors de l'envoi du message.";
}

Sécurité

La validation des données est une étape cruciale dans le processus de développement web. En plus de garantir que les données sont conformes aux attentes de l'application, il est également essentiel de sécuriser votre application contre les attaques telles que les injections SQL et les attaques XSS (cross-site scripting). En PHP, il existe plusieurs techniques pour valider et sécuriser les données.

Validation des Données

Filtrage et Nettoyage des Données

Avant d'utiliser les données fournies par les utilisateurs, il est recommandé de les filtrer et de les nettoyer pour supprimer les caractères indésirables et réduire les risques d'injections de code.

// Exemple de nettoyage d'une chaîne de caractères
$nom = htmlspecialchars($_POST['nom']);
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

Un petit coup d'oeil à la doc officielle sur la fonction filter_var ainsi que celle sur les filtres vous sera utile si vous voulez en savoir plus !

Validation des Données

En plus du nettoyage, il est important de valider les données pour s'assurer qu'elles correspondent au format attendu. PHP fournit des fonctions de validation telles que filter_var() pour valider différents types de données, comme les adresses e-mail, les URL, etc.

// Validation d'une adresse e-mail
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // Adresse e-mail valide
} else {
    // Adresse e-mail invalide
}
Filtrer une date

Il existe plein de méthode pour vérifier une date, voici un exemple qui peut vous être utile :

if(empty($_POST['dateNaissance'])){  
	echo "la date de naissance est vide !"
    $_POST['dateNaissance'] = null;  
}  
else {  
    $_POST['dateNaissance'] = DateTime::createFromFormat('d/m/Y', $_POST['dateNaissance']);  
    if($_POST['dateNaissance'] === false) {  
       echo "la date de naissance n'est pas valide."
       break;
    }  
    $bornDate = $_POST['dateNaissance']; // date valide
}

Sécurité contre les Injections

Injection SQL

Pour se prémunir contre les injections SQL, il est fortement recommandé d'utiliser des requêtes préparées avec des instructions paramétrées ou des requêtes préparées avec PDO ou MySQLi. Ces méthodes empêchent les attaquants d'injecter du code SQL malveillant dans vos requêtes.

// Exemple de requête préparée avec PDO
$requete = $pdo->prepare("SELECT * FROM utilisateurs WHERE nom = ?");
$requete->execute([$nom]);
Injection XSS (Cross-Site Scripting)

Pour éviter les attaques XSS, assurez-vous d'échapper correctement les données affichées dans vos pages HTML en utilisant des fonctions comme htmlspecialchars(). Cela convertit les caractères spéciaux en entités HTML, rendant les balises HTML inoffensives.

// Échapper les données avant de les afficher dans une page HTML
echo htmlspecialchars($nom);

Conclusion

Le traitement des données de formulaire en PHP est une étape essentielle dans le développement web. En récupérant, validant et traitant les données de manière appropriée, vous garantissez la sécurité et la fiabilité de votre application. Assurez-vous de toujours valider les données avant de les utiliser et de fournir un feedback clair à l'utilisateur.

En résumé pour la sécurité :

  • Au moment de la réception : Filtrer
  • Au moment d'accéder à la BDD : Requête préparée
  • Au moment de l'affichage : Enlever les htmlspecialchars

Avec cette triptyque, vous devriez pouvoir contrôler efficacement les données transmises par l'utilisateur. Cela dit, il y a toujours moyen d'aller plus loin, mais c'est une bonne première pratique.

Exercice

Par groupe de 2 :

  • Créez une nouvelle page sur vos site, calculator.php qui sera reprise dans votre navbar
  • Incluez les différentes parties de votre site dans cette page
  • Dedans, créez un formulaire qui appellera calculatorResult.php. Contiendra 2 input et une liste déroulante.
  • Les input accueillerons uniquement des chiffres, et la liste déroulante sera un choix d'opération (addition, multiplication, soustraction, division,...)
  • Du côté back, créez une fonction par opération mathématique dans votre calculatorResult.php, et affichez le résultat de l'opération demandée par l'utilisateur. (la page reprendre bien sûr aussi les différents includes !)
  • N'oubliez pas d'informer l'utilisateur si il n'a pas rentré des données du bon type !
  • Peaufinez le tout pour être content de votre calculatrice (visuel, fonctionnalité, sécurité,...) !
    C'est un test, profitez-en pour être imaginatif, l'exercice est volontairement simple et évasif, profitez-en pour ajouter votre patte, répartir vos tâches de manières logique et comprendre les concepts que nous venons de voir.