Steve TENZA
Web développeur
Facebook Me contacter Cookie
Télécharger
Noter:
5/5 (3)
Ajouté/Modifié le 2023-11-02
Visionné 5868 fois

Comment interdire un mot dans un formulaire en PHP ?

Description

Cette fonction a pour objectif de prévenir la validation d'un formulaire lorsque le message de l'utilisateur contient un mot interdit. Il est possible d'ajouter des mots interdits en utilisant un fichier de configuration au format .txt.

Le but de ce script PHP est de bloquer la soumission du formulaire si le message contient des termes tels que "VIAGRA" ou "Cannabis", par exemple. Ces mots sont considérés comme du spam et le formulaire ne sera pas envoyé. Ainsi, les spammeurs sont confrontés à un refus catégorique.

Nouveautés:
Octobre 2023 :
- J'ai ajouté la fonction remplacerAccents() qui permet de mettre les mots du message sans accents et aussi les mots du .txt pour que les deux soit pareil et reconnus identiques. J'ai également ajouté trim() pour supprimer les saut de lignes entre chaque mot vérifié.

Juin 2022 :
J'ai ajouté l'assertion \b pour ne pas capturer "jour" dans bonjour mais seulement le mot jour.


Fonctionnement :

1. Vous mettez les mots à refuser dans le fichier txt (1 mot par ligne).

2. Lors de la validation du formulaire, le script vérifie si le message contient un des mots que vous avez interdits.

3. Le formulaire ne sera pas soumis pas tant qu'il y aura un mot dans son texte que vous acceptez pas.



function remplacerAccents($chaine){
$a = ['à','á','â','ã','ä','å', 'æ','Ä€','ā','Ä‚','ă','Ä„','Ä…','À','Á','Â','Ã','Ä','Å', 'Æ','ç','Ç','Ð','Ć','ć','Ĉ','ĉ','ÄŠ','Ä‹','ÄŒ','č','ÄŽ','ď','Đ','Ä‘','È','É','Ê','Ë','è','é','ê','ë','Ä’','Ä“','Ä–','Ä—','Ę','Ä™','Äš','Ä›','ƒ', 'fi', 'fl','Äœ','ĝ','Äž','ÄŸ','Ä ','Ä¡','Ä¢','ǵ','Ĥ','Ä¥','Ħ','ħ','Ì','Í','Î','Ï','ì','í','î','ï','Ĩ','Ä©','Ī','Ä«','Ä®','į','İ','ı', 'IJ', 'ij','Ä´','ĵ','Ķ','Ä·','ĸ','Ĺ','ĺ','Ä»','ļ','Ľ','ľ','Ä¿','Å€','Ł','Å‚','ñ','Ñ','Ń','Å„','Å…','ņ','Ň','ň','ʼn','ÅŠ','Å‹','Ò','Ó','Ô','Õ','Ö','ð','ò','ó','ô','õ','ö','ø','Ø','ÅŒ','ō','Ő','Å‘', 'Œ', 'œ','Å”','Å•','Å–','Å—','Ř','Å™','ß','ẞ','Åš','Å›','Åœ','ŝ','Åž','ÅŸ','Š','š','Å¢','Å£','Ť','Å¥','Ŧ','ŧ','Ù','Ú','Û','Ü','Ũ','Å©','Ū','Å«','Ŭ','Å­','Å®','ů','Ű','ű','Ų','ų','ù','ú','û','ü','Å´','ŵ','×','Ý','Ŷ','Å·','Ÿ','ý','ÿ','Ź','ź','Å»','ż','Ž','ž','Ƶ'];
$b = ['a','a','a','a','a','a','ae','A','a','A','a','A','a','A','A','A','A','A','A','AE','c','C','D','C','c','C','c','C','c','C','c','D','d','D','d','E','E','E','E','e','e','e','e','E','e','E','e','E','e','E','e','f','fi','fl','G','g','G','g','G','g','G','g','H','h','H','h','I','I','I','I','i','i','i','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','k','L','l','L','l','L','l','L','l','L','l','n','N','N','n','N','n','N','n','n','N','n','O','O','O','O','O','o','o','o','o','o','o','o','O','O','o','O','o','OE','oe','R','r','R','r','R','R','s','S','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','U','U','U','U','u','U','u','U','u','U','u','U','u','U','u','u','u','u','u','W','w','x','Y','Y','y','Y','y','y','Z','z','Z','z','Z','z','Z'];
return str_replace($a, $b, $chaine);
}
function mot_interdit($message){

//on enlève tous les accents du message de la personne
//et on met en minuscule toutes les lettres
$message = strtolower(remplacerAccents($message));

//ouvre le fichier interdictions.txt ligne par ligne grâce à file()
$mots = file("interdictions.txt", FILE_SKIP_EMPTY_LINES);

//vérifi mot par mot si il est trouvé dans le message de l'utilisateur
foreach($mots as $mot){

//met aussi les mots contenu dans le txt en minuscule et sans accent
//trim() permet d'enlever le saut de ligne entre chaque mot contenu dans le txt
$mot = trim(strtolower(remplacerAccents($mot)));

//le "\b" permet de dire "ce mot", pas "contenu dans le texte", sinon le mot "jour" serait refusé si vous mettez "bonjour"
if(preg_match("#\b{$mot}\b#", $message)){

//on retourne le mot interdit pour en informer la personne qui poste afin qu'elle puisse solutionner l'erreur facilement
return $mot;

}
}
//si non trouvé, on renvoie "false"
return false;
}
//traite le formulaire envoyé
if(isset($_POST['message'])){

//si un mot interdit est trouvé dans le message
$mot_interdit = mot_interdit($_POST['message']);

if($mot_interdit !== false){

;
echo "<p>Le mot <b style='color:red'>$mot_interdit</b> est interdit, veuillez le retirer du texte.</p>";

//sinon non trouvé, on valide le formulaire
}else{

echo "OK, le formulaire ne contient pas de mots interdits";

/*continuer le traitement du formulaire ici*/

}
}
?>

<form method="post">
<textarea name="message"></textarea>
<input type="submit"/>
</form>
a Bientôt
sans accent
sansespace
Avec mAjuscule
...


J'espère que ce script gratuit vous sera utile dans vos projets.
Si vous souhaitez soutenir mon travail, un simple clic sur le bouton "Donner remercier" ci-dessous ou une note serait grandement apprécié. Merci pour votre générosité !
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. 2842 demandes reçues.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo2
Commenter

christian30 le 15 Décembre 2022 à 17:03

bonjour,
où intégrer le code dans un formulaire de contact.
merci

admin le 15 Décembre 2022 à 21:35

Voir l'exemple dans le deuxième onglet : "Exemple" ;)

Alain le 25 Septembre 2023 à 11:00

Bonjour,
je reviens vers vous. Nous avions déjà échangé au sujet de ce script. Après quelque mois, je l'ai repris. Il fonctionne, sauf le fichier interdiction.txt qui est parfois erratique. Une fois le mot interdit est détecté, une autre fois non, suivant les changements que j'engage sur ce fichier. Je voulais savoir si le codage de ce fichier texte a de l'importance (utf8 ou autre).
Et faut-il mettre le numéro et le point, comme sur votre exemple (1. mot1) ou mettre directement le mot ?
Merci de votre compréhension.
Cordialement.

admin le 27 Septembre 2023 à 11:43

Bonjour,

en fait, tout dépend si la personne met des accents ou pas, il sera pas détecté si le mot dans le fichier est sans accents et que la personne met des accents.

Passez le mot avec la fonction remplacerAccent($chaine) que vous trouverez ici (onglet "Fonctions nécessaires) pour enlever les accents puis mettez tous les mots sans accents dans le fichier.

Pierre le 24 Octobre 2023 à 10:58

Bonjour,

je m'acharne sur votre script qui ne fonctionne toujours pas chez moi. Ce sont les mots interdits qui ne sont pas détectés. Je suis un débutant en php, mais j'effectue quelques expériences.

Dès que j'ajoute un ; à if(preg_match("#\b{$mot}\b#i", $message));
le script détecte enfin un mot interdit. Mais il détecte d'une façon aléatoire sur la liste interdictions.txt. Si j'en met plusieurs, ce sera soit le premier, soit le dernier qui sera détecté. Et le mail est quand même envoyé dans tous les cas. Ce ; n'est pas présent dans votre script. Et dès que j'enlève ce ., le scritp déclare "OK, le formulaire ne contient pas de mots/termes interdits".

Je continue d'explorer afin de vérifier si je n'ai pas engagé des erreurs, mais j'avoue que j'arrive à mes limites et que je vais bientôt abandonner. Le code donné est-il celui qui a servi effectivement à vos tests ?

Cordialement.
Je vous remercie de votre attention.

admin le 24 Octobre 2023 à 15:09

Pour le plaisir de tous, j'ai revu et améliorée la fonction :)

J'ai ajouté plusieurs choses qui permettent de mieux prendre en compte tous les mots.

Pierre le 24 Octobre 2023 à 21:41

Bonjour,
ah voilà, cette fois, le fichier interdiction.txt fonctionne bien, sur tous les mots que j'y met.
Merci, je ne sais pas où était le problème.
Reste juste une chose, le mot est annoncé interdit mais le mail est envoyé quand même. Je regarde ça de plus près.
Merci beaucoup pour cette mise à jour.
Cordialement.

Pierre le 24 Octobre 2023 à 22:36

Bonjour,
c'est Ok, ça fonctionne complètement. Les mots interdits sont détectés et l'envoi du formulaire bloqué. J'avais mis ma partie d'envoi du formulaire après les deux }} de fin du script (juste après "*continuer le traitement du formulaire ici*/"
Merci beaucoup, beau travail.

admin le 24 Octobre 2023 à 22:38

Merci beaucoup, à bientôt pour de nouveaux scripts, inscrivez-vous à la newsletter pour en être informé !

Pierre le 28 Octobre 2023 à 15:41

Bonjour,

je reviens encore une (ultime fois) vers votre script. Comme je le disais l'autre jour, il fonctionne très bien avec les mots interdits. Par contre, j'ai découvert après-coup que, même sans écrire de mot interdit de la liste interdictions.txt dans le message, l'avertissement affiche "Le mot est interdit", sans préciser lequel. Et le message ne part pas, c'est à dire aucun message.
J'ai remarqué ici :
if($mot_interdit "!== false") qui est un operator qui signifie "not identical", je crois. Pourquoi est-il placé ici ?
J'ai enlevé "!== false" et n'ai plus le problème cité plus haut. Le script fonctionne parfaitement depuis trois jours.

Mystère pour moi, je ne suis pas assez calé en PHP pour comprendre.
Cordialement.

admin le 28 Octobre 2023 à 16:02

Merci, vous avez raison, j'ai ajouté le flag FILE_SKIP_EMPTY_LINES à la fonction file pour solutionner ce problème.

Retour à la liste des scripts

Un site à créer ?
Contactez-moi