Page 1 sur 1

Aucun resultat pour ma recherche

Posté : 31 mai 2008, 16:13
par Fredy
Bonjour,

J'ai mis un petit moteur de recherche avec base de donnee, afin de pratiquer la clause: WHERE, enfin ca me retourne aucun resultat, je pense que je me suis piege quelque part:

ma table:

CREATE TABLE `ma_table` (
  `id` int(11) NOT NULL auto_increment,
  `adresse` varchar(20) collate latin1_general_ci NOT NULL,
  `url` varchar(50) collate latin1_general_ci NOT NULL,
  `email` varchar(55) collate latin1_general_ci NOT NULL,
  `description` varchar(255) collate latin1_general_ci NOT NULL,
  `mots_cles` varchar(255) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

--
-- Contenu de la table `ma_table`
--

INSERT INTO `ma_table` (`id`, `adresse`, `url`, `email`, `description`, `mots_cles`) VALUES
(1, 'okito ok on iran', 'fsafas', 'fsfsf', 'asfg', 'gtrtew');

Form.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form name="Form" method="post" action="resultat.php">
<input type="text" name="KeyWord" size="30" maxlength="100" /><br />
<input type="submit" value="Go" name="Submitted" />

</body>
</html>
resultat.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>


<?php
include ('../configure_file.php');

$KeyWord = AddSlashes (htmlspecialchars($_POST['KeyWord']));



// connection à la DB
$link = mysql_connect ($host,$user,$pass);
// forcer l UTF
mysql_query("SET CHARACTER SET 'utf8';", $link)or die('Erreur: '.mysql_error());
// selection de la DB
mysql_select_db($db) or die ('Erreur: '.mysql_error());


// on selectionne les donnees de la DB pr avoir une page par page
$select2 = "SELECT * FROM ma_table WHERE adresse LIKE '%KeyWord%' ORDER by id DESC";
$result2 = mysql_query($select2,$link) or die ('Erreur : '.mysql_error() );
$total2 = mysql_num_rows($result2);
  
// si on a récupéré un résultat on l'affiche.
if($total2) {
// on ouvre notre tableau pr afficher le coran
// on extrait les donnees
while ($row2 = mysql_fetch_array($result2)) {  
	$adresse = $row2['adresse'];

echo 'nbre ' .$total2;
echo $adresse;
}
}
else echo 'aucun resultat pour le mot "' .$KeyWord. '"';
?>


Posté : 31 mai 2008, 17:27
par lux
Dans ta requète :
'%KeyWord%'
Plutot qqch comme :
'%".$KeyWord."%'
Vu que c'est la variable php que tu dois mettre dedans ... :oops:

Posté : 01 juin 2008, 15:14
par Invité
J'ai essaye ainsi mais ca marche pas aussi:
$select2 = "SELECT * FROM ma_table WHERE adresse LIKE '%$_POST[KeyWord]%' ORDER by id DESC";

echo $select2;
qui donne comme resultat:

SELECT * FROM ma_table WHERE adresse LIKE '%%' ORDER by id DESC

Posté : 01 juin 2008, 15:59
par Ryle
Et en sortant les variables des chaines et en mettant des apostrophes/guillemets autour de l'index appelé (puisqu'il s'agit d'une chaine de caractère et non d'une constante) ?
$select2 = "SELECT * FROM ma_table 
  WHERE adresse LIKE '%".$_POST['KeyWord']."%' 
  ORDER BY id DESC"; 
Une petite bizarerie par ailleurs, ton champ adresse fait 20 caractères en base, et l'input KeyWord est lui limité à 100... :-s

Posté : 01 juin 2008, 19:09
par Fredy
ca me retourne la meme chose:

SELECT * FROM ma_table WHERE adresse LIKE '%%' ORDER by id DESC

Posté : 01 juin 2008, 21:24
par nass
perso je ferai comme ça

Code : Tout sélectionner

$select2 = "SELECT * FROM ma_table WHERE adresse LIKE '%".$KeyWord."%' ORDER BY id DESC";
:wink:

Posté : 02 juin 2008, 00:03
par Ryle
Effectivement, j'avais loupé le
$KeyWord = AddSlashes (htmlspecialchars($_POST['KeyWord'])); 
Mais si $_POST['KeyWord'] est vide, ça changera pas grand chose... le problème vient d'ailleurs...

Probablement de l'absence de balise </form> à la fin de ton formulaire dans ta page form.php

Posté : 02 juin 2008, 06:08
par Fredy
Ca me retourne le mot a chercher, aufin ca donne un resultat null, meme si le terme que je cherche existe dans ma table.

Posté : 02 juin 2008, 08:06
par Ryle
Euh... pas bien compris là... la valeur de $KeyWord est donc correcte maintenant et ta requête s'exécute bien, mais il ne te retourne pas de résultat ?

Est ce que dans ta base les valeurs du champ adresse ont été htmlspecialcharés ? parce que si tu compare une valeur où les caractères spéciaux ont été convertis en entités html, à une valeur en base pour laquelle ca n'a pas été fait, il n'y aura évidement pas de concordance. Il faut soit le faire pour les deux, soit pour aucun :)

Posté : 03 juin 2008, 16:35
par Invité
Euh... pas bien compris là... la valeur de $KeyWord est donc correcte maintenant et ta requête s'exécute bien, mais il ne te retourne pas de résultat ?

Est ce que dans ta base les valeurs du champ adresse ont été htmlspecialcharés ? parce que si tu compare une valeur où les caractères spéciaux ont été convertis en entités html, à une valeur en base pour laquelle ca n'a pas été fait, il n'y aura évidement pas de concordance. Il faut soit le faire pour les deux, soit pour aucun :)
l insertion dans la BD est sans htmlentities ou bien specialchars....

j'ai change mon post par:
$KeyWord = $_POST['KeyWord']; 
et mon code est le suivant:
<?php

$KeyWord = $_POST[KeyWord];

include ('../configure_file.php');

// connection à la DB
$link = mysql_connect ($host,$user,$pass);
// insetion des caracteres utf
mysql_query("SET CHARACTER SET 'utf8';", $link)or die('Erreur: '.mysql_error());
// selection de la DB
mysql_select_db($db) or die ('Erreur: '.mysql_error());

$select2 = "SELECT * FROM ma_table WHERE adresse LIKE '%".$KeyWord."%' ORDER by id DESC";


echo $select2. '<br>';

$result2 = mysql_query($select2,$link) or die ('Erreur : '.mysql_error() );
$total2 = mysql_num_rows($result2);
  
// si on a récupéré un résultat on l'affiche.
if($total2) {
// on ouvre notre tableau pr afficher le coran
// on extrait les donnees
while ($row2 = mysql_fetch_array($result2)) {  
	$adresse = $row2['adresse'];

echo "$adresse<br>";
}
}
else echo 'aucun resultat pour ' .$KeyWord;

//on ferme la connexion
mysql_close();


?>

Posté : 04 juin 2008, 11:36
par Fredy
Je pense que le probleme vient de l'encodage, parce que j'ai insere mes 2 lignes en arabe, et quand j'ai ajoute une ligne dans la base de donnee en francais, ca m'a donne un resultat.

Comment peut on faire notre recherche dans une base de donnee multilangues??

Posté : 07 juin 2008, 16:23
par Invité
probleme regle, j ai mis mon encodage en set binary et dans ma recherche j'ai mis BINARY aussi

Posté : 07 juin 2008, 16:30
par animithra
Si ton problème est réglé, tu devrais penser à tagger en résolu ^^