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. 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]'";
    1. 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. 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. 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. 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. 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 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. 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