Steve TENZA
Intervient pour votre site internet
Facebook Me contacter Cookie
Télécharger
Noter:
4.2/5 (6)
Ajouté/Modifié le 2023-11-02
Visionné 10993 fois

Validation de Formulaire en PHP

Description

Vérifier un formulaire est une étape importante du développement Web ! Afin d'assurer la sécurité des données en évitant l'injection SQL et garantir des données répondant aux normes requises, de chiffres, de texte ou d'autres caractères demandés.

Tout d'abord, avant de procéder à la vérification du contenu pour garantir sa conformité, il est impératif de s'assurer que le champ est correctement traité par PHP, comme suit :
// Dans votre code HTML : <input name="nom_du_champ">
if(isset($_POST['nom_du_champ'])){

echo "<p>Le champ <b>nom_du_champ</b> est pris en compte !</p>";

}else{

echo "<p><b>nom_du_champ</b> est inconnu !</p>";

}
On a recours à la fonction isset() de PHP pour déterminer si une variable est initialisée.

Ensuite, prenons l'exemple d'un code postal auquel nous donnerons le nom 'code_postal' pour le champ de saisie. Nous allons vérifier deux conditions :

Si c'est un nombre.
Si cela contient exactement une suite de 5 chiffres.

Pour ce faire, nous utilisons la fonction preg_match(), comme suit :
if(preg_match("#^[0-9]{5}$#", $_POST['code_postal'])){

echo "<p>Le champ code postal est correct !</p>";

}else{

echo "<p>Le champ code postal n'est pas au bon format !</p>";

}
Explications

Dans l'expression régulière, nous avons :

#^[0-9]{5}$#


L'expression régulière, en détails

- ^ : Doit commencer par [0-9]
- [0-9] : Un chiffre de 0 à 9
- {5} : 5 fois un chiffre de 0 à 9
- $ : Doit se terminer ici, par un chiffre

En résumé, cette expression régulière indique que la chaîne doit commencer par un chiffre et se terminer par un chiffre, avec exactement 5 chiffres entre le début et la fin, grâce à {5}.

Prévenir les Attaques d'Injection SQL

Une approche simple pour renforcer la sécurité contre les attaques d'injection SQL consiste à utiliser la fonction htmlentities(). Cette fonction convertit les guillemets (simples et doubles) en entités HTML, en utilisant les paramètres ENT_QUOTES et 'UTF-8'. De plus, j'utilise preg_match() conjointement avec htmlentities() pour vérifier que les données soumises via un formulaire respectent le format attendu. Vous pouvez également utiliser mysqli_real_escape_string().

Pour éviter de répéter ce code systématiquement, je l'encapsule dans une fonction. Cela me permet de sécuriser facilement un champ spécifique et les paramètres d'une URL ($_GET ou $_POST) en toute simplicité.
function htmlent($texte){
// ISO ou UTF, selon l'encodage de votre site
// En général, UTF-8 est le plus couramment utilisé.
return htmlentities($texte, ENT_QUOTES, 'UTF-8');
}

// De cette manière, vous pouvez utiliser cette fonction comme suit, garantissant un champ sécurisé pour son insertion dans la base de données :
$input = htmlent($_POST['nom_du_champ']);
mysqli_query($mysqli, "INSERT INTO table SET colonne = '$input'");


// Ou directement inclus dans la requpete SQL :
mysqli_query($mysqli,"INSERT INTO table SET colonne='" . htmlent($_POST['nom_du_champ']) . "'");


J'espère que ce script gratuit vous est utile.
Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Votre réussite en ligne commence ici

Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.

Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.

Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :

Demander un devis
Réponse rapide !

Vous recherchez un script précis ?

Dites-moi ce dont vous avez besoin, je peux développer le script demandé et vous envoyer un mail dès qu'il est dispo !

🔔 Vous pouvez laisser votre mail pour recevoir les nouveaux scripts. Pas de pub, pas de tracas. Vous êtes libre de le supprimer à tout moment.

Je prends en compte toutes les demandes. Les idées les plus populaires passent en priorité et seront publiées dès qu'elles seront prêtes. 2877 demandes reçues.

Si vous avez un projet en tête, je vous suggère de me contacter directement pour en discuter.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo2
Commenter

OCM le 20 Mai 2022 à 08:29

Très bien écrit et pratique ! il manque juste ce qui m'a amené ici et très bien répondu là :

https://forum.phpfrance.com/php-debutant/limiter-taille-champ-t266892.html#p402384

<?php
if(isset($_POST['envoyer'])) { // c'est le nom "name" du bouton input type="submit" (peut être appelé autrement)
if(empty($_POST['champ1'])) { // la vérification "empty" permet à la fois de savoir si ce champs est posté et de savoir si elle n'est pas vide
echo "le champ1 est vide";
} else {
// on peut ensuite vrifier la longeur du champ champ1 avec la fonction strlen()
if(strlen($_POST['champ1']) > ton chiffre maximum OR strlen($_POST['champ1']) < ton chiffre minimum) { // la vérification "empty" permet à la fois de savoir si ce champs est posté et de savoir si elle n'est pas vide
echo "le champ1 compte trop ou pas assez de caractère"; // je fait perso cette vérif deux fois afin d'indiquer le visiteur exactement (d'abord le strlen < ensuite le strlen >), tu peut même indiquer au visiteur combien de caractère il à en trop, etc.... question d'estéticité et de compréhension...
} else {
// tous les champs sont correctement rempli: tu peut valider ta requête:
// si tu veu être sûr de ne pas avoir de d'apostrophe (qui pourrai créer des pb une fois insérés dans ta BDD), tu peut utiliser la fonction htmlentities avec le flag ENT_QUOTES qui les convertira
// ensuite, j'utilise également beaucoup de preg_match pour vérifier le contenu d'un champ
}
}
}

Retour à la liste des scripts

Un site à créer ?
Contactez-moi