Suppression balises HTML via MySQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Suppression balises HTML via MySQL

par Vurtu » 12 juin 2008, 11:29

Ah mais oui
Trop cool ...

Je n'y avais juste pas pensé ...

Merci beaucoup :)

par sadeq » 12 juin 2008, 11:20

Tu peux utiliser une expression régulière (RegExp) dans ta requête SQL pour éviter les balises HTML.

Voici la doc : http://dev.mysql.com/doc/refman/5.0/en/regexp.html

Et voici un exemple écrit autres fois par sam0o7:
<?php

// ------------------------------------------------------------------------- //
// Moteur de recherche REGEX MySQL                                           //
// ------------------------------------------------------------------------- //
// Auteur: Sam0o7 <[email protected]>                                           //
// Web:    http://therysam.free.fr/                                          //
// ------------------------------------------------------------------------- //

/*
Un petit moteur que j'ai réalisé pour une recherche de noms de domaines.
Les noms de domaines sont stockés dans une table MySQL avec 3 champs : 
 - id, 
 - dns, -
 designation
Intérêt du script : Les REGEX avec MySQL
Utilisation : appeler le script en lui passant les parametres dans l'url :
    mc => mot(s) clé(s)
    l  => nombre de résultats maximum a trouver (à afficher)
    c  => 1 -> recherche 'et'
          2 -> recherche 'ou' (+ lent)
*/

If($l < 1)
{
 $limite = 5;
}
Else
{
 $limite = $l;
}

If($c == 2)
{
 $clause = "OR";
 $clausefr = "ou";
}
Else
{
 $clause = "AND";
 $clausefr = "et";
}

$mc = stripslashes(rawurldecode($mc));
// Nettoyage des caractères non-alphanumériques
$mots = eregi_replace("[^a-z0-9]", " ", $mc);

// Nettoyage des caractères spéciaux
$mots = strtr( strtolower($mots),
               "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ",
               "aaaaaaooooooeeeeciiiiuuuuyn" );

// Récupération des mots clés dans une table mot[]
$mot = split(" +",$mots);

// Recherches dans la table des .fr pour chaque mot
ForEach($mot As $m)
{
 // mots au début ou fin ou séparé par un signe -,_ ou .
 $regexp  = '(^|(.+[-|_|.]))'.$m.'(([-|_|.].+)|$)';

 // mots au début ou fin ou séparé par 2 espaces
  $regexp2 = '(^|.+ )'.$m.'( .+|$)';

 // Recherche dans le dns ET la description (mots evidents)
 $where1 .= "(dns REGEXP '$regexp' AND designation REGEXP '$regexp2') $clause ";
 // Recherche dans le dns (mots confondus)
 $where2 .= "(dns LIKE '%$m%' AND NOT (dns REGEXP '$regexp' AND designation ".
            "REGEXP '$regexp2')) $clause ";
 // Recherche dans la description (mots évidents)
 $where3 .= "(designation LIKE '%$m%' AND NOT (dns LIKE '%$m%' OR ".
            "dns REGEXP '$regexp' AND designation REGEXP '$regexp2')) $clause ";

}

// Compléments pour fermer les requètes
If($clause == "AND")
{
 $where1 .= "1=1";
 $where2 .= "1=1";
 $where3 .= "1=1";
}
Else
{
 $where1 .= "1=0";
 $where2 .= "1=0";
 $where3 .= "1=0";
}

$requete = "SELECT dns,designation
            FROM stock_dnsfr
            WHERE $where1
            LIMIT 0,$limite";
$results = mysql_query($requete,$connexion);
$nb_results = mysql_num_rows($results);
$nombreTrouves += $nb_results;
If($nb_results>0)
{
 While($row = mysql_fetch_row($results))
 {
  $dns = $row[0];
  $designation = $row[1];
  $resultat .= "<b>$dns</b><br>\n&nbsp;&nbsp;&nbsp;$designation<br><br>\n\n";
 }
}
$resultat .= "<hr>";
If($nombreTrouves < $limite)
{
 $requete = "SELECT dns,designation
             FROM stock_dnsfr
             WHERE $where2
             LIMIT 0,".($limite-$nombreTrouves);
 $results = mysql_query($requete,$connexion);
 $nb_results = mysql_num_rows($results);
 $nombreTrouves += $nb_results;
 If($nb_results>0)
 {
  While($row = mysql_fetch_row($results))
  {
   $dns = $row[0];
   $designation = $row[1];
   $resultat .= "<b>$dns</b><br>\n&nbsp;&nbsp;&nbsp;$designation<br><br>\n\n";
  }
 }
}
$resultat .= "<hr>";
If($nombreTrouves < $limite)
{
 $requete = "SELECT dns,designation
             FROM stock_dnsfr
             WHERE $where3
             LIMIT 0,".($limite-$nombreTrouves);
 $results = mysql_query($requete,$connexion);
 $nb_results = mysql_num_rows($results);
 $nombreTrouves += $nb_results;
 If($nb_results>0)
 {
  While($row = mysql_fetch_row($results))
  {
   $dns = $row[0];
   $designation = $row[1];
   $resultat .= "<b>$dns</b><br>\n&nbsp;&nbsp;&nbsp;$designation<br><br>\n\n";
  }
 }
}

// Si pas de dns trouvés
If($nombreTrouves < 1)
{ // $clausefr
 If(count($mot) > 1) {$s="s";}
 $resultat = "Pas de nom de domaine trouvé pour le$s mot$s clé$s ";
 For($index=1;$index<count($mot);$index++)
 {
  If($index < count($mot)-1)
  {
   $resultat .= "<b><i>".$mot[$index-1]."</i></b>, ";
  }
  Else
  {
   $resultat .= "<b><i>".$mot[$index-1]."</i></b> $clausefr ";
  }
 }
 $resultat .= "<b><i>".$mot[$index-1]."</i></b>.";
}

Print($resultat);
?> 

Suppression balises HTML via MySQL

par Vurtu » 12 juin 2008, 10:36

Bonjour,

Je dois effectuer un petit script de recherche.
Jusque là, rien de très compliqué :)

Je coince par contre sur un point ... les enregistrements sont stockés en HTML
Histoire de rendre la recherche cohérente, je voudrais les "supprimer", du moins les ignorer pour la recherche.

Il me faudrait donc une fonction équivalente au strip_tags en php, mais pour MySQL ...
J'ai beau avoir cherché, je n'ai pas trouvé ...

Quelqu'un pourra peut-être m'aider ?

Merci d'avance
Thomas