IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête sur 2 tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut Requête sur 2 tables
    Bonjour,

    Je suis plus que débutante en ce qui concerne le SQL, et, en général, j'essaie de me débrouiller seule ou en parcourant des forums pour trouver la solution à mes problèmes, mais là, je n'ai pas trouvé comment faire une requête qui, pourtant, doit être très courante... (si la réponse existe sur ce site, d'avance toutes mes excuses, c'est que j'aurai mal cherché...)

    D'une part, j'ai deux tables :

    1) sbbfrs (table des fournisseurs) avec un id (autoincrémenté) que j'ai appellé : frsid, societe, adresse, etc.
    2 ) sbbproduit (table des produits) avec : id (autoincrémenté), nom, ancienprix, spec, photoarticle, frais, prix, frsid (idem id table fournisseurs)

    D'autre part, j'ai une page vitrine.php sur laquelle tous les produits contenus dans la table "produits" sont listés : nom, image - tous fournisseurs confondus - avec, pour chaque produit, un bouton "visualiser". Cliquer sur l'un des boutons "visualiser" amène à la page "detail.php", laquelle devrait afficher l'image, le nom, la description, le prix et le nom du fournisseur du produit sélectionné dans la page précédente. Pour avoir le nom du fournisseur et non le n° lié à son id dans ma réponse, j'ai joint les deux tables et ma requête est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = mysql_query("SELECT sbbproduit.id, sbbproduit.nom, sbbproduit.ancienprix, sbbproduit.spec, sbbproduit.photoarticle, sbbproduit.frais, sbbproduit.prix, sbbproduit.frsid, sbbfrs.frsid FROM sbbproduit, sbbfrs WHERE sbbproduit.frsid= sbbfrs.frsid AND sbbproduit.id='id'");
    $row = mysql_fetch_row($result);
    Je pensais ainsi que la page détail.php afficherait les données du produit sélectionné dans la page précédente, mais je n'ai qu'une page vide qui pourtant contient bien dans son url le n° du produit sélectionné. Par exemple, pour le 3e article de la page : detail.php?id=3.

    J'ai fait divers essais et ce qui, je suppose, cloche, c'est "AND sbbproduit.id='id'" puisque si je ne le mets pas, les données s'affichent sur la page détail mais avec le premier produit de la table ce qui est normal puisque je ne précise rien quant au "tri" des données (je ne sais pas si je m'explique bien...).

    J'avoue que j'apprécierai énormément toute l'aide qui me sera apportée car cela fait deux jours que j'essaie de résoudre seule mon problème.

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Au vu du bout de code php, il m'apparaît assez normal que la requête retourne un résultat vide :
    sbbproduit.id='id'"
    Il y a peu de chance qu'un produit ait pour identifiant 'id'.
    D'autre part tu devrais essayer un syntaxe avec JOIN pour faire la jointure entre tes deux tables.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre confirmé
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Merci de ta réactivité.

    C'est aussi ce que je me suis dit, mais comment faire pour que les données qui s'affichent soient celles du produit sélectionné à la page précédente, et non celles du premier produit entré dans la table ?

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Ça c'est un problème qui a peu à voir avec MySQL, mais bien plus avec HTML et PHP.
    Si le formulaire est transmis en méthode POST, tu trouveras dans ton script PHP detail.php la valeur en $_POST['id'] (à supposer que 'id' soit le name du bouton dans ton script vitrine.php.
    Si la méthode est GET, ou la valeur transmise par URL ce sera $_GET['id'].
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre confirmé
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Mon lien entre les deux pages se fait avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<a href=\"detail.php?id=$row[0]\"><img src=\"$illustrations/visuel.png\" border=\"0\" alt=\"Visualiser l'article\"></a>";
    et ce lien se fait bien puisque dans l'url de la page detail.php l'id correspondant au produit sélectionné s'indique tout à fait normalement.

    Mais peut-être faut-il que je repose mon problème dans le forum consacré au php si tu penses qu'il ne vient pas de ma requête sql ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    Le problème vient de là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND sbbproduit.id='id'
    Si ton id est un champ de type numérique (ce qui à mon avis est certainement le cas)-> il ne faut pas l'encadrer d'apostrophes.

    De plus, je suppose que id est une variable?(je ne fais que deviner vu que le code que tu fournis est assez restreint) -> $id si c'est le cas

    La syntaxe correcte est donc la suivante:
    $result = mysql_query("SELECT sbbproduit.id, sbbproduit.nom, sbbproduit.ancienprix, sbbproduit.spec, sbbproduit.photoarticle, sbbproduit.frais, sbbproduit.prix, sbbproduit.frsid, sbbfrs.frsid FROM sbbproduit, sbbfrs WHERE sbbproduit.frsid= sbbfrs.frsid AND sbbproduit.id=$id");
    Tu aurais pu voir l'erreur sur ta page en utilisant la fonction mysql_error()

    $result = mysql_query("SELECT sbbproduit.id, sbbproduit.nom, sbbproduit.ancienprix, sbbproduit.spec, sbbproduit.photoarticle, sbbproduit.frais, sbbproduit.prix, sbbproduit.frsid, sbbfrs.frsid FROM sbbproduit, sbbfrs WHERE sbbproduit.frsid= sbbfrs.frsid AND sbbproduit.id=$id") or die("Erreur select:".mysql_error());

  7. #7
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Puisque l'id est passée par l'URL elle se trouve dans $_GET['id'] dans detail.php
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  8. #8
    Membre confirmé
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Réponse pour Maljuna Kris : Je n'ai pas de $_GET['id'] dans detail.php

    Réponse pour Mygale1978 :

    Si j'utilise ton code, je reçois, en retour l'erreur suivante :

    "Erreur select:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1"

    Si je mets, malgré tout, le $id (oui, tu as raison, c'est une variable) entre deux ', j'obtiens : Erreur SQL ! Resource id #4

    Je te mets les codes des deux pages concernées, si cela t'aide à voir plus clair :

    page vitrine.php (qui se situe dans un autre dossier que le fichier de connexion et le fichier detail.php) qui affiche sur 4 colonnes, pour chaque produit : sa photo, son nom, son prix actuel et son ancien prix.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
     
    //connexion à la base  
    include("../configuration.php");
     ?>
              <div align="center">
     
    <?php
    // $NbreData : le nombre de données  ! afficher
    // $NbrCol : le nombre de colonnes
    // $NbrLigne : calcul automatique a la FIN
    // -------------------------------------------------------
    // (exemple)
    $NbrCol = 4;
    // requete
    $result = mysql_query("SELECT $sbbproduit.id, $sbbproduit.hid, $sbbproduit.sid, $sbbproduit.nom, $sbbproduit.ancienprix, $sbbproduit.photoarticle, $sbbproduit.prix, $sbbproduit.frsid, $sbbfrs.frsid FROM $sbbproduit, $sbbfrs WHERE $sbbproduit.frsid= $sbbfrs.frsid AND $sbbproduit.frsid='1'");
    // -------------------------------------------------------
    $NbreData = mysql_num_rows($result);
    // ------------------------------------------------------- 
    // affichage
    $NbrLigne = 0;
    if ($NbreData != 0) {
     
    $j = 1;
    echo '<table width="790" cellspacing="15">';
    while ($row = mysql_fetch_array($result)) {
       if ($j%$NbrCol == 1) {
          $NbrLigne++;
          echo "<tr>";
          $fintr = 0;
    }
       echo '<td class="td_vitrine">';
       // ------------------------------------------
        // AFFICHAGE des DONNEES de la fiche
    echo "<img src='".$row['photoarticle']."' / width=120 height=120>";
    echo '<br><br>';
    echo "$row[3]" ;
    echo '<br>' ;?>
    Prix avec remise : <? echo "$row[6] $devises"; ?><br>
    Prix avant remise : <? echo "$row[4] $devises";
    echo '<br><br>';
    echo "<a href=\"../detail.php?id=$row[0]\"><img src=\"$illustrations/visuel.png\" border=\"0\" alt=\"Visualiser l'article\"></a>";
        // ------------------------------------------
       echo '</td>';
       if ($j%$NbrCol == 0) {
          echo "</tr>"; 
          $fintr = 1;
       }
       $j++;
     
    }
    if ($fintr!=1) { echo '</tr>'; }
    echo '</table>';
    } else {
    echo 'pas de données  ! afficher';
    }
    ?>
     
    <?php
    // deconnexion de la base
    mysql_close(); 
    ?>
    et le code de la page detail.php (celle qui ne me donne pas le résultat escompté, mais juste les textes html qu'elle contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <?php
     
    include("configuration.php");
     
    $result = mysql_query("SELECT sbbproduit.id, sbbproduit.nom, sbbproduit.ancienprix, sbbproduit.spec, sbbproduit.photoarticle, sbbproduit.frais, sbbproduit.prix, sbbproduit.frsid, sbbfrs.frsid FROM sbbproduit, sbbfrs WHERE sbbproduit.frsid= sbbfrs.frsid AND sbbproduit.id=$id");
     
    $row = mysql_fetch_row($result) or die('Erreur SQL !<br />'.$result.'<br />'.mysql_error());
     
    ?>
    <table border="0" width="100%">
    <tr><?php
     
    	if ($row[4] != "nul") {
    		$split = explode("../", $row[4]);
    		$row[4] = $split[1];
    		$img = "<img src=\"$row[4]\" width='120' height='120' target='blank'>";
                $image2 = "<a href='$row[4]' target='blank'><b>Agrandir la photo</b></a><br>";
    	} else {
    		$img = "<img src=\"$images/na.jpg\" width=100 border=0>";
    	}
    echo "<td colspan='2'>$img</a><br>$image2</td>";
    ?></tr><tr>
    	<td valign="top"><b>Article : </b></td>
    	<td><?php echo "$row[1]"; ?></td>
    </tr>
     
    <tr>
    	<td valign="top"><b>Descriptif : </b></td>
    <?php
    $descriptif = $row[3];
    $descriptif = str_replace("[retour]","<br>",$descriptif);
    $descriptif = str_replace("[gras]","<b>",$descriptif);
    $descriptif = str_replace("[/gras]","</b>",$descriptif);
    ?>
     
    	<td><?php echo "$descriptif"; ?></td>
    </tr>
    <tr>
    	<td valign="top"></td>
    	<td></td>
    </tr>
    <?php
    			$fraisproduit1 = $row[5];
    			$fraisproduit2 = sprintf("%0.2f", $fraisproduit1);
    ?>
     
    <tr>
    	<td valign="top"><b>Frais :</b></td>
    	<td><?php echo "$fraisproduit2"; ?> <?php echo "$devises"; ?></td>
    </tr>
    <tr>
    	<td valign="top"><b>Prix TTC : </b></td>
    <?php
     
     
     
    			$price = $row[6];
    			$price = sprintf("%0.2f", $price);
     
    			$totalgeneral1 = ($price + $fraisproduit2);
                      $totalgeneral2 = 	sprintf("%0.2f", $totalgeneral1);
     
     
    ?>
     
    <td><font color=navy><b><?php echo "$price"; ?>&nbsp;<?php echo "$devises"; ?>&nbsp;TTC</font></b></td>
         <tr><td><b>Total TTC :</b></td><td><font class=grand><b><?php echo "$totalgeneral2"; ?> <?php echo "$devises"; ?></b></font></td>
    </tr>
     
    <?php
    			$ancienprix = $row[2];
                $ancienprix = sprintf("%0.2f", $ancienprix);
    		echo "</tr><tr><td>Prix public :</td>";
    		echo "<td><font class=\"promo\">$ancienprix</font><font color=red> $devises TTC</td>";
     
    			$fournisseur = $row[7];
    ?>
     <tr>
              <td>Fournisseur : </td>
             <td><?php echo $fournisseur; ?></td>
         </tr>
     
     
     
    </tr>
    </table>
     
    <form action="commande.php" method="post">
    <input type="hidden" value="<?php echo "$row[0]"; ?>" name="id">
     
    <table border="0">
    <tr>
    	<td>Quantité: </td>
    	<td><input type="text" size="3" name="montant" value="1"></td>
    	<td colspan="2"><input type="submit" value="Commander"></td>
    </tr>
    </table>
    </form>
    <?php
    // deconnexion de la base
    mysql_close(); 
    ?>
    J'ai beau essayer de voir où peut se situer mon (ou mes) erreurs, je n'y parviens pas...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ok merci pour le code,

    Effectivement comme l'a dit Maljuna Kris tu dois récupérer dans ta page detail.php, la valeur de ton id passé en paramètre via $_GET['id']
    (detail.php?id=<valeur_id>)

    tu as une erreur parce que ta variable $id ne contient rien et ça fait donc planter ton query.

    Il faut donc lui spécifier une valeur à savoir celle de $_GET['id'] dans ta page detail.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    include("configuration.php");
     
    $id = $_GET['id'];
     
    $result = mysql_query("SELECT sbbproduit.id, sbbproduit.nom, sbbproduit.ancienprix, sbbproduit.spec, sbbproduit.photoarticle, sbbproduit.frais, sbbproduit.prix, sbbproduit.frsid, sbbfrs.frsid FROM sbbproduit, sbbfrs WHERE sbbproduit.frsid= sbbfrs.frsid AND sbbproduit.id=$id");

  10. #10
    Membre confirmé
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Un hyper grand ça marche... et, du coup, je vois que je me suis aussi plantée quelque part car dans le résultat de ma page detail.php, en face de "fournisseur", je voudrais qu'apparaisse son nom et non son n° d'id...

    Mes infos concernant les fournisseurs étant dans la table sbbfrs j'ai bien mis dans ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sbbproduit.frsid= sbbfrs.frsid
    mais je ne fait qu'appeler son id... et je ne sais pas comment faire pour appeler son nom (champ : societe dans sbbfrs)

    Hé oui, je suis plus que nulle par moment...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re,

    Il suffit juste d'ajouter ce champ dans ta requête. et récuperer la valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ....sbbfrs.societe FROM sbbproduit.....

  12. #12
    Membre confirmé
    Femme Profil pro
    Presque retraitée
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Presque retraitée
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Merci. Je suis vraiment une grosse nouille qui ne devrait pas travailler sur son site lorsqu'elle n'a pas assez dormi... car j'avais déjà fait cette même opération dans un autre fichier.

    Toutes mes excuses... et bonne fin de journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  2. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 09h06
  3. Requête sur plusieurs tables
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 12h25
  4. Requête sur 2 tables ?
    Par kibodio dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/03/2005, 15h57
  5. Requête sur 2 tables et surtout novice...
    Par kibodio dans le forum Langage SQL
    Réponses: 13
    Dernier message: 03/03/2005, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo