[PHP]Problème avec fonction de recherche

Problème avec fonction de recherche [PHP] - PHP - Programmation

Marsh Posté le 17-10-2002 à 15:00:34    

Un copain a fait cette fonction en PHP (que j'ai modifier)
 
cherche mot dans table topics_re dans le champs re_text
 
 

Code :
  1. function search ($keywords = "" )
  2.     {
  3. include('../include/constantes.inc.php');
  4.         if($keywords == "*" )
  5. {
  6.         $sql = "SELECT * FROM topics_re";
  7. }
  8. else
  9. {
  10.          $keywords = trim(urldecode($keywords)); //trim enlève les espaces
  11.          $keywords = ereg_replace("([    ]+)"," ",$keywords);
  12.          if(!ereg(" ",$keywords))
  13.          {
  14.               $KeyWords[0] = "$keywords";
  15.          } else {
  16.               $KeyWords = explode(" ",$keywords);
  17.          }
  18.          $sql = "SELECT * FROM topics_re";
  19.          $count = count($KeyWords);
  20.          if( $count == 1)
  21.          {
  22.               $single = $KeyWords[0];
  23.               $sql .= " where (re_text LIKE '%$single%')  ORDER BY topic_id";
  24.          } else {
  25.               $ticker = 0;
  26.               while ( list ($key,$word) = each ($KeyWords) )
  27.               {
  28.                   $ticker++;
  29.                   if(!empty($word))
  30.                   {
  31.                        if($ticker != $count)
  32.                        {
  33.                            $sql .= " ( (re_text LIKE '%$word%'))";
  34.                        } else {
  35.                            $sql .= " ( (re_text LIKE '%$word%'))";
  36.                        }
  37.                   }
  38.               }
  39.              $sql .= " ) ORDER BY topic_id";
  40.          }
  41.         }
  42. $result=mysql_query($sql);
  43.         return $results;
  44.     }


 
Pour appeller la fonction je fais:
 

Code :
  1. $tmp=search($keywords);
  2. $tmp2=mysql_query($tmp);
  3. while($query=mysql_fetch_row($tmp2))
  4. { ...
  5. }


 
Mais il y a toujours un message d'erreur (Warning: Supplied argument is not a valid MySQL result resource in search.php on line 53) pour cette ligne

Code :
  1. while($query=mysql_fetch_row($tmp2))


 
 
Quelqu'un voit où est l'erreur car on trouve pas.  
 
Si quelqu'un à  une fonction de recherche qui va bien, je serais heureux de l'utiliser.
 
Merci  :hello:  

Reply

Marsh Posté le 17-10-2002 à 15:00:34   

Reply

Marsh Posté le 17-10-2002 à 15:10:07    

Bin teste si ta variable $tmp2 n'est pas null, déjà. Pis fais aussi un truc genre mysql_error($tmp2), parce que bon, le Warning PHP signifie clairement que ta requête a foiré.
Puis un conseil aussi : quand tu inclues ta variable $word, vérifie qu'elle ne contient pas de ' ou de % ou je ne sais quel autre caractère réservé de MySQL, sinon ça va te faire bizarre ;)
 
Ah et puis aussi, dans ce genre de cas, un gros debug s'impose : affiche toutes les traces que tu peux, fais des echo $tmp pour voir si ta query est correcte, des trucs comme ça. Ca aide :)
 
Et pis mysql_fetch_array() roulèze ; lu dans la doc PHP de Nexen.net : "Il est important de souligner que mysql_fetch_array() N'est PAS plus lente que mysql_fetch_row(), tandis qu'elle ajoute un confort d'utilisation notable."
 
Ouala.


Message édité par Taiche le 17-10-2002 à 15:13:50

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-10-2002 à 15:25:18    

Taiche a écrit a écrit :

Bin teste si ta variable $tmp2 n'est pas null, déjà. Pis fais aussi un truc genre mysql_error($tmp2), parce que bon, le Warning PHP signifie clairement que ta requête a foiré.
Puis un conseil aussi : quand tu inclues ta variable $word, vérifie qu'elle ne contient pas de ' ou de % ou je ne sais quel autre caractère réservé de MySQL, sinon ça va te faire bizarre ;)
 
Ah et puis aussi, dans ce genre de cas, un gros debug s'impose : affiche toutes les traces que tu peux, fais des echo $tmp pour voir si ta query est correcte, des trucs comme ça. Ca aide :)
 
Et pis mysql_fetch_array() roulèze ; lu dans la doc PHP de Nexen.net : "Il est important de souligner que mysql_fetch_array() N'est PAS plus lente que mysql_fetch_row(), tandis qu'elle ajoute un confort d'utilisation notable."
 
Ouala.




 
 :hello:  
Merci pour ta réponse, $tmp2 et bien vide, mais pourquoi?

Reply

Marsh Posté le 17-10-2002 à 15:28:08    

Citation :

Merci pour ta réponse, $tmp2 et bien vide, mais pourquoi?


Bin dans ce cas, c'est que ta requête a planté. Un echo "erreur MySQL : ".mysql_error() devrait t'aider à débugger.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-10-2002 à 15:34:28    

Taiche a écrit a écrit :

Citation :

Merci pour ta réponse, $tmp2 et bien vide, mais pourquoi?


Bin dans ce cas, c'est que ta requête a planté. Un echo "erreur MySQL : ".mysql_error() devrait t'aider à débugger.




 
Il y a l'erreur suivant erreur MySQL : Query was empty

Reply

Marsh Posté le 17-10-2002 à 15:37:27    

Si je fait :
 
Print $sql;
 
ça me sort ça  
 
SELECT * FROM topics_re where (re_text LIKE '%php%';) ORDER BY topic_id
 
qui est valable.
 
D'où viens l'erreur alors?
 
Merci pour tes reponses rapides  :hello:

Reply

Marsh Posté le 17-10-2002 à 15:39:11    

Ah ba ui, c'est normal, chu con, j'avais pas bien tout lu. La fin de ton code merde total :
* tu fais DEJA un $mysql_query() dans ta fonction de search, donc pas la peine d'en faire un après avec mysql_query($tmp) ;
* toujours dans search(), tu fais $result = mysql_query($sql); alors que tu retournes $results :p Comme tu renvoies une variable vide, normal que la query SQL soit vide :D


Message édité par Taiche le 17-10-2002 à 15:39:32

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-10-2002 à 15:47:21    

Taiche a écrit a écrit :

Ah ba ui, c'est normal, chu con, j'avais pas bien tout lu. La fin de ton code merde total :
* tu fais DEJA un $mysql_query() dans ta fonction de search, donc pas la peine d'en faire un après avec mysql_query($tmp) ;
* toujours dans search(), tu fais $result = mysql_query($sql); alors que tu retournes $results :p Comme tu renvoies une variable vide, normal que la query SQL soit vide :D




 
pour le $results j'avais déja vu l'erreur. Mais je dois changer quoi dans search (si j'ai deux fois $mysql_query())
 
Merci

Reply

Marsh Posté le 17-10-2002 à 15:48:38    

Aloooors si j'étais toi, j'ferai juste un return $sql pis j'ferais la query dans le code principal. Genre mysql_query(search($keywords)) quoi.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-10-2002 à 16:01:47    

C'est bon, merci
 
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
 :hello:  :hello:  :hello:  :hello:  :hello:  
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed