Aucun resultat pour ma recherche

Fredy
Invité n'ayant pas de compte PHPfrance

31 mai 2008, 16:13

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. '"';
?>


lux
Eléphant du PHP | 372 Messages

31 mai 2008, 17:27

Dans ta requète :
'%KeyWord%'
Plutot qqch comme :
'%".$KeyWord."%'
Vu que c'est la variable php que tu dois mettre dedans ... :oops:

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2008, 15:14

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juin 2008, 15:59

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Fredy
Invité n'ayant pas de compte PHPfrance

01 juin 2008, 19:09

ca me retourne la meme chose:

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

Eléphanteau du PHP | 39 Messages

01 juin 2008, 21:24

perso je ferai comme ça

Code : Tout sélectionner

$select2 = "SELECT * FROM ma_table WHERE adresse LIKE '%".$KeyWord."%' ORDER BY id DESC";
:wink:
C'est en forgeant qu'on se forge

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 juin 2008, 00:03

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Fredy
Invité n'ayant pas de compte PHPfrance

02 juin 2008, 06:08

Ca me retourne le mot a chercher, aufin ca donne un resultat null, meme si le terme que je cherche existe dans ma table.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 juin 2008, 08:06

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

03 juin 2008, 16:35

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();


?>

Fredy
Invité n'ayant pas de compte PHPfrance

04 juin 2008, 11:36

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??

Invité
Invité n'ayant pas de compte PHPfrance

07 juin 2008, 16:23

probleme regle, j ai mis mon encodage en set binary et dans ma recherche j'ai mis BINARY aussi

Eléphant du PHP | 174 Messages

07 juin 2008, 16:30

Si ton problème est réglé, tu devrais penser à tagger en résolu ^^
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)