erdoganak
Messages postés44Date d'inscriptionmercredi 9 septembre 2009StatutMembreDernière intervention11 avril 2011
-
29 juin 2009 à 11:30
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015
-
29 juin 2009 à 15:57
Bonjour dans le cadre de mon stage d'étè je développe un outil de collaboration en xhtml/php/css couplé a une base de donné où des fichiers seront mis a disposition pour collaborer, entre les utilisateurs qui ont droit d'acceder sur la "g.e.d".
je rencontre un problème au niveau du moteur de recherche, quoi que je tape dans la barre de recherche j'obtiens article trouvé :
mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible");
// on choisit la bonne base
mysql_select_db($bdd) or die ("Connexion a la base impossible");
echo "
<html>
<head>
<title>Résultat de la recherche</title>
</head>
";
if (($Mot "")||($Mot "%")) {
// Si aucun mot clé n'a été saisi,le script demande à l'utilisateur de bien vouloir préciser un mot clé
echo "
Veuillez entrer un mot clé s'il vous plaît!
";
}
else {
// On selectionne les enregistrements contenant le mot clé
// dans les keywords ou le titre
$query = "SELECT distinct count(lien) FROM search
WHERE keyword LIKE "%$Mot%"
OR titre LIKE "%$Mot%"
";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$Nombre = $row[0];
// Si aucun enregistrement n'est retourné, on affiche un message adéquat
if ($Nombre == "0") {
echo "
Aucun résultat ne correspond à votre recherche
";
}
// Sinon, on affiche le nombre d'enregistrements correspondant et les résultats eux-mêmes
else {
$query = "SELECT distinct lien,keyword,titre FROM search
WHERE keyword LIKE "%$Mot%"
OR titre LIKE "%$Mot%" ORDER by titre ASC";
$result = mysql_query($query);
// Si un seul enregistrement est trouvé, on affiche un message au singulier
if ($Nombre == "1") {
echo "
Résultat: Un article trouvé
";
}
// Dans le cas contraire le message est au pluriel...
else {
echo "
Résultat: $Nombre articles trouvés
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 29 juin 2009 à 15:47
$Mot = $_POST['Mot'];
LIKE "%$Mot%"
Raaaaaah comme c'est pas beau... tu fais quoi si je fais une recherche à
"; DROP TABLE search; #
ta requete devenant...
SELECT distinct count(lien) FROM search WHERE keyword LIKE "%"; DROP TABLE search; #%" OR titre LIKE "%"; DROP TABLE search; #%"
je te laisse imaginer la suite... bon cet exemple ne marcherait pas car maintenant mysql_query n'accepte qu'un requête a la fois mais le principe est là et d'autre injection sont possible avec ta requête... donc déjà...
ensuite... ta requête semble bien formée... as tu essayer de la tester dans phpmyadmin... tu fais une recherche avec un mot ou avec une phrase... si c'est avec une phrase split là et construit ta requête avec chaques mots indépendamment... fais un truc dans le genre... .. .
$Mots = explode(' ', $Mots);
$first = array_shift($Mots);
$req1 = ' keywords LIKE "%'.$first.'%"';
$req2 = ' OR title LIKE "%'.$first.'%"';
if(!empty($Mots)) {
$i= -1;
while(isset($Mots[++$i])) {
$req1 .= ' OR keyword LIKE "%'.$Mots[$i].'%"';
$req2 .= ' OR title LIKE "%'.$Mots[$i].'%"';
}
}
$query = 'SELECT distinct lien, keyword, titre FROM search WHERE '.req1.req2.' ORDER by titre ASC';