Corrélation entre différente table

Résolu
cs_Rouk Messages postés 70 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 17 janvier 2010 - 17 janv. 2010 à 09:51
cs_Rouk Messages postés 70 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 17 janvier 2010 - 17 janv. 2010 à 12:27
Bonjour,

Je souhaiterai optimiser mon code, il fonctionne actuellement mais je sais qu'il n'est pas correct. En effet, je n'utilise pas de clé secondaire pour récupérer les informations d'une autre table.

Voici la structure de ma base:
Table : Plateforme
Champs 1 : ID_PlateForme
Champs 2 : Nom_PlateForme

Table : Pays
Champs 1 : ID_Pays
Champs 2 : Nom_Pays

Table : Mdp
Champs 1 : ID_Mdp
Champs 2 : Login_Mdp
Champs 3 : Mdp_Mdp
Champs 4 : Nom_PlateForme
Champs 5 : Nom_Pays

Le code:
- Outils d'administration


<?php
mysql_connect(\"localhost\", \"root\", \"\");
mysql_select_db(\"Test\");
?>

<form action=\"admin_mdp.php\" method=\"post\">

<select name=\"PlateForme\">
<?php
$retour_plateforme = mysql_query(\"SELECT * FROM PlateForme ORDER BY Nom_PlateForme ASC\");
while($donnees_plateforme=mysql_fetch_array($retour_plateforme)) {
echo \"<option>\".$donnees_plateforme['Nom_PlateForme'].\"</option>\n\";
}
?>
</select>
<select name=\"Pays\">
<?php
$retour_pays = mysql_query(\"SELECT * FROM Pays ORDER BY Nom_Pays ASC\");
while($donnees_pays=mysql_fetch_array($retour_pays)) {
echo \"<option>\".$donnees_pays['Nom_Pays'].\"</option>\n\";
}
?>
</select>
Login : 
Mdp : 

</form>

<?php
if (isset($_POST['Ajouter']))
{
$login_mdp = mysql_real_escape_string(htmlspecialchars($_POST['Login']));
$mdp_mdp = mysql_real_escape_string(htmlspecialchars($_POST['Mdp']));
$plateforme_mdp = mysql_real_escape_string(htmlspecialchars($_POST['PlateForme']));
$pays_mdp = mysql_real_escape_string(htmlspecialchars($_POST['Pays']));
mysql_query(\"INSERT INTO Mdp VALUES('', '\". $login_mdp .\"', '\". $mdp_mdp .\"', '\". $plateforme_mdp .\"', '\". $pays_mdp .\"')\");

}
if (isset($_POST['Modifier']))
{
$id_mdp = mysql_real_escape_string(htmlspecialchars($_POST['id']));
$login_mdp = mysql_real_escape_string(htmlspecialchars($_POST['Login']));
$mdp_mdp = mysql_real_escape_string(htmlspecialchars($_POST['Mdp']));
mysql_query(\"UPDATE Mdp SET Login_Mdp='\" . $login_mdp . \"', Mdp_Mdp='\" . $mdp_mdp . \"' WHERE ID_Mdp='\" . $id_mdp . \"' \");
}
if (isset($_POST['Supprimer']))
{
$id_mdp = mysql_real_escape_string(htmlspecialchars($_POST['id']));
$login_mdp = mysql_real_escape_string(htmlspecialchars($_POST['Login']));
$mdp_mdp = mysql_real_escape_string(htmlspecialchars($_POST['Mdp']));
mysql_query(\"DELETE FROM PlateForme WHERE ID_PlateForme='\" . $ID_Mdp . \"'\");
}
?>
----

PlateForme,
Pays,
Login,
Mot de Passe,
----

<?php
$retour = mysql_query(\"SELECT * FROM Mdp ORDER BY Nom_PlateForme ASC\");
while ($donnees = mysql_fetch_array($retour))
{
?>
----

<form action=\"admin_mdp.php\" method=\"post\">

<?php echo $donnees['Nom_PlateForme']; ?>,
<?php echo $donnees['Nom_Pays']; ?>,
" />
"/>,
" />
"/>,

,

, </form>

<?php
}

mysql_close();
?>


Ma problématique est que je ne sais pas comment récupérer l'ID_PlateForme et l'ID_Pays depuis la liste déroulante. Puis de chercher et afficher les noms via leur ID.

Pouvez-vous m'expliquer comment faire la corrélation entre les tables ?

Merci

2 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
17 janv. 2010 à 11:54
Salut,

Ma problématique est que je ne sais pas comment récupérer l'ID_PlateForme et l'ID_Pays depuis la liste déroulante.

Deux raisons à ça :
[list]
[*] La table Mdp ne contient pas les bonnes informations
[*] Tu n'utilises pas la balise <option> correctement.
/list

Avant tout, tu DOIS stocker dans la table Mdp l'ID du pays et de la plateforme. Pas leurs noms. Sinon, les tables Pays et Plateforme ne servent à rien.
Elle doit donc ressembler à ça :
Table : Mdp
Champs 1 : ID_Mdp
Champs 2 : Login_Mdp
Champs 3 : Mdp_Mdp
Champs 4 : ID_PlateForme
Champs 5 : ID_Pays

A partir de là, la requête :
SELECT * FROM Mdp ORDER BY Nom_PlateForme ASC

doit être modifiée de la sorte :
SELECT Mdp.*, Pays.Nom_Pays, Plateforme.Nom_PlateForme
FROM Mdp
LEFT JOIN Pays ON Mdp.ID_Pays= Pays.ID_Pays
LEFT JOIN Plateforme ON Mdp.ID_PlateForme=Plateforme.ID_PlateForme
ORDER BY Plateforme.Nom_PlateForme ASC;


Tu récupèreras ainsi les champs de la table Mdp ainsi que les champs Nom_Pays et Nom_PlateForme (issus respectivement des tables Pays et de Plateforme) correspondant aux ID stockés dans la table Mdp pour chaque enregistrement.

Tes listes <select>, plus précisément les balises <option>, doivent avoir l'attribut value défini pour que le formulaire puisse renvoyer leur valeur :

    				<select name ="PlateForme">
<?php
$retour_plateforme = mysql_query("SELECT * FROM PlateForme ORDER BY Nom_PlateForme ASC");
while($donnees_plateforme=mysql_fetch_array($retour_plateforme)) {
   						echo '<option value="'.$donnees_plateforme['ID_PlateForme'].'">'.$donnees_plateforme['Nom_PlateForme']."</option>\n";
}
?>
    				</select>

Ce code tient compte de la modification de la table Mdp (indispensable, sinon on ne récupère pas ID_PlateForme ni ID_Pays).


Sinon, tu as deux champs qui portent le même nom (les champs de type hidden : name="id") : c'est "interdit" (c'est mal, très mal).



--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
3
cs_Rouk Messages postés 70 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 17 janvier 2010 1
17 janv. 2010 à 12:27
Merci beaucoup !!! Cela fonctionne parfaitement !!!

Ps: J'ai modifié les champs de type hidden : name="id"
0
Rejoignez-nous