Problème de requete PHP

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
Configuration: Windows XP Internet Explorer 6.0

11 réponses

  1. 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. Voilà, c'est ce que je voulais dire, c'est pour ça je lui ai demandé de revoir les étapes de l'exécution.
  2. 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
    1. 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.
      1. 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 ?
        1. Je ne comprends pas ou il faut mettre les <> ? Oui c'est bien en varchar ..
          1. 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 ?
        2. 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.
          1. Si type_machine_conso est du type varchar, ou text, ou blob, ou .... dans ta bdd, dans ton select faut que tu rajoute des <">...
            1. il y en a :)
          2. 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.
            1. 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]'";