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

Résolu
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 19 septembre 2008 - 20 août 2008 à 21:12
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre 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

10 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
21 août 2008 à 11:45
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
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 août 2008 à 13:23
il faut mettre le premier echo avant la boucle while pour qu'il n'arraisse qu'une fois.
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
21 août 2008 à 10:52
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
0
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 19 septembre 2008
21 août 2008 à 11:25
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)
0

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

Posez votre question
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 19 septembre 2008
21 août 2008 à 12:18
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
0
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 19 septembre 2008
21 août 2008 à 12:35
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 !
0
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 19 septembre 2008
26 août 2008 à 12:11
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...
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 août 2008 à 12:18
Ben il suffit de rajouter un echo '<option value="" >choisir une console...</option>';
0
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 19 septembre 2008
26 août 2008 à 12:27
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....
0
stark_2097 Messages postés 28 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 19 septembre 2008
26 août 2008 à 13:31
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
0
Rejoignez-nous