[PHP/mySQL] afficher une clé sur une page [Résolu/Fermé]

Signaler
Messages postés
318
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
28 mars 2012
-
Messages postés
318
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
28 mars 2012
-
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.

7 réponses


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
Messages postés
350
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
11 juin 2009
252
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/
Messages postés
318
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
28 mars 2012
30
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)
Messages postés
350
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
11 juin 2009
252
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.
Messages postés
318
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
28 mars 2012
30
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>' ?
Messages postés
350
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
11 juin 2009
252
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
Messages postés
318
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
28 mars 2012
30
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.