Warning: mysql_num_rows() expects parameter 1 to be resource

Warning: mysql_num_rows() expects parameter 1 to be resource - PHP - Programmation

Marsh Posté le 22-12-2009 à 22:32:04    

Bonjour, je code un compteur de recherches qui logue les recherches sur mon site web (www.quizcity.net) afin d'établir un classement des mots les plus recherchés. Pour éviter les doublons, je me suis fait une vérification d'ip selon si l'usager est logué sous son compte ou non.
 

Code :
  1. if(!isset($_SESSION['user']))
  2. {
  3. //Vérif et ajout dans top_populaire (transparent)
  4. $verificationip = mysql_num_rows(mysql_query("SELECT * FROM recherches WHERE text = '".$recherche."' AND ip = '".$_SERVER[REMOTE_ADDR]."'" ));
  5. if($verificationip == 0){
  6.  mysql_query("INSERT INTO recherches SET text='".$recherche."',  user='Visiteur', ip='".$_SERVER[REMOTE_ADDR]."', date='".time()."'" );
  7. }
  8. }
  9. else
  10. {
  11. //Vérif et ajout dans top_populaire (transparent)
  12. $verificationip = mysql_num_rows(mysql_query("SELECT * FROM recherches WHERE text = '".$recherche."' AND ip = '".$_SERVER[REMOTE_ADDR]."'" ));
  13. if($verificationip == 0){
  14.  mysql_query("INSERT INTO recherches SET text='".$recherche."',  user='".$row[user]."', ip='".$_SERVER[REMOTE_ADDR]."', date='".time()."'" );
  15. }
  16. }


 
Voici le message retourné lors de l'exécution: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\fr\search.php on line 175
 
La ligne 175 correspond à: $verificationip = mysql_num_rows(mysql_query("SELECT * FROM recherches WHERE text = '".$recherche."' AND ip = '".$_SERVER[REMOTE_ADDR]."'" ));  
 
Vous avez une petite idée de ce qui peut causer mon problème?


---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 22-12-2009 à 22:32:04   

Reply

Marsh Posté le 22-12-2009 à 22:53:23    

Salut  :hello:  
 
Tout d'abord, si tu utilises presque le même code dans les deux cas, affecte une variable en visiteur ou $row[user] en fonction de isset($_SESSION['user']).
Tu balances ta requète juste après.
Ensuite, je te conseille de séparer tout ca. Utilise des variables intermédiaires. Tu perds un poil en temps d'exécution, mais tu gagnes énormément en clarté !
 
 

Code :
  1. if(!isset($_SESSION['user']))
  2. {
  3. $user = 'Visiteur';
  4. }
  5. else
  6. {
  7. $user = $row[user];
  8. }
  9. $query = 'SELECT * FROM recherches WHERE text = "'.$recherche.'" AND ip = "'.$_SERVER[REMOTE_ADDR].'"';
  10. $result = mysql_query($query);
  11. $verificationip = mysql_num_rows($result);
  12. if ($verificationip == 0)
  13. {
  14. $query = 'INSERT INTO recherches SET text="'.$recherche.'",  user="'.$user.'", ip="'.$_SERVER[REMOTE_ADDR].'", date="'.time().'"';
  15. mysql_query($query);
  16. }


 
 
La séparation de mysql_query() et de son parametre te permet de faire un echo de ta requête en cas de problème.
 
Pour ton problème, tu dois avoir une erreur dans ta requete. Affiche-là et copie-colle-la dans phpmyadmin. Tu verras ce qui pose problème.


Message édité par Pascal le nain le 22-12-2009 à 22:58:27
Reply

Marsh Posté le 25-12-2009 à 13:06:42    

Le mieux est de séparer ton mysql_query() et ton mysql_num_rows(). Tu peux avoir une erreur dans ta requête SQL, qui peut entrainer ce genre d'erreur. Et si le but de ton SELECT et d'avoir le nombre d'enregistrements, autant faire directement un SELECT COUNT()


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Sujets relatifs:

Leave a Replay

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