[PHP/mySQL] afficher une clé sur une page

Résolu
Eastchild Messages postés 337 Statut Membre -  
Eastchild Messages postés 337 Statut Membre -
Bonjour,
j'ai un petit problème avec une clé qui ne veut pas s'afficher. Pour vous expliquer le problème, voici un bout de code :

$sql='SELECT * FROM CLIENT, FACTURE, COMMANDE WHERE devis=0';
$res=mysql_query($sql);
while($row=mysql_fetch_array($res))
{

echo'<table border="2" align="center">';

echo'<tr align="center">';
echo'<td><center><font> <b>'.$row["n°facture"].'F</b> </font></center></td>'; //ici le numero de la facture avec un F pour confirmer qu'il ne s'agit pas d'un devis

le soucis étant que n°facture est la clé primaire de FACTURE et aussi une clé étrangère de COMMANDE. D'où mon problème pour identifier la clé par rapport à la bonne table à savoir FACTURE.

Merci d'avance.
Configuration: Windows XP
Firefox 2.0.0.11

7 réponses

  1. giheller
     
    Bonjour,

    je pense que le n° facture doit être préfixé par le nom de la table

    select facture.nofac, client.nofac, facture.nofac ...from CLIENT, COMMNADE, FACTURE where ...

    cela pourra peut être solutionner le problème
    0
  2. Xil Messages postés 351 Statut Membre 257
     
    Commence par éviter le '°' dans un nom de colonne, SQL n'aime pas toujours les caractères spéciaux ('_' passe bien).

    Ensuite, une requête comme la tienne sur plusieurs tables dont des noms de colonnes sont les mêmes, renverra une erreur "Column 'XXX' in where clause is ambiguous " et donc pas de données. Tu ne risque pas de retrouver un n° de facture donc.

    Pour faire une requête sur plusieurs tables liées, qui ont par exemple, le n° de facture/de client commun, il faut utiliser les jointures

    Par exemple :
    
    SELECT Fac.*, Cli.*, Com.*
    FROM facture as Fac
    JOIN client as Cli 
         ON Cli.client_id = Fac.client
    JOIN commande as Com
         ON Com.n_facture = Fac.n_facture
    WHERE Fac.n_facture = 1
    


    Je te renvois sur un tutoriel complet et clair sur les jointures SQL et requêtes sur plusieurs table:
    https://sqlpro.developpez.com/cours/sqlaz/jointures/
    0
  3. Eastchild Messages postés 337 Statut Membre 31
     
    bonjours,

    En fait le promblème ne vient pas de SQL mais de la ligne
    echo'<td><center><font> <b>'.$row["n°facture"].'F&l t;/b> </font></center></td>'
    qui ne semble pas reconnaitre les jointures.

    (
     echo'<td><center><font> <b>'.$row["facture.n°facture"].'F&l t;/b> </font></center></td>'
    ne marche pas)
    0
  4. Xil Messages postés 351 Statut Membre 257
     
    echo '<td><center><font> <b>'.$row["n°facture"].'F</b> </font></center></td>'
    


    Cette ligne ne comporte aucune erreur syntaxique.

    Si effectivement ta reqûete SQL renvois des résultats correcte, vérifie la structure de ton tableau $row avec un var_dump($row), tu sauras ainsi quel index utiliser pour retrouver ton numéro de facture.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Eastchild Messages postés 337 Statut Membre 31
     
    Comment je sélectionne l'index dans la ligne de code

    je note echo '<td><center><font> <b>'.$row["index correct"].'F</b> </font></center></td>' ?
    0
  7. Xil Messages postés 351 Statut Membre 257
     
    l'index d'un tableau est le "nom" donné à une case. Par défaut c'est 0 pour la première, 1, 2, 3, etc

    D'ailleurs tu viens de me faire tilter sur un détail que je n'avais pas remarqué.
    En utilisant mysql_fetch_array(), les index de ton tableau de retour seront 0, 1, 2, etc

    Si tu veux pouvoir appeler tes variables par $row["nom_colonne"], il faut utiliser mysql_fetch_assoc()
    https://www.php.net/manual/fr/function.mysql-fetch-assoc.php
    0
  8. Eastchild Messages postés 337 Statut Membre 31
     
    bon, j'ai recréé ma BDD en renommant chaque clé primaire et étrangère de façon à ne pas avoir de conflit sur les nom.
    0