Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/07/2011, 17h09   #1
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Par défaut Vérification saisie mots clés Mysql

Bonjour,
je souhaite vérifier que l'utilisateur ne saisisse pas de mots "interdits" lors de la saisie dans un formulaire sur la partie "Description" ($comment_verif), j'avais trouvé un code php sur le net mais çela ne fonctionne pas (pas de message d'erreur, pas d'autre message...)
Merci de votre aide.

Bout de code concerné :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
// vérification du commentaire
$comment_verif=$_POST['comments'];
// liste des mots a bannir dans un tableau
$tb = array("enfoiré","idiot","naze");
// initialise le compteur
$j=0;
// boucle sur la quantité des valeur du tableau $tb
while ($j<sizeof($tb))
{
// le masque avec les délimitateurs
$masque = '~\b'.$tb[$j].'\b~';
// la condition avec le test sur les mots du texte
if( preg_match_all($masque, $comment_verif, $matches))
 {	// le message d'erreur
 echo '<br />Mots non autorisés dans le commentaire : <strong>'.$matches[0][0].'</strong>';
 }
// + 1 dans le compteur, on continue de boucler sur tous les mots bannis
 $j++;
} // fin du while sur les mots
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/07/2011, 17h26   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 107
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 107
Points : 8 455
Points : 8 455
On ne fait pas la maintenance des codes que tu trouves, de plus que y'a plein sujets qui parlent de ça sur le forum.
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h41   #3
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonjour,

un simple str_ireplace() fait l'affaire :

Code :
$commentaire = str_ireplace(array("enfoiré","idiot","naze"),"",$commentaire);
si tu veux a tout prix informer des mots interdits :

Code :
1
2
3
4
5
6
7
8
$subject = "Un texte au hasard... bla enfoiré bla enfoiré bla idiot bla enfoire bla";
$interdits = array("enfoiré","idiot","naze");
$pattern = "#".implode("|",$interdits)."#i";
 
preg_match_all($pattern, $subject, $matches);
 
if(count($matches)) 
   echo "les mots suivants sont interdits : ".implode(",", array_unique($matches[0]));
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h46   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 107
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 107
Points : 8 455
Points : 8 455
un str_ireplace replacera toute la chaines, y compris à l’intérieure d'un mot.
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h54   #5
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Citation:
Envoyé par stealth35 Voir le message
un str_ireplace replacera toute la chaines, y compris à l’intérieure d'un mot.
exact, il suffit alors d'ajouter des espaces autour de chaque mot à bannir dans la matrice.

Code :
1
2
3
4
 
$subject = "Un texte au hasard... bla enfoirétoto bla enfoiré bla idiot bla enfoire bla";
$interdits = array(" enfoiré "," idiot "," naze ");
echo str_ireplace($interdits, "", $subject);
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 18h03   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 107
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 107
Points : 8 455
Points : 8 455
Citation:
Envoyé par ska_root Voir le message
exact, il suffit alors d'ajouter des espaces autour de chaque mot à bannir dans la matrice.

Code :
1
2
3
4
 
$subject = "Un texte au hasard... bla enfoirétoto bla enfoiré bla idiot bla enfoire bla";
$interdits = array(" enfoiré "," idiot "," naze ");
echo str_ireplace($interdits, "", $subject);
non plus, si y'a une virgule ou un point ça ne marchera pas, il faut passé par un regex et ajouter la limite de mot ( \b )
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 18h24   #7
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
bon ok, finalement je m'en f... ils peuvent bien mettre ce qu'ils veulent dans leurs commentaires...
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/07/2011, 18h35   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 107
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 107
Points : 8 455
Points : 8 455
Citation:
Envoyé par ska_root Voir le message
bon ok, finalement je m'en f... ils peuvent bien mettre ce qu'ils veulent dans leurs commentaires...
je plussoie
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/07/2011, 10h40   #9
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Super ska_root
Merci.

j'ai modifié ainsi et çela fonctionne bien, c'était effectivement plus pour prévenir l'utilisateur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
// vérification du commentaire
$subject = $_POST['comments'];
$interdits = array(" enfoiré "," idiot "," naze ");
$pattern = "#".implode("|",$interdits)."#i";
preg_match_all($pattern, $subject, $matches);
if(count($matches))
echo '<br />';
echo "Attention aux mots que vous avez utilisé : ".'<b>'.implode(",", array_unique($matches[0])).'</b>'.'<br />'.
"Si l'évènement est signalé".'<b>'."vous ne serez plus autorisé à saisir dans l'agenda ! ".'</b>';
echo '<br />';
echo '<br />';
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 22h31   #10
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
une dernière chose, comment fait-on si aucun mot interdit n'est saisi ?
merci.

j'ai essayé plusieurs choses mais çela ne fonctionne pas, il m'affiche toujours le message d'avertissement "Attention aux mots...." (avec aucun mot interdit bien sûr..)

Code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// vérification du commentaire
$subject = $_POST['comments'];
$interdits = array(" enfoiré "," idiot "," naze ");
$pattern = "#".implode("|",$interdits)."#i";
preg_match_all($pattern, $subject, $matches);
if(count($matches)>0) {
echo '<br />';
echo "Attention aux mots que vous avez utilisé : ".'<b>'.implode(",", array_unique($matches[0])).'</b>'.'<br />'.
"Si les termes sont blessants, humiliants... et que l'évènement est signalé".'<b>'."vous ne serez plus autorisé à saisir dans l'agenda ! ".'</b>';
echo '<br />';
echo '<br />';
}
elseif(count($matches) ==0) {
// on continue si pas de mots interdits....
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 12h04   #11
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 657
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 657
Points : 5 364
Points : 5 364
Tu peux utiliser le retour de la fonction preg_match_all
Code :
1
2
3
4
5
6
$nbMotsInterdits = preg_match_all($pattern, $subject, $matches);
if($nbMotsInterdits >0) {
 //mots interdits trouvés
}
else {
// on continue si pas de mots interdits....
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 14h31   #12
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
merci Celira
çela fonctionne presque : il ne met pas tous les mots interdits

Exemple : j'ai saisi "naze" et "enfoiré" et il en me donne que "enfoiré"...

où ça coince ?
Merci.

code modifié :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
// vérification du commentaire
$subject = $_POST['comments'];
$interdits = array(" enfoiré "," idiot "," naze ");
$pattern = "#".implode("|",$interdits)."#i";
preg_match_all($pattern, $subject, $matches);
$nbMotsInterdits = preg_match_all($pattern, $subject, $matches);
if($nbMotsInterdits >0) {
 //mots interdits trouvés
echo '<br />';
echo "Attention aux mots que vous avez utilisé : "."<div class='recherche'>".
$vue_interdit = array_unique($matches[0]);
foreach($vue_interdit as $in => $match)
		{
		echo '<br />';
		echo 'Extraction des mots : ', $match, '<br/>'."\n";
		echo '<br />';
		}
// et que l'évènement est signalé".'<br />'.'<b>'."vous ne serez plus autorisé à saisir dans l'agenda ! ".'</b>';
echo '<br />';
echo '<a href="javascript:window.history.go(-1)">'.'Retour &agrave; l\'insertion d\'agenda'.'</a>'; // retour en page précédente
echo '<br />'.'<br />';
}
else {
// on continue si pas de mots interdits....
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 15h25   #13
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 657
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 657
Points : 5 364
Points : 5 364
Ton pattern nécessite que le mot testé soit suivi et précédé d'un espace. Donc une chaine comme "c'est un naze, je l'aime pas " passera entre les mailles du filet, vu que "naze" est suivi d'une virgule et pas d'un espace.
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 09h27   #14
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
@ Celira :
et donc il n'y a pas moyen de trouver tous les mots y compris ceux avec les virgules ?
Merci.
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h15.


 
 
 
 
Partenaires

Hébergement Web