Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/01/2010, 12h38   #1
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut Jointure entre deux tables

Bonjour à tous,

A la suite d'un problème résolu, un petit problème vient d'apparaitre pour faire simple voilà quelques explications.

J'ai deux tables :
type_logement
-id_logement
-type_logement (chambre,studio,appartement,maison...)

offres
-id
-id_logement
-nom
-prénom
-rue...

Le problème est que en voulant faire simple j'ai créer un formulaire pour créer une nouvelle offre ou modifier une offre cependant la liste déroulante elle ne copie dans la table offre que l'id_logement et non pas le type_logement.

Les offres ressemblent alors à : vous avez choisi un 2, son loyer est de...
Le problème c'est que à la place du 2 qui est l'id correpondant à appartement j'aurais aimer avoir, vous avez choisi un appartement...

Le code affichant un résumé du contenu de la table est :

Code :
 
 
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['type']); ?></td>
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
 
Ici ce serait le champ type qu'il faudrait aller chercher dans une autre table.

Merci d'avance pour votre aide et j'espère avoir étais assez claire
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 14h03   #2
Modérateur
 
Avatar de nosferapti
 
Date d'inscription: avril 2009
Messages: 809
Par défaut

essaye ce genre de requête :
Code SQL :
SELECT *
FROM base_logement AS BL
INNER JOIN type_logement AS TL
    TL.id_type_logement = BL.id_type_logement
ORDER BY BL.id_logement DESC
__________________
GNAP !
nosferapti est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 14h04   #3
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Bonjour,

pourquoi ne pas créer un tableau php de correspondance ?

Code :
 
$tab_corr = array(1=>"chambre", 2=>"studio", 3=>"appartement", 4=>"maison");
 
puis attaquer ce tableau avec l'id pour récupérer le type de logement ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 16h33   #4
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

Merci Madfrix et nosferapti !

C'est vrai que la solution d nosferapti est plus dans l'esprit de ce que je penser faire mais ta solution Madfrix est aussi intéressante bien que si il me fallait ajouter des types de logements il serait préférable de juste devoir modifier la table je pense.

j'ai donc essayé, pour le moment sans succès je ne suis pas vraiment sur j'ai donc tester cela :

Code :
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<?
$retour2= mysql_query('SELECT * 
FROM base_logement AS BL
INNER JOIN type_logement AS TL 
    TL.id_logement = BL.id');
?>
<td><?php echo stripslashes($retour2['type_logement']); ?></td> <!-- type_logement est ici le contenu chambres,studio... -->
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
 
Il doit y avoir une erreur, je ne pense pas à devoir faire une boucle car il ne doit sortir de cette requête qu'une seule et unique réponse normalement...

Merci encore pour votre aide ^^
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 16h54   #5
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Re

il manque déjà un ON dans ta requete avant TL.id_logement je pense
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 19h42   #6
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

Merci Madfrix,

J'ai corrigé mais j'ai un doute dans ce que je dois écrire pour l'echo...
Code :
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les offres
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<?
$retour2= mysql_query('SELECT * 
FROM base_logement AS BL
INNER JOIN type_logement AS TL 
   ON TL.id_logement = BL.id_logement');
$type_logement = $retour2['type_logement'];
?>
<td><?php echo stripslashes($type_logement); ?></td> 
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
 
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 19h46   #7
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Quelque chose comme cela ?

Code php :
 
 
while($ligne = mysql_fetch_assoc($retour2))
     $type_logement = $ligne['type_logement'];
 
 
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 20h12   #8
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

Merci Madfrix,

J'ai essayé ce que tu me proposé mais malheureusement il ne prend que le dernier champ de la table type_logement qui est studio et il affiche cela à chaque endroit même si c'est un appartement ou une maison, je me suis dit qu'il faudrait peut être mettre un test et afficher mais c'est encore pire voilà ce que j'ai fait :

Code :
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les offres
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<?
$retour2= mysql_query('SELECT type_logement FROM base_logement AS BL INNER JOIN type_logement AS TL ON TL.id_logement = BL.id_logement');
while($ligne = mysql_fetch_assoc($retour2))
{
$type_logement = $ligne['type_logement'];
if ($type_logement==$id_logement)?><td><? echo stripslashes($type_logement); ?></td><?
}
?>
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
 
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 00h45   #9
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

J'abandonne Madfrix,

J'opte pour ta solution beaucoup plus simple peut être à mettre en place enfin c'est ce que je pensais au départ mais l'idéal connaissant le numéro du tableau il faudrait venir chercher l'élément correspondant alors je proposerais bien ça :

Code :
 
$tab = array(1=>"Appartement", 2=>"Chambre", 3=>"Maison", 4=>"Gite", 5=>"studio");
 
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les offres
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo tab['id_logement'+1]?></td>
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
 
Déjà un petit soucis vu que le tableau commence à 0 je suis pas sur de pouvoir faire ce que j'ai fait ?
Et si de cette façon je peut récupérer le descriptif ?

Merci d'avance
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 00h55   #10
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Pas de soucis pour les indices, c'est un tableau associatif

Par contre, remplace ça :

Code php :
 
<td><?php echo tab['id_logement'+1]?></td>
 

par ça :

Code php :
 
<td><?php echo $tab[$id_logement];></td>
 

D'où récupères tu ton $id_logement ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 11h05   #11
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

Merci Madfrix,

Mon id_logement je le récupère pas en faisant ça :

Code :
 
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) 
 
L'id_logement est dans la base_logement normalement est en faisant ça je récupère dans le tableau normalement toute les données de chaque ligne. Enfin je pense ^^

Par contre il n'est pas très content il ne m'affiche rien mais si j'écrit :

Code :
 
<td><?php echo stripslashes($tab['id_logement']);?></td>
 
j'obtient bien mes chiffres donc il ne doit pas rester grand choses pour se servir du chiffre afin d'afficher l'élément du tableau correspondant
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 11h16   #12
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

C'est normal, tu as pas d'indice 'id_logement' dans ton tableau $tab, seulement des 1, 2, 3, 4, 5. Il faut que tu mettes un $ devant id_logement et remplace :

Code php :
 
while ($donnees = mysql_fetch_array($retour)) 
 

par :

Code php :
 
while ($donnees = mysql_fetch_assoc($retour)) 
 

Beaucoup plus confortable notamment si tu rajoutes ou enlèves des champs dans ta table

mysql_fetch_array ne fonctionne qu'avec des indices numériques pas alpha je pense toutes tes erreurs poviennent déjà de là


EDIT:

En fait non cela doit marcher mais mysql_fetch_assoc est plus clean
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 11h32   #13
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

J'ai essayé de remplacer par un $ mais j'obtient une ligne blanche je ne le place peut être pas au bon endroit...

Code :
 
<td><?php echo stripslashes($tab['$id_logement']);?></td>
 
et je me suis trompé c'est en écrivant cela que j'arrive à récupèrer l'id_logement de chaque offre :

Code :
 
<td><?php echo stripslashes($donnees['id_logement']);?></td> 
 
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 11h39   #14
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Il faut que tu mettes des double quotes au lieu des simples quotes.

Ex:

Code php :
 
$a = 'coucou';
 
echo $a; -> coucou
echo '$a'; -> $a
echo "$a"; -> coucou
 

les doubles quotes interprétent les variables, les simples quotes non
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 11h51   #15
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

Merci pour cet éclaircissement ^^

Donc je test :

Code :
 
<td><?php echo $tab["$id_logement"];?></td>
 
qu'est ce qui pourrait ne pas aller cette fois ci ? Arf on va y arriver
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 11h52   #16
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Fais un :

Code php :
 
echo $id_logement;
 

pour voir s'il te retourne bien un chiffre
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 12h08   #17
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

en effectuant un
Code :
echo $id_logement;
 
je n'arrive pas à récupérer un chiffre.

Je ne le récupère bien qu'en effectuant un :

Code :
 
<td><?php echo stripslashes($donnees['id_logement']);?></td> 
 
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 12h24   #18
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 408
Par défaut

Ok, c'est parce que tu le récupères de ton tableau associatif et que tu ne l'as pas affecté à une variable. Soit tu fais :


Code php :
 
while ($donnees = mysql_fetch_assoc($retour)){
...
$id_logement = $donnees['id_logement'];
...
}
 
echo $tab[$id_logement];
 

ou alors

Code php :
 
echo $tab[$donnees['id_logement']];
 
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 17h35   #19
Membre régulier
 
Date d'inscription: décembre 2006
Messages: 125
Par défaut

Problème résolut merci Madfrix mais du coup un nouveau problème beaucoup plus important vient d'apparaître ! Les joies de l'informatique... ^^
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 12h47.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.