Erreur de requête introuvable
Résolu
zeckwam
Messages postés
49
Date d'inscription
Statut
Membre
Dernière intervention
-
ChrisCompote Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
ChrisCompote Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis élève de BTS IG et actuellement stagiaire, et mon m'a demandé de développer un programme permettant de gérer une base de donnée. J'ai donc décidé de faire tout ça sous forme de site web, et de gérer ma base de donnée via phpmyadmin.
Bref, tout ce petit monde marche plutôt pas mal, excepté une requête SQL qui me fait m'arracher les cheveux, après plusieurs jours de recherche de "pourquoi que ça marche pas nondédiou ?"
Via cette requête je veux afficher des données stockées dans ma base, et les trier selon un ordre choisi par l'utilisateur parmi une liste déroulante. Mais un message d'erreur apparait : "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in..." et impossible de trouver la failler...
Si vos yeux plus habitués que les miens a ce code pouvaient trouver le soucis, je vous en serais vraiment très reconnaissant !
Je suis élève de BTS IG et actuellement stagiaire, et mon m'a demandé de développer un programme permettant de gérer une base de donnée. J'ai donc décidé de faire tout ça sous forme de site web, et de gérer ma base de donnée via phpmyadmin.
Bref, tout ce petit monde marche plutôt pas mal, excepté une requête SQL qui me fait m'arracher les cheveux, après plusieurs jours de recherche de "pourquoi que ça marche pas nondédiou ?"
Via cette requête je veux afficher des données stockées dans ma base, et les trier selon un ordre choisi par l'utilisateur parmi une liste déroulante. Mais un message d'erreur apparait : "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in..." et impossible de trouver la failler...
$nombreDeMessagesParPage = 10; //détermination d'un nombre de messages par page, affecté a une variable $retour = mysql_query('SELECT COUNT(*) AS code_ent FROM entreprise WHERE entreprise.nom_ent like "' .$_SESSION['lettre']. '%"'); //requête SQL retournant le nombre d'entreprises dans la base de données $donnees = mysql_fetch_array($retour); $totalDesMessages = $donnees['code_ent']; $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage); //calcul du nombre de pages if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = 1; } $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; $reponse = mysql_query('SELECT nom_ent, adresse_ent, nom_ville, cp_ent FROM entreprise, ville WHERE entreprise.code_ville = ville.code_ville AND entreprise.nom_ent like "' . $_SESSION['lettre'] . '%" ORDER BY ' . $_SESSION['tri'] . $_SESSION['sens'] . ' LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage); //requête SQL : données a afficher
Si vos yeux plus habitués que les miens a ce code pouvaient trouver le soucis, je vous en serais vraiment très reconnaissant !
A voir également:
- Erreur de requête introuvable
- Supprimer un fichier introuvable - Guide
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- J'aime par erreur facebook notification - Forum Facebook
13 réponses
Bonjour,
Aucun souci visible ici
A mon avis il te manque un espace entre $_SESSION['tri'] et $_SESSION['sens']
'SELECT COUNT(*) AS code_ent FROM entreprise WHERE entreprise.nom_ent like " ' .$_SESSION['lettre']. '%" '
Aucun souci visible ici
SELECT nom_ent, adresse_ent, nom_ville, cp_ent FROM entreprise, ville WHERE entreprise.code_ville = ville.code_ville AND entreprise.nom_ent like " ' . $_SESSION['lettre'] . '%" ORDER BY ' . $_SESSION['tri'] . $_SESSION['sens'] . ' LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage
A mon avis il te manque un espace entre $_SESSION['tri'] et $_SESSION['sens']
Merci de cette réponse rapide !
Il faudrait, selon toi, que j'écrive
Il faudrait, selon toi, que j'écrive
ORDER BY ' . $_SESSION['tri'] .' ' . $_SESSION['sens'] . '
a mon avis c'est une virgule qu'il faut entre $_SESSION['tri'] et $_SESSION['sens']
ORDER BY '.$_SESSION['tri'].','.$_SESSION['sens'].'
Arf, ni la virgule ni l'espace ne fonctionnent :s
$reponse = mysql_query('SELECT nom_ent, montant, secteur_taxe, anneesco FROM entreprise, offre, taxe, annee WHERE entreprise.code_ent = offre.code_ent AND offre.code_taxe = taxe.code_taxe AND taxe.code_annee = annee.code_annee AND entreprise.nom_ent like "'.$nom.'" AND offre.montant >= ' . $_SESSION['montant'] . ' ORDER BY ' . $_SESSION['tri'] . $_SESSION['sens'] . ' LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ORDER BY {unsigned_integer | nom_de_colonne | formula}
ce ne sont pas des noms de colonnes différentes dans cet exemple mais les différentes possibilités
un peu plus bas dans ce document (http://dev.mysql.com/doc/refman/5.0/fr/select.html) voir l'exemple avec plusieurs champs:
SELECT college, region, seed FROM tournament
-> ORDER BY region, seed;
donc je persiste et signe il faut bien une virgule pour séparer plusieurs champs pour ORDER BY
par contre tu as peut être une autre erreur dans ta requette
essayes comme ça pour voir quelle erreur elle te sort et quelle gueule elle a (verifies qu'il y a bien un espace entre chaque AND etc..):
ce ne sont pas des noms de colonnes différentes dans cet exemple mais les différentes possibilités
un peu plus bas dans ce document (http://dev.mysql.com/doc/refman/5.0/fr/select.html) voir l'exemple avec plusieurs champs:
SELECT college, region, seed FROM tournament
-> ORDER BY region, seed;
donc je persiste et signe il faut bien une virgule pour séparer plusieurs champs pour ORDER BY
par contre tu as peut être une autre erreur dans ta requette
essayes comme ça pour voir quelle erreur elle te sort et quelle gueule elle a (verifies qu'il y a bien un espace entre chaque AND etc..):
$query="SELECT nom_ent, montant, secteur_taxe, anneesco FROM entreprise, offre, taxe, annee WHERE entreprise.code_ent = offre.code_ent AND offre.code_taxe = taxe.code_taxe AND taxe.code_annee = annee.code_annee AND entreprise.nom_ent like "'.$nom.'" AND offre.montant >= ".$_SESSION['montant']." ORDER BY ".$_SESSION['tri'].",".$_SESSION['sens']." LIMIT ".$premierMessageAafficher.",".$nombreDeMessagesParPage." "; $reponse=mysql_query($query) or die ("Pb avec la requette :<br />".$query."<br />".mysql_error());
Rien a faire... j'ai retenté tout ça, virgule, espace, changer le nom des variables (puisque j'utilisais les mêmes noms pour une autre page), rien n'y fait... toujours cette erreur : "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\dbentreprise\entreprises.php on line 120".
Même mon maître de stage bug devant mon problème...
En essayant ton code, ça me sort :
Pb avec la requette :
Query was empty
Même mon maître de stage bug devant mon problème...
En essayant ton code, ça me sort :
Pb avec la requette :
Query was empty
et si tu fais:
ça affiche quoi ?
$query="SELECT nom_ent, montant, secteur_taxe, anneesco FROM entreprise, offre, taxe, annee WHERE entreprise.code_ent = offre.code_ent AND offre.code_taxe = taxe.code_taxe AND taxe.code_annee = annee.code_annee AND entreprise.nom_ent like "'.$nom.'" AND offre.montant >= ".$_SESSION['montant']." ORDER BY ".$_SESSION['tri'].",".$_SESSION['sens']." LIMIT ".$premierMessageAafficher.",".$nombreDeMessagesParPage." "; echo "contenu de la requette: ".$query;
ça affiche quoi ?
donc la requette est VIDE !
fais un echo des variables qui la compose:
verifies aussi tes noms de table, de champs
fais un echo des variables qui la compose:
echo "Session_montant=".$_SESSION['montant']."<br />session tri=".$_SESSION['tri']."<br />session sens= ".$_SESSION['sens']."<br /> Premier message a afficher= ".$premierMessageAafficher."<br /> Nbr par page= ".$nombreDeMessagesParPage;
verifies aussi tes noms de table, de champs
//on va "surnommer" le nom des tables: entreprise -> Ent offre -> Off etc.. //verifies que les champs juste après SELECT sont bien dans les tables que j'ai mis //il y avait une erreur juste après LIKE inversion des ' et " //on va passer par la fonction escape string au cas ou il y aurait une apostrophe dans le nom ça l'e échappe en mettant un \ devant $query="SELECT Ent.nom_ent, Off.montant, Ent.secteur_taxe, An.anneesco FROM entreprise Ent, offre Off, taxe Tx, annee An WHERE Ent.code_ent = Off.code_ent AND Off.code_taxe = Tx.code_taxe AND Tx.code_annee = An.code_annee AND Ent.nom_ent LIKE '".mysql_real_escape_string($nom)."' AND Off.montant >= ".$_SESSION['montant']." ORDER BY ".$_SESSION['tri'].",".$_SESSION['sens']." LIMIT ".$premierMessageAafficher.",".$nombreDeMessagesParPage." "; echo "Texte de la requette: ".$query; //ça donnes quoi ?
Bizarrement, en rajoutant ça :
ça ne m'affiche pas d'erreur de requête, mais simplement "Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in C:\wamp\www\dbentreprise\entreprises.php on line 125"
(j'avais remis le résultat qui était censé opérer, que j'avais mis en commentaire). La ligne 125 est juste après la requête, c'est justement le résultat :
if (! $reponse) { echo ("Erreur requete".mysql_error()); }
ça ne m'affiche pas d'erreur de requête, mais simplement "Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in C:\wamp\www\dbentreprise\entreprises.php on line 125"
(j'avais remis le résultat qui était censé opérer, que j'avais mis en commentaire). La ligne 125 est juste après la requête, c'est justement le résultat :
while ($donnees = mysql_fetch_array($reponse)) {...}
Essayes aussi de remplacer les " par de '.
Essayes une requête écrite en dur d'un cas puis tu remplaces chaque valeur par la variable
Essayes une requête écrite en dur d'un cas puis tu remplaces chaque valeur par la variable
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in...
Tu peux stp écrire tout le message d'erreur ?
Tu peux stp écrire tout le message d'erreur ?
Merci de m'aider. Je suis en week-end pour le moment, et je ne peux pas emmener mon travail chez moi. Donc je testerais tout ça lundi matin. Encore merci !
Je reviens
ORDER BY ".$_SESSION['tri'].",".$_SESSION['sens']
effectivement si la 2 iéme variable contient ASC ou DESC dans ce cas il na faut pas les séparer par une virgule mais un espace
mais en un premier temps essayes en "racourcissant la requette pour voir à partir de quel endroit elle coince
si tu n'as toujours rien derriere "Texte de la requette", raccourcis jusqu'à ce que tu ai qq chose
ORDER BY ".$_SESSION['tri'].",".$_SESSION['sens']
effectivement si la 2 iéme variable contient ASC ou DESC dans ce cas il na faut pas les séparer par une virgule mais un espace
ORDER BY ".$_SESSION['tri']." ".$_SESSION['sens']
mais en un premier temps essayes en "racourcissant la requette pour voir à partir de quel endroit elle coince
$query="SELECT Ent.nom_ent, Off.montant, Ent.secteur_taxe, An.anneesco FROM entreprise Ent, offre Off, taxe Tx, annee An WHERE Ent.code_ent = Off.code_ent AND Off.code_taxe = Tx.code_taxe AND Tx.code_annee = An.code_annee AND Ent.nom_ent LIKE '".mysql_real_escape_string($nom)."' AND Off.montant >= ".$_SESSION['montant']." "; echo "Texte de la requette: ".$query; //ça donnes quoi ?
si tu n'as toujours rien derriere "Texte de la requette", raccourcis jusqu'à ce que tu ai qq chose
J'ai repris ma requête a zéro, comme tu me l'a conseillé, je suis parti de
et j'ai ajouté la suite petit a petit, et Oh MIRACLE !!! ça maaaaaaaarche !!! :D
Donc voilà ma requête de base :
Telle que je vous l'avais donnée tout au début de ce post ; et voici ma requête finale, qui fonctionne :
(dont j'ai modifier un petit paquet d'appellations, et autres noms de variables, tout au long de la résolution du problème)
Un grand merci a tout ceux qui m'ont aidés, et je vous souhaites une excellente journée (la mienne commence plutôt bien !!)
A bientot, et merci encore !
"SELECT nom_ent FROM entreprise");
et j'ai ajouté la suite petit a petit, et Oh MIRACLE !!! ça maaaaaaaarche !!! :D
Donc voilà ma requête de base :
$reponse = mysql_query(' SELECT nom_ent, adresse_ent, nom_ville, cp_ent FROM entreprise, ville WHERE entreprise.code_ville = ville.code_ville AND entreprise.nom_ent like "' . $_SESSION['lettre'] . '%" ORDER BY ' . $_SESSION['tri'] . $_SESSION['sens'] . ' LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage );
Telle que je vous l'avais donnée tout au début de ce post ; et voici ma requête finale, qui fonctionne :
$query = mysql_query(" SELECT nom_ent, adresse_ent, nom_ville, cp_ent FROM entreprise, ville WHERE entreprise.code_ville = ville.code_ville AND entreprise.nom_ent LIKE '".$_SESSION['lettre']."%' ORDER BY ".$_SESSION['trier']." ".$_SESSION['ordre']." LIMIT ".$premierMessageAafficher.",".$nombreDeMessagesParPage." ");
(dont j'ai modifier un petit paquet d'appellations, et autres noms de variables, tout au long de la résolution du problème)
Un grand merci a tout ceux qui m'ont aidés, et je vous souhaites une excellente journée (la mienne commence plutôt bien !!)
A bientot, et merci encore !