IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Vérification saisie mots clés Mysql


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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.

  3. #3
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonjour,

    un simple str_ireplace() fait l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $commentaire = str_ireplace(array("enfoiré","idiot","naze"),"",$commentaire);
    si tu veux a tout prix informer des mots interdits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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]));

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    un str_ireplace replacera toute la chaines, y compris à l’intérieure d'un mot.

  5. #5
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 )

  7. #7
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    bon ok, finalement je m'en f... ils peuvent bien mettre ce qu'ils veulent dans leurs commentaires...

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  9. #9
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    Par défaut
    Super ska_root
    Merci.

    j'ai modifié ainsi et çela fonctionne bien, c'était effectivement plus pour prévenir l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 />';

  10. #10
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux utiliser le retour de la fonction preg_match_all
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    Par défaut
    @ Celira :
    et donc il n'y a pas moyen de trouver tous les mots y compris ceux avec les virgules ?
    Merci.

Discussions similaires

  1. Recherche des mots clés dans ma base MySQL
    Par maxdata dans le forum Langage
    Réponses: 4
    Dernier message: 17/12/2013, 00h28
  2. Réponses: 2
    Dernier message: 21/05/2010, 22h19
  3. [MySQL] [MySQL] requête sql recherche de mots clés
    Par lanysteph dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/07/2009, 18h13
  4. Recherche par mot clés - Php -Mysql
    Par pod1978 dans le forum Requêtes
    Réponses: 8
    Dernier message: 22/09/2006, 13h01
  5. Comment stocker des mots clés dans une bas Mysql
    Par renofx1 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/01/2006, 00h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo