Problème de requete PHP

Fermé
lili - 2 nov. 2009 à 11:25
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 - 3 nov. 2009 à 00:16
Bonjour,

J'ai un probleme concernant une requete assez complexe.
Tout d'abord, je récupère une variable via l'URL qui est la suivante :
$num = $_GET["numMachine"] ;

Ensuite, je récupère le nom de la machine correspondante :
$machine_conso = "Select nom_machine
from machine_conso
where num_machine=".$num;

Puis enfin, je veux sélectionner les produits correspondants a la machine mais qui se trouve sur une autre table :
$sql2 = "SELECT *
FROM voir_conso
where type_machine_conso = ".machine_conso;

J'ai fait des tests sur la 1ère requete, et elle fonctionne très bien. C'est la seconde qui me pose problème. Est-ce un problème de variable ? Car en effet, quand j'affiche $machine_conso, elle ne m'affiche pas le nom de la machine mais "Ressource $id 4".

Pourriez vous m'aidez ?
Merci beaucoup

11 réponses

C'est or die (mysql_error()); qu'il faut rajouter si on veut un vrai diagnostique de l'erreur.

Mais la première requête de lili s'exécute bien puisqu'il obtient bien une ressource.
Quand à la seconde, on ne sait même pas si elle est exécutée, il est tellement avare en renseignements qu'il ne nous donne pas la ligne de code où $sql2 est appelé. Il n'y a pas d'erreur de syntaxe dans ce qu'il nous montre, et c'est pour ça que j'essaye de tirer des renseignements sur ce qu'il y a vraiment dans son script.
1
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
3 nov. 2009 à 00:16
Voilà, c'est ce que je voulais dire, c'est pour ça je lui ai demandé de revoir les étapes de l'exécution.
0
Salut, tu devrais mieu regarder comment on attaque une bdd avec php...

http://www.manuelphp.com/cours/cours.php?id=37
0
Bonjour

Tu ne nous dis pas tout. Avec ce que tu donnes, $machine_conso est une chaîne de caractères représentant une requête, et pas une ressource.
Je suppose donc qu'en fait tu as
$machine_conso = mysql_query("Select nom_machine
from machine_conso
where num_machine=".$num);

là, $machine_conso est bien une ressource
Et pour extraire le contenu de cette ressource, il faut utiliser (par exemple) mysql_fetch_array :
$ligne=mysql_fetch_array($machine_conso);
et le champ que tu as demandé est dans $ligne['nom_machine']
d'où (si c'est bien nom_machine ton type de machine)

$sql2 = "SELECT *
FROM voir_conso
where type_machine_conso = '$ligne[nom_machine]'";
0
Merci pour ton information. J'ai essayé mais cela ne résoud pas le problème.

En effet, j'ai bien une ressource qui est la suivante :
$requete = mysql_query($machine_conso) ;


J'ai bien fais ce que tu m'as dit :
$ligne=mysql_fetch_array($requete);
$sql2 = "SELECT *
FROM voir_conso
where type_machine_conso = '$ligne[nom_machine]'";

Mais rien y fait. J'ai fais un test sur la requete, et c'est bien la requete qui a un problème.
0

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

Posez votre question
Si type_machine_conso est du type varchar, ou text, ou blob, ou .... dans ta bdd, dans ton select faut que tu rajoute des <">...
0
il y en a :)
0
Quels test fais tu ? Sur quelle requete ? Et quel problème en ressort-il ?
Car si tu fais un echo $requete, normal que ça t'affiche que c'est une ressource, puisque c'en est une.
0
Je ne comprends pas ou il faut mettre les <> ? Oui c'est bien en varchar ..
0
Tu n'as pas de <> à mettre. francis voulait dire des '' mais tu les as déjà mis.
Je t'ai posé des questions dans mon message 5, tu ne souhaites pas y répondre ?
0
Ah Okay..
Bah j'affiche $requete pour voir ce qu'il m'affiche, et ça m'affiche Resource id #4.

Mais maintenant j'ai compris pourquoi. Il faut que je fasse un mysql_fetch_array ou object. Malheureusement cela ne marche toujours pas.

Je fais également un test sur $requete, voir si il me l'execute bien.
if ($requete) {...}else{...}
Mais ce n'est pas le cas.

Je suis dessus depuis ce matin. Est-ce une erreur de syntaxe ?
0
Quelqu'un pourrait m'aider ? S'il vous plait...
0
Je fais également un test sur $requete, voir si il me l'execute bien.
if ($requete) {...}else{...}
Mais ce n'est pas le cas.


Il n'exécute ni le premier {...} ni le second ? ça m'étonnerait bien ! Si tu récupères bien une ressource, il doit exécuter le premier.
Est-tu sûr de comprendre ce que signifie ce test ? Et pourquoi ne montres-tu pas ce qu'il y a dans tes {...} ? Moins tu donnes d'informations (sauf les identifiants et les mots de passe bien sûr), plus il faudra de temps pour comprendre.
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
2 nov. 2009 à 14:05
Je ne maitrise pas vraiment le PHP, mais bon:

1. Pour vérifier la bonne exécution, les gens du PHP ajoute ce fameux
| or die("Erreur");
après
mysql_query


2. Il faut reprendre les étapes dès le début:

a. Connection à MySQL.
b. Sélection de la base.
c. Construction de la requête (par exemple $sql1) et puis l'afficher (pour vérifier la syntaxe sql etc etc)
d. Exécution de la requête
$resultat = mysql_query($sql1);

e. Récupération du champs désiré (par fetsh array ou quelque chose comme ça).
f. Création d'un nouvelle requête (chaîne de caractères) $sql2 et l'afficher pour vérifier syntaxe etc etc
g. Exécution à nouveau
i. fetsh array à nouveau

Il faut pas mélanger $resultat avec $sql2
0