Problème de requete PHP

lili -  
tarek_dotzero Messages postés 834 Statut Membre -
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. le père
     
    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
    1. tarek_dotzero Messages postés 834 Statut Membre 122
       
      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
  2. le père
     
    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
  3. lili
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. francis
     
    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
    1. le père
       
      il y en a :)
      0
  6. le père
     
    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
  7. lili
     
    Je ne comprends pas ou il faut mettre les <> ? Oui c'est bien en varchar ..
    0
    1. le père
       
      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
  8. lili
     
    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
  9. lili
     
    Quelqu'un pourrait m'aider ? S'il vous plait...
    0
  10. le père
     
    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
  11. tarek_dotzero Messages postés 834 Statut Membre 122
     
    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