Erreur de requête introuvable

Résolu/Fermé
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 - 9 juin 2010 à 13:45
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 - 15 juin 2010 à 15:38
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...

				$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 !

13 réponses

ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
9 juin 2010 à 13:58
Bonjour,
'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']
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 14:01
Merci de cette réponse rapide !

Il faudrait, selon toi, que j'écrive
ORDER BY ' . $_SESSION['tri'] .' ' . $_SESSION['sens'] . '
 
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
9 juin 2010 à 14:11
oui, debug en ajoutant un print devant la requete, et copie la dans phpmyadmin
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 14:30
Même avec un print j'ai le même message d'erreur... L'erreur n'est peut-être pas dans la requête, mais je ne comprend pas où elle pourrait être...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 juin 2010 à 14:05
a mon avis c'est une virgule qu'il faut entre $_SESSION['tri'] et $_SESSION['sens']

ORDER BY '.$_SESSION['tri'].','.$_SESSION['sens'].'
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
9 juin 2010 à 14:10
Un espace ...
[ORDER BY {unsigned_integer | nom_de_colonne | formula} [ASC | DESC] ,...]

http://dev.mysql.com/doc/refman/5.0/fr/select.html
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 14:12
Arf, ni la virgule ni l'espace ne fonctionnent :s
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 14:13
Mais je me demande si le problème vient réellement de la requête, puisqu'elle me parrait correcte...
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
9 juin 2010 à 14:15
affiche la requete entière
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 14:17
$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);
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
9 juin 2010 à 14:20
ORDER BY ' . $_SESSION['tri'] . $_SESSION['sens'] . ' LIMIT ' .

ORDER BY ' . $_SESSION['tri'] .' '. $_SESSION['sens'] . ' LIMIT ' .
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 14:22
C'est ce que j'ai tenté de faire, oui, mais rien n'y fait "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in..."
Merci de m'aider, en tout cas !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 juin 2010 à 16:49
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..):
$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());
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 17:33
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
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 juin 2010 à 17:42
et si tu fais:

$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 ?
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 17:50
ça n'affiche rien :
"contenu de la requete :

"
puis ça passe à la suite du code (le choix de la page, etc...)
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 17:58
Ma journée de stage s'arrête là. Je vous remercie d'avoir essayer de m'aider. A demain j'espère, pour tenter de régler ce foutu problème...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 juin 2010 à 17:58
donc la requette est VIDE !

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
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
9 juin 2010 à 18:02
Hum ça ça marche, ça me donne ce qui est censé être dans les variables.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 juin 2010 à 18:33
//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 ?
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
10 juin 2010 à 09:16
Bonjour ! Merci de continuer à m'aider à trouver la solution !

Je viens de tester votre code, et encore une fois, ça n'affiche rien :
"Texte de la requete :

"
Puis la suite du code.
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
10 juin 2010 à 21:43
Alain, pour moi ORDER BY ".$_SESSION['tri'].",".$_SESSION['sens'] est faux, d'apres le nom de variable, $_SESSION['sens'] c'est ASC ou DESC donc

ORDER BY champ ASC, tu as raison si il y a plusieurs champs c'est séparé par une virgule
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
11 juin 2010 à 09:06
Oui, $_SESSION['sens'] devient "ASC" ou "DESC"
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
10 juin 2010 à 09:26
Bizarrement, en rajoutant ça :
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))
{...}
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
10 juin 2010 à 21:54
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
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
11 juin 2010 à 09:10
Raaah ! Je comprend pas... même en remplaçant les variables par des valeurs brutes ($_SESSION['sens'] par ASC, $_SESSION['tri'] par "nom_ent" etc) j'ai la même erreur. Ce qui veut dire que le problème ne vient pas de ma requête ?!
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
11 juin 2010 à 13:05
affiche ta requete.
De plus tu dois avoir
$reponse = mysql_query($query);
while($row = mysql_fetch_array($reponse))
{
  ...
}
0
sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 5
11 juin 2010 à 13:30
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in...

Tu peux stp écrire tout le message d'erreur ?
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
Modifié par zeckwam le 14/06/2010 à 09:09
Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in C:\wamp\www\dbentreprise\entreprises.php on line 124

C'est plus le même, d'ailleurs !
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
11 juin 2010 à 15:56
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 !
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
12 juin 2010 à 21:09
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

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
0
zeckwam Messages postés 49 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 13 avril 2013 2
14 juin 2010 à 09:34
J'ai repris ma requête a zéro, comme tu me l'a conseillé, je suis parti de
"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 !
0
ChrisCompote Messages postés 73 Date d'inscription mardi 8 juin 2010 Statut Membre Dernière intervention 19 juin 2010 8
15 juin 2010 à 15:38
De rien
0