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

Résolu/Fermé
Eastchild Messages postés 318 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 28 mars 2012 - 18 janv. 2008 à 02:20
Eastchild Messages postés 318 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 28 mars 2012 - 21 janv. 2008 à 21:45
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.
A voir également:

7 réponses

Utilisateur anonyme
18 janv. 2008 à 08:45
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
Xil Messages postés 350 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 11 juin 2009 257
18 janv. 2008 à 11:21
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
Eastchild Messages postés 318 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 28 mars 2012 31
18 janv. 2008 à 14:04
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
Xil Messages postés 350 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 11 juin 2009 257
18 janv. 2008 à 14:20
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Eastchild Messages postés 318 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 28 mars 2012 31
18 janv. 2008 à 14:28
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
Xil Messages postés 350 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 11 juin 2009 257
18 janv. 2008 à 14:36
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
Eastchild Messages postés 318 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 28 mars 2012 31
21 janv. 2008 à 21:45
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