Bonjour à tous,

je suis entrain de coder un petit moteur de recherche pour mon site et je me heurte à quelques difficultés notamment avec la fonction str_replace.

Exemple :

si je tape 'bonjour<' ou 'bon<jour', il ne comprend pas.

Pourtant, j'ai bien spécifié:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$mot = str_replace("<", "", $mot);
De même, si je tape un mot avec apostrophe, par exemple 'n'importe quoi', il me renvoi un message d'erreur:

Une erreur est survenue avec la base de données:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'importe%' OR pays LIKE '%n'importe%' OR ville LIKE '%n'importe%'OR titre LIKE '%' at line 1

Sur ce second point, c'est surtout niveau sécurité que cela m'inquiète.
Pourtant, idem j'ai bien spécifié dans mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$mot = str_replace("\'", "'", $mot);
J'ai essayé la fonction addslashes mais toujours la même erreur...


Merci d'avance pour votre aide.

Voici mon fichier traitement.php:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 
/*TRAITEMENT DES DONNEES RECUPEREES*/ 
 
/*Nettoyage de la requete de l'utilisateur*/
$mot = strtolower(trim($mot));
$mot = str_replace(array(",", "-", ".", ":", ";", "'"), " ", $mot);
$mot = str_replace(" ", " ", $mot);
 
$mot = str_replace("<", "", $mot);
$mot = str_replace(">", "", $mot);
$mot = str_replace("\'", "'", $mot);
$mot = str_replace("_", " ", $mot);
$mot = str_replace("&", "et", $mot);
$mot = str_replace("+", " ", $mot);
$mot = str_replace("?", "", $mot);
 
$mot = str_replace("é", "e", $mot);
$mot = str_replace("è", "e", $mot);
$mot = str_replace("ë", "e", $mot);
$mot = str_replace("ê", "e", $mot);
$mot = str_replace("à", "a", $mot);
//etc, etc...je les met pas toutes, ça serait trop long
 
/*Extraction des mots clefs*/
$mots = explode( " ", $_POST['mot'] );
 
/*Requête*/
 
$query = "";
 
{
   foreach( $mots as $Mot )
   {
      //Ajout de la whereclause
      $query .= ( (empty($query)) ? '' : ' AND' )." (theme LIKE '%{$Mot}%' OR pays LIKE '%{$Mot}%' OR ville LIKE '%{$Mot}%'OR titre LIKE '%{$Mot}%' OR contenu LIKE '%{$Mot}%'OR motscles LIKE '%{$Mot}%' )";
   }
   $query = "SELECT * FROM culture WHERE $query ORDER BY date ASC";
   $reponse = mysql_query( $query ) or exit( "Une erreur est survenue avec la base de données:<br />\n".mysql_error() );
}
 
 
?>