Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/02/2010, 00h35   #1
Invité de passage
 
Date d'inscription: octobre 2008
Messages: 4
Par défaut Probleme avec mysql_num_rows

Bonjour,
En utilisant le code qui suit j'obtiens un Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource...

J'ai essayé beaucoup de solution mais là je suis vraiment bloqué,
Est-ce que quelqu'un pourrait m'expliquer la cause de ce message ?

Merci !

Code :
$debut = ($page - 1) * $limit; // start (requete mysql)

// NOMBRE TOTAL D'ENREGISTREMENTS REPONDANT A LA REQUETE
$requete=mysql_db_query("$sql_bdd","select count(*) from recherches where (produit like $phrase order by produit",$db_link);
$nb_total=mysql_result($requete,0,"count(*)");

$requete=mysql_db_query("$sql_bdd","select * from recherches where (produit like $phrase limit $debut,$limit",$db_link);
$num=mysql_num_rows($requete);


// DEFINITION DU MESSAGE A AFFICHER
if ($num==0) {echo "Désolé, aucune page de ce site ne contient <b>$motSaisi</b>...";} /* chang  la variable appel*/
else if ($mot=="") 	{echo "";}
else if (strlen($mot)<2) {echo "Veuillez saisir au moins 2 caractères.";}
	
// AFFICHAGE DES RESULTATS
else {

echo "<b>$nb_total</b> r&eacute;ponse";
if ($nb_total>1) {echo "s";}
echo "<br>$texte";

$i=0;
while($i<$num)
	{
	$produit=mysql_result($requete,$i,"produit");
	{echo "<br><br>$produit<br><br> \n";
}
	$i++;

Dernière modification par sabotage ; 08/02/2010 à 00h48. Motif: Merci d'utiliser les balises [CODE] (bouton # de l'éditeur)
daniel64 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 00h52   #2
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 069
Par défaut

mysql_db_query() ne s'utilise plus.

Il manque des guillemets a ton LIKE et faire un ORDER sur un COUNT unique ne sert a rien :
Code :
mysql_query("select count(*) from recherches where produit like '%$phrase%'");
 
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 00h59   #3
Membre émérite
 
Avatar de torvalds17
 
Date d'inscription: mars 2004
Localisation: 75013
Âge: 25
Messages: 825
Par défaut

Je suis d'accord sur la solution, mais j'ai quand même une question pour toi Sabotage : pourquoi la fonction qui exécute la requête ne renvoie pas un warning pour dire que la requête a foiré ?
__________________
référence PHP, référence JavaScript,
mettez-les dans vos marque-pages et lisez-les avant de poster ici ;-)
torvalds17 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 01h06   #4
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 069
Par défaut

mysql_query() ne renvoit pas les erreurs, il faut utiliser mysql_error() pour les voir.
A mon avis, c'est pour eviter que des informations sur la base de données soient affichées ; bien qu'en production on n'affiche normalement jamais les erreurs.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 20h16   #5
Invité de passage
 
Date d'inscription: octobre 2008
Messages: 4
Par défaut

Merci Sabotage pour ta réponse,

J'ai fait les modifications mais maintenant en plus du message d'erreur précedent, j'ai un nouveau message d'erreur:
Warning: mysql_result(): supplied argument is not a valid MySQL result resource ...
ce qui correspond à la ligne:
Citation:
$nb_total=mysql_result($requete,0,"count(*)");
J'ai peut-être une piste de solution : Quand je modifie la première ligne qui est:
$debut = ($page - 1) * $limit;
pour la ligne:
$debut =$page*$limit;
en utilisant le code de mon premier message, je n'ai plus aucun message d'erreur mais alors ma pagination en bas des pages est décalée d'une page, ce qui ne règle rien. Par contre, ça ne change rien si j'utilises le code ci-dessous.

Je vous remet le code en incluant les modifications de Sabotage:
Code :
$debut = ($page - 1) * $limit; // start (requete mysql)
 
// NOMBRE TOTAL D'ENREGISTREMENTS REPONDANT A LA REQUETE
$requete=mysql_query("select count(*) from recherches where produit like '%$phrase%'");
$nb_total=mysql_result($requete,0,"count(*)");
 
$requete=mysql_query("select * from recherches where produit like '%$phrase%' limit '%$debut%','%$limit%'");
$num=mysql_num_rows($requete);
 
 
// DEFINITION DU MESSAGE A AFFICHER
if ($num==0) {echo "Désolé, aucune page de ce site ne contient <b>$motSaisi</b>...";} /* chang  la variable appel*/
else if ($mot=="") 	{echo "";}
else if (strlen($mot)<2) {echo "Veuillez saisir au moins 2 caractères.";}
	
// AFFICHAGE DES RESULTATS
else {
 
echo "<b>$nb_total</b> r&eacute;ponse";
if ($nb_total>1) {echo "s";}
echo "<br>$texte";
 
$i=0;
while($i<$num)
	{
	$produit=mysql_result($requete,$i,"produit");
	{echo "<br><br>$produit<br><br> \n";
}
	$i++;
Est-ce que quelqu'un à une idée ?

Merci!

P.S.J'utilise Easyphp 3.0.

Dernière modification par sabotage ; 08/02/2010 à 22h52. Motif: Merci d'utiliser les balises [CODE] (bouton # de l'éditeur)
daniel64 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 22h56   #6
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 069
Par défaut

Toutes les explications pour bien debuguer :
http://php.developpez.com/faq/?page=...ysql_ressource
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/02/2010, 01h13   #7
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Salut,

j'ai pas bien compris, tu veux juste le nombre de lignes ?
Si oui, mets :

Code php :
 
$requete=mysql_query("select count(*) from recherches where produit like '%$phrase%'");
while($ligne = mysql_fetch_assoc($requete))
    $nb_ligne = $ligne['count(*)'];
 

à la place de :
Code php :
 
$requete=mysql_query("select count(*) from recherches where produit like '%$phrase%'");
$nb_total=mysql_result($requete,0,"count(*)");
 

non ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/02/2010, 03h16   #8
Invité de passage
 
Date d'inscription: octobre 2008
Messages: 4
Par défaut

Merci à Sabotage et Madfrix pour vos réponses,

Madfrix, j'ai essayé ta solution mais maintenant j'ai un Warning avec mysql_fetch_assoc.

Mais je crois avoir cerné où est le probleme, grace au site de Sabotage, j'ai inscrit des or exit(mysql_error()) et j'ai le message suivant:

Erreur de syntaxe près de '%%' or produit like '%%' ...
ce qui correspond à la ligne suivante:

Citation:
$phrase=" '%$mots[0]%' or produit like '%$mots[0]%' ";
Mais où est l'erreur de syntaxe dans ce code ?

daniel64 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/02/2010, 09h20   #9
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 069
Par défaut

Dans la premiere condition ca doit être un LIKE pas = ; mais sinon $mot[0] est vide.
D'ailleurs d'ou vient ce $mot ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/02/2010, 17h54   #10
Invité de passage
 
Date d'inscription: octobre 2008
Messages: 4
Par défaut

Bonjour Sabotage,
Ce script sert de moteur recherche. On peut utiliser plusieurs mots pour la recherche dans une table contenant plusieurs colonnes. On peut donc rechercher par no de produit, par nom, par description, par fabricant etc.

C'est ainsi que dans le code:
$phrase=" '%$mots[0]%' or produit like '%$mots[0]%' "
il y a beaucoup d'autres or, je ne les ai pas donner pour ne pas alourdir le message. De toute façon, ça donne le même message d'erreur de syntaxe.

Pour le $mot voici les lignes de code qui le concerne:
Citation:
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$mot = isset($_POST['mot']) ? $_POST['mot'] : (isset($_GET['mot']) ? $_GET['mot'] : "");

$mot=strtolower(addslashes($mot));
$mots=split(" ",$mot);
$nombre_mots=count($mots);
Pour ce qui du LIKE à la place du =, excuse-moi mais je suis débutant et je ne vois pas où je dois faire la modification.

Merci de bien vouloir m'aider.
daniel64 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/02/2010, 20h26   #11
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 10 069
Par défaut

Etant donné qu'il n'y a qu'un seul = dans le bout de requete que tu nous montres, tu devrais trouver

Tu devrais controler ce que vaut $mot et toutes les variables qui servent à le construire car visiblement il ne vaut rien.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 07h38.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.