Récupérer le champ "ID" d'une table en sélectionnant un autre champ de cette mêm [Résolu]

Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
- - Dernière réponse : stark_2097
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
- 26 août 2008 à 13:31
Bonjour à tous.

Je suis un amateur de très très bas niveau en PHP et j'ai pas mal de questions pour finaliser mon projet... merci d'être compréhensif et pas trop méchant...

Le contexte :
Je souhaite remonter un site en PHP/SQL pour mon site (CFCCAR.COM, site sur les codes Action Replay pour consoles qui va fêter ses 10 ans cet automne) qui tourne actuellement qu'avec un forum PHPBB depuis que j'ai lacher mon site en html (trop long en mise à jour).

J'ai donc créer une base de donnée avec un table "consoles" contenant :
ID (auto_increment)
Nom de la console
URL de l'icone
URL du logo

Içi pas de soucis, j'ai réussit à faire un formulaire pour injecter des données dans la base.

Ensuite, j'ai un autre table "typesdecodes" contenant :
ID (auto_increment)
ID_consoles (où on doit retrouver l'ID de la table "consoles" pourla console choisie)
Nom du type de codes

Le problème est le suivant :
Sachant que les types de codes dépendent de la console, dans mon formulaire, j'ai fait une liste déroulante pour choisir la console dont le type dépend (donc sélection par Nom de la consol car l'ID est pas parlant si on ne sais pas à quelle console il se rapporte).

Par contre, comme le montre la base "types de codes", je souhaiterais enregistrer non pas le nom de la console mais l'ID de cette console dans ID_consoles

Bref il faudrait quele fait de sélectionner le nom de la console me permette d'enregistrer l'ID correspondant..

Et là je sèche complètement... et je trouve pas par google ou autre de réponse... peut être je n'utilise pas les bons mots clefs..

Je suis à votre disposition pour de plus amples information.. j'espère que vous pourrez m'aidez
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
3
Merci
Re bonjour.
Dans ma première solution il n'y avais rien de manuel, c'est juste que j'ai eu la flemme de faire le code php correspondant ;)
Il suffit de remplacer
        $res = mysql_query($SQL);
        while($val=mysql_fetch_array($res)) {
         echo "<option>".$val["Nom"]."</option>\n";
         }
         ?>
        </select>
par
        $res = mysql_query($SQL);
        while($val=mysql_fetch_array($res)) {
         echo "<option value=' ". $val["id]. "'.>".$val["Nom"]."</option>\n";
         }
         ?>
        </select>

Sinon la méthode c'est de faire un
select id from consoles where nom ="$nom"; (avec $nom qui contient la valeur qui a été choisit quand tu a validé le formulaire.
Verifier qu'il y a 1 résultat à la requete, prendre l'indentifiant $idcorrespondant.
et faire le insert("", $idcorrespondant, ....

Cdt

Merci cs_laurent1024 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_laurent1024
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
3
Merci
il faut mettre le premier echo avant la boucle while pour qu'il n'arraisse qu'une fois.

Merci cs_laurent1024 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_laurent1024
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
0
Merci
Bonjour.
Dans ta liste déroulante il suffit de faire
<select ....>
<option value="Ton identifiant de console">le nom de la console</option>
<option value="Ton 2eme identifiant de console">le nom de la 2eme console</option>
Ton identifiant de console => ID de la table "consoles"
le nom de la console => champ "nom de console" dans la table "consoles"

Sur ta page de formulaire, dans la liste il y aura le nom de la console, par contre quand tu enverras le formulaire, tu obtiendras l'identifiant.

Pour récupérér l'ID d'un console, tu peux aussi faire une requete sql du genre select ID from consoles where nomdelasonsole = "la valeur de la console séléectionné";

Cdt
Commenter la réponse de cs_laurent1024
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
0
Merci
Merci pour ta réponse, je commençasi à me dire que j'allais finalement modifier ma base pour enregistrer le nom de la console plutot que son ID même si ça ne me satisfaisais pas....

Voiçi le code que j'utilise pour faire ma liste déroulante depuis ma base de donnée :
$SQL = "SELECT * FROM Consoles";
        $res = mysql_query($SQL);
        while($val=mysql_fetch_array($res)) {
         echo "<option>".$val["Nom"]."</option>\n";
         }
         ?>
        </select>

"Nom" c'est le nom (très recherché) du champ ou sont enregistrés les noms des consoles...
Ta première solution serait de rentrer manuellement les différentes option de la liste déroulantes à la main en code... mais je perdrait alors le bénéfice de l'utilisation d'une base SQL pour gérer ma liste de console..

Par contre je sui intéressé par ta deuxième solution...

comment je peux coupler une fonction insert into avec ta requete select...
Voiçi le bout de code que j'utiliserait pour ajouter mes valeurs dans la base :
 
"$sql = "INSERT INTO Typescodes
VALUES('','$ID_consoles','$Nom',)";

Deux option me viennetnt à l'esprit:
- soit je fait une requete SQL dans le formulaire qui définirait $ID_console comme étant la résultante de ta requete : select ID from consoles where Nom = "$Nom";

- soit on peut imbriquer deux requete et faire un truc du genre :
"$sql = "INSERT INTO Typescodes
VALUES('','select ID from consoles where Nom = "$Nom";','$Nom',)";

A moins qu'une troisième solution permettrait de modifier légèrement ma requete pour la liste déroulante et qui  permettrait d'afficher le nom de la console tout ne lui donnat la "value" ID plutôt que Nom...



Par avance merci de m'excuser pour les énormités SQL que j'ai du écrire ci-dessus (attention aux crises cardiaques)
Commenter la réponse de stark_2097
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
0
Merci
Merci pour ta réponse.

Désolé si pour moi ça paraissait pas évident que ta première réponse était pas manuelle, je ne maitrise pas du tout le SQL ni le PHP, je me débrouille comme je peux en ajoutant des bout de codes par ci, par là..

Je comprend grossièrement le fonctionnement du truc mais pas plus.

Avec ton bout de codes, j'ai eu quelques soucis, il m'affichait une erreur plus loin dans mon formulaire.

J'ai je pense solutionner le truc, il semblerait qu'il y ait eu un oublie de " dans ton code :
$res = mysql_query($SQL);
        while($val=mysql_fetch_array($res)) {
         echo "<option value=' ". $val["id"]. "'.>".$val["Nom"]."</option>\n";
         }
         ?>
        </select>

J'ai rajouter un " après id qui me semblait manquer et je pense que c'est bon, ma page ne créée plus d'erreur à l'affichage..... mais maintenant c'est à la validation du formulaire que ça coince

Le formulaire se valide mais en regardant ma base, j'ai un 0 dans la case Console_ID au lieu d'un 2 dans mon essai( la console portait le numéro 2).
Je pense que le soucis c'est que le formulaire doit pas attribuer de nom de champ à la console sélectionné.

Par exemple quand je rentre en texte le nom du type de code, j'ai une ligne de ce genre :
<label for ="Nom" class="left">Nom du type de code :</label>
          

Alors que ma liste déroualnte, jamais elle dit que la console sélectionnée s'appelera "Consoles-ID"
je peux insérer un for="Consoles_ID" comme ça :

echo "<option for="Consoles_ID" value='". $val["id"]. "'.>".$val["Nom"]."</option>\n";

Encore désolé, je suis un vrai boulet.... mais je suis vraiment content de trouver une personne qui veut bien me donner un peu de son temps pour me filer un coup de main
Commenter la réponse de stark_2097
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
0
Merci
Réponse trouvée, en fait je dois mettre un name="nomduchamp" à coté de la fonction "select

Voiçi mon code corrigé et fonctionnel pour ceux qui auront le même soucis :

<select name="Consoles_ID">
        <?
        $db = mysql_connect('localhost', 'login', 'motdepasse');
              mysql_select_db('nomdelabase',$db);



        $SQL = "SELECT * FROM Consoles";
        $res = mysql_query($SQL);
        while($val=mysql_fetch_array($res)) {
         echo "<option value='". $val["ID"]. "'.>".$val["Nom"]."</option>\n";
         }
         ?>
        </select>


Merci pour ce super coup de main, promis je reviens très bientôt avec d'autres questions.... le prochain formulaire devant intégrer deux listes déroulantes alimentée par SQL et dont la deuxième liste est conditionnée par la première  .... tout un programme !
Commenter la réponse de stark_2097
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
0
Merci
Me revoilà, j'aurais une petite modification à faire que cette requete..... et je n'y arrive pas...

Je souhaite afficher dans cette liste déroulante un texte par défaut (pas une valeur par défaut) du style :
-- Choisissez une console --

D'après ce que j'ai pu voir, il faudrait mettre ce texte dans cette ligne :
 echo "<option value='". $val["ID"]. "'.>".$val["Nom"]."</option>\n";

Le truc c'est que j 'ai beau la placer n'importe ou, elle s'affiche mais toujours associée avec la première valeur de la liste...
Commenter la réponse de stark_2097
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
0
Merci
Ben il suffit de rajouter un echo '<option value="" >choisir une console...</option>';
Commenter la réponse de cs_laurent1024
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
0
Merci
Merci, ça marche....... partiellement

Effectivement ça indique bien le texte par défaut dans la liste... mais il s'intercale aussi entre chaque choix de ma liste.
Voiçi le code :
 echo '<option value="" >Choisir une Region</option>';
 echo "<option  value='". $val["ID"]. "'.>".$val["Nom"]."</option>\n";

Ce qui me donne :
Choisir une Région
PAL
Choisir une Région
NTSC-J
Choisir une Région
NTSC-US

La solution doit plus être très loin....
Commenter la réponse de stark_2097
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Dernière intervention
19 septembre 2008
0
Merci
Merci c'est impeccable.....
Tu es mon sauveur. 

Je vais pouvoir passer au problème suivant, je referais un autre post car celà ne concerne pas le même problème, ça concerne mes liste déroulantes conditionnelles, elles marchent bien mais j'arrive pas à définir le nom de la valeur pour la seconde liste, ça m'enregistre des 0 dans la base de données au lieu des ID.

Merci encore et peut être à plus tard dan mon prochain topics
Commenter la réponse de stark_2097

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.