|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Date d'inscription: octobre 2008
Messages: 4
|
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é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) |
|
|
|
|
|
#2 |
![]() Date d'inscription: juillet 2005
Messages: 10 069
|
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%'"); |
|
|
|
|
|
#3 |
|
Membre émérite
![]() Date d'inscription: mars 2004
Localisation: 75013
Âge: 25
Messages: 825
|
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 ;-) |
|
|
|
|
|
#4 |
![]() Date d'inscription: juillet 2005
Messages: 10 069
|
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. |
|
|
|
|
|
#5 | |
|
Invité de passage
![]() Date d'inscription: octobre 2008
Messages: 4
|
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:
$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é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++; 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) |
|
|
|
|
|
|
#6 |
![]() Date d'inscription: juillet 2005
Messages: 10 069
|
Toutes les explications pour bien debuguer :
http://php.developpez.com/faq/?page=...ysql_ressource |
|
|
|
|
|
#7 |
|
Membre éprouvé
![]() Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
|
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 ? |
|
|
|
|
|
#8 | |
|
Invité de passage
![]() Date d'inscription: octobre 2008
Messages: 4
|
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:
|
|
|
|
|
|
|
#9 |
![]() Date d'inscription: juillet 2005
Messages: 10 069
|
Dans la premiere condition ca doit être un LIKE pas = ; mais sinon $mot[0] est vide.
D'ailleurs d'ou vient ce $mot ? |
|
|
|
|
|
#10 | |
|
Invité de passage
![]() Date d'inscription: octobre 2008
Messages: 4
|
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:
Merci de bien vouloir m'aider. |
|
|
|
|
|
|
#11 |
![]() Date d'inscription: juillet 2005
Messages: 10 069
|
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. |
|
|
|
|
|
![]() |
||
Probleme avec mysql_num_rows
|
||
| Outils de la discussion | |
|
|