cs_Rouk
Messages postés70Date d'inscriptionmardi 14 janvier 2003StatutMembreDernière intervention17 janvier 2010
-
17 janv. 2010 à 09:51
cs_Rouk
Messages postés70Date d'inscriptionmardi 14 janvier 2003StatutMembreDernière intervention17 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
- 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 ?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 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à ;)