Facebook
Télécharger
Noter:

Ajouté le 2021-12-03
Visionné 6037 fois
5/5 (2)

Vérifier un formulaire en PHP

Description

La vérification d'un formulaire est importante, elle permet d'éviter les injections SQL si vous rentrez les données dans une table ou à vérifier si ils correspondent à vos critères (Que ce soit bien un nombre, du texte ou tout autre format grâce à preg_match() notamment, ce que j'utilise le plus).

Tout d'abord, avant de vérifier si le contenu est bien ce que vous voulez, il faut vérifier si le champs est bien prix en compte par PHP, comme ceci:
if(isset($_POST['name_de_linput_html'])) {//dans l'HTML: <input name="name_de_linput_html"...>
echo "Le champ est pris en compte!";
} else {
echo "name_de_linput_html est inconnu!";
}

On utilise isset() de PHP pour savoir si une variable est définie.

Ensuite, prenons l'exemple d'un code postal, nous allons l'appeler code_postal pour le nom de l'input et on va donc vérifier si:

- C'est un nombre
- Et si c'est il contient une suite de 5 chiffres

Pour ce faire, on utilise preg_match(), comme ceci:
if(preg_match("#^[0-9]{5}$#",$_POST['code_postal'])) {
echo "Le champ code postal est correct!";
} else {
echo "Le champ code postal n'est pas au bon format!";
}


Explications:
Dans l'expression régulière, nous avons:
#^[0-9]{5}$#

Ce qui veut dire:
- ^: doit commencer par
- [0-9]: un chiffre de 0 à 9
- {5}: 5 fois un chiffre
- $: doit se terminer par
Résumé:
Doit commencer par 1 chiffre et doit se terminer par un chiffre, nous aurons donc 5 chiffres grâce à {5}.

Éviter les injections SQL


J'utilise simplement la fonction htmlentities() qui converti les guillemets (simples et doubles)en entités HTML, avec les paramètres ENT_QUOTES et "UTF-8". J'utilise aussi preg_match() couplé à htmlentities() pour vérifier le bon format des saisies du formulaire. Utilisez mysqli_real_escape_string() si vous voulez être sûr des données que vous insérez dans la base de données.

Pour ne pas avoir à réécrire le code à chaque fois, je le passe dans une fonction afin de sécuriser le champ voulu et le paramètre d'une URL ($_GET ou $_POST):
function htmlent($texte){
//ISO ou UTF suivant ce que vous utilisez comme encodage sur votre site
return htmlentities($texte,ENT_QUOTES,"UTF-8");
}


//on pourra ainsi l'utiliser comme suit et retourner un champ sécurisé pour l'insérer dans la base de données:
$input=htmlent($_POST['name_input']);
mysqli_query($mysqli,"INSERT INTO table SET colonne='$input'");


//ou directement
mysqli_query($mysqli,"INSERT INTO table SET colonne='".htmlent($_POST['name_input'])."'");



Besoin de travaux pour votre site ?

Je suis disponible, contactez-moi !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha

Captcha temporairement HS, tapez 2 svp
memo1
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