[PHP/mySQL] afficher une clé sur une page
Résolu
Eastchild
Messages postés
337
Statut
Membre
-
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.
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
-
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 -
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/ -
bonjours,
En fait le promblème ne vient pas de SQL mais de la ligneecho'<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) -
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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>' ? -
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 -
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.