PB formulaire UPDATE

Résolu
Bonjour,
Voila j'ai un problème dans un formulaire de modification en faite voila je pense que je récupère mal mes valeurs à modifier mais je ne vois pas comment les récuppérer autrement mais ce problème ne se passe que sur les liste déroulante. Je n'est pas d'erreur quand je lance ma requête mais en l'affichant je vois bien qu'il ne récupère pa toute les valeurs c'est en faisant des tests que j'ai vu que je récupèra mes valeurs de liste comme ceci:
$cycle=$_GET['idcycle'];
$rs1 = mysql_query("SELECT IdCycle from Cycle WHERE LibelleCycle='".$cycle."'");
$ligne1 = mysql_fetch_array($rs1);
$cycle=$ligne1['IdCycle'];

et une fois j'ai essayé de mettre les 3dernière ligne ci-dessus en commentaire et des fois sa marche et d'autre non.
Bref voila je vous ai expliqué du mieu qu j'ai pu mais je ne comprend pas grand chose à ce problème.
si vous avez besoin de mon code pour mieux comprendre demndez moi !

Je vous remerci d'avance.
Cordialement.
Configuration: Windows XP Internet Explorer 7.0

25 réponses

Résumé de la discussion

Le problème porte sur la récupération des valeurs de listes déroulantes dans un formulaire de modification, où la valeur sélectionnée est convertie via une requête SQL en IdCycle, puis réutilisée dans une étape ultérieure. Plusieurs conseils insistent sur l’utilisation d’un nom (ou d’un identifiant) sur les balises select et sur la récupération directe de la valeur envoyée via $_POST ou $_GET, plutôt que d’exploiter le libellé affiché. En pratique, il est conseillé d’envoyer toutes les valeurs des listes lors du post avec un bouton submit, et d’éviter les recalculs côté client sans synchronisation, certains proposant des inputs cachés pour préserver les IDs.

Bobot (l’IA à votre service)
  1. function remplirCycle()
    {
    var idcycle;
    idcycle = getElementsByTagName('idcycle').value;
    alert(idcycle);
    window.location="http://localhost/ConfirmResultModif1Compte2.php?idcycle="+idcycle;
    }


    ce n'est pas une bonne idée de mettre un nom de,varaible identique au nom du champ auquel tu veux accéder !

    mets comme code de ta liste:

    <select name="idcycle" id="idcycle" onChange="remplirCycle('idcycle');">


    et ta fonction devient:
    function remplirCycle(id)
    {
    
    var valeur_idcycle = document.getElementById(id).value;
    alert("valeur envoyee: "+valeur_idcycle);
    window.location.href="ResultModif1Compte2.php?idcycle="+valeur_idcycle;
    1. c'ets bon j'ai réussi à règler mon problème c'était très simple mais pas facile à trouver!!
      en fate j'ai donc tou enlevé le javascript et tout et j'ai surtout remplacé un ligne que je n'écrivait pas comme il faut:
      celle la:
      echo '<option selected="'.$ligne2['IdCycle'].'">'.$ligne2['LibelleCycle'].'</option>';
      en celle la:
      echo '<option value="'.$ligne2['IdCycle'].'" selected>'.$ligne2['LibelleCycle'].'</option>';

      et c'est donc à cause de cette ligne que j'avait affiché dans ma requête les libelle aux leu des codes (lorsque l'utilisateur ne modifié pas la valeur de certaine listes.

      Merci encore pour ton temps concacré à mon problème
      Cordialement.
      1. j'y comprend rien

        donnes nous le code complet de ta page avec les listes et la partie ou tu récupères les valeurs pour ta requette
        1. nan moi je ne veu pas que l'utilisateur soit obligé de tout changer et c'est bien la le problème.
          Quand vous dites: même si l'utilisateur ne change pas la sélection dans la liste ça renverra toujours la value "A1"

          je ne suis pas d'accord car mi quand il ne change pas un liste je e vois pas s'affiché le value mais se que l'on voi sur la liste c'est-a-dire qu quand il y a le code avec un tiret et le libelle aprè et bien je vois sa dans ma requete se qui est inutilisable. devrais-je faire un booleen pour savoir si il son chngé ou je ne c pa tro quoi ????
          1. si l'utilisateur ne change pa la liste A1 et change la A2 j'aurai une requete de type=
            UPDATE table SET idA1='libelleA1', idA2, ='IdA2';
            et moi je ne peut rien faire du libelle


            ça ne marche pas comme ça les listes

            par exemple

            <option value="A1">libelle A1</option>

            même si l'utilisateur ne change pas la sélection dans la liste ça renverra toujours la value "A1"

            par contre si tu veux absolument que l'utilisateur cahnge toutes les listes et le verifier tu mets des listes comme ça:

            <select name="liste1">
            <option value="-1">Veuillez choisir </option>
            <option value="A1">A1 </option>
            <option value="A2">A2 </option>
            </select>

            etc ... pour les autres listes

            et tu peux tester par ex:

            if($_POST['liste1'] =="-1"){
            echo "Veuillez choisir dans la liste 1 !";
            }elseif($_POST['liste2'] =="-1"){
            echo "Veuillez choisir dans la liste 2 !";
            }elseif($_POST['liste3'] =="-1"){
            echo "Veuillez choisir dans la liste 3 !";
            }else{
            //tu recuperes les choix des liste par $_POST['liste1'] etc.. puis tu fais ton UPDATE

            }
            1. j'ai aussi essayé de mémorisé dans un input type hidden l'ancien id et le nouveau et en testan si le nouveau était vide alors il prenait la valeur de l'ancien et heureusement ça sa marche mais ça fait pareil qu'avant c-a-d que sa me met le libelle dans ma requête pourtant j'ai bien vérifié et dans le textbox il y a bien l'id. et je ne comprend pas pourquoi il le change je n'ai fait aucune requête pour ça !!
              1. et bien oui j'ai bien changé pour cette solution mai le problème maintenant c'est le même qu'avant c'est que si l'utilisateur ne change pa la liste A1 et change la A2 j'aurai une requete de type=
                UPDATE table SET idA1='libelleA1', idA2, ='IdA2';
                et moi je ne peut rien faire du libelle il faut absplument que je rédupère les ID et malgrés toute les requête cela ne change rien !!!! je n'y comprend rien !! avez-vous une idée
                1. Pourquoi veux tu absolument passer par du javascript ?

                  si tu mets un bouton type="submit" le formulaire (donc toutes tes listes) sera posté vers le scrip qui est spécifié dans action
                  exemple:
                  <form name="form1" method="post" action="script_appele.php">
                  <select name="liste_1" id="liste_1">
                     <option value="A1">A1</option>
                      <option value="B1">B1</option>
                  </select>
                  <select name="liste_2" id="liste_2">
                     <option value="A2">A2</option>
                     <option value="B2">2</option>
                  </select>
                  <input type="submit" name="envoyer" value="envoyer">
                  </form>


                  et dans ton script_appele.php tu récupères tes valeurs sélectionnées des listes par

                  $sel_liste1=$_POST['liste_1']; // entre crochets c'est ce qui correspond au name= de la liste concernée
                  $sel_liste2=$_POST['liste_2'];
                  1. oui jai déjà un bouton, mais, je doit mettre le javascript sur ce bouton? et si oui comment écrire la fonction javascipt dois-je l'écrire 6fois vu que j'ai 6listes ou dois-je l'crire une fois é je nomme tous les id du même nom??
                    et après comment je récupère mes variable qui seront mémorisé en javascript ??
                    je suis désolé j'en demande peut-ëtre beaucoup mais je fais très peu de javascript et je n'y arrive pas beaucoup!

                    je vous remercie
                    1. biboo: Dans le <select>, il faut mettre soit un attribut id, soit un attribut name mais pas les deux.
                      NON il est tout a fait possible de mettre l'attribut name et l'attribut id à une balise select
                      name sert a recuperer les valeurs postees et id sert à javascript et CSS

                      c'est que donc dès que j'ai selectionné un élément dans la liste cycle et bien il m'affiche l'alert et change de page directe et moi j'ai d'autre liste a récupérer les valeur donc il faudrai que avant de changer de page il récupère TOUTES les valeur de TOUTES le listes

                      pour faire ça tu ne fais pas la bonne methode

                      pour "poster" toutes les listes il ne faut pas faire onChnage mais mettre tout simplement un bouton

                      <input type="submit" name="envoyer" value="Envoyer">

                      ainsi toutes tes listes seront envoyées
                      1. Oui en effet, je ne sais pas pourquoi j'ai dit ça. D'ailleurs, dans le code que j'utilise j'ai les deux.. :D
                        J'ai sans doute voulu dire qu'il faut éviter de mettre le même nom à l'id et au name.
                    2. mais le soucis n'est pas la je n'i jamais di que je n'avai as le bon résultat dans l'alert mais le souci c'est que donc dès que j'ai selectionné un élément dans la liste cycle et bien il m'affiche l'alert et change de page directe et moi j'ai d'autre liste a récupérer les valeur donc il faudrai que avant de changer de page il récupère TOUTES les valeur de TOUTES le listes t e ne vois pas trop comment faire vu que je e mlis connait pas trop en javascript alors déja que j'ai du mal a les écrire moi même alors modifier une déja faite par quelqun d'autre . . . !!
                      voila j'èspère ue vous allez continué de m'aider en tout cas je vous remerci beaucoup jusq'a maitenant !!
                      1. Dans le <select>, il faut mettre soit un attribut id, soit un attribut name mais pas les deux.
                        Je recommande de mettre un id, puis faire un getElementById.
                        Tu t'es forcément trompé. Je viens d'essayer, j'affiche parfaitement la valeur dans mon alert. Pense aussi bien à modifier ton formulaire que ta fonction Javascript. =)

                        De plus, quand je parlais de l'URL absolue, je parlais de ton "http://localhost/Bidule.php".
                        Ca ne marche pas dès lors que tu déplaceras ton application (sur un site web en ligne par exemple). Cependant, Alain_42 a corrigé le problème dans son dernier post. ;)
                        1. ouè donc j'ai bien vu en fin de compte le changement apporter de ta fonction javascritp par rapport a la mienne mai le soucis c'est que avec ta fonction dès que j'ai selectionner dans le liste cycle il m'envoi directe sur la page suivante mais moi j'en ai encor 5de liste déroulante a remplir plus d'autre textbox donc je veu juste qu'il mémorise les id !! et est-ce que c'est possible qu'il en mémorise beaucoup vu que j'ai 6liste déroulante ??

                          merci encor pour ton aide et pour le temps que tu passe.
                          1. ça ne change rien ! désolé et j'ai remarqué aussi un truc assez bisard c'est que je devrai voir dasn l'URL les id récupéré et je ne voi rien dedans
                            1. je ne comprend pas trop la désolé. pouvez vous être plus claire svp
                              1. c'est autorisé de mettre un .value a la fin de l'appel d'une fonction ?
                                1. Ta une adresse msn??? et si oui tu peux me la donner svp???
                                  1. tu as trouvé une solution a mon problème?
                                2. L'échec total, ne mets SURTOUT PAS le chemin absolu dans ton URL..
                                  1. cmment ça ne pas mettre l'adresse total tu parle de mon script ou du site??
                                3. voila je croi que j'ai compri d'ou ça vien mais je ne sais toujours pa comment le réoudre !!
                                  bref je vous explique en fiate je me suis donc rendu compte que lorsque je ne changeai pas toutes les valeur (liste déroulante) et bien celle que je n'avait pas changeai récupérai le libellé et pas le numéro et je pense que sa vient de mon script javascript dans le on change de la liste
                                  le code est:
                                  function remplirCycle()
                                  {
                                  var idcycle;
                                  idcycle = getElementsByTagName('idcycle').value;
                                  alert(idcycle);
                                  window.location="http://localhost/ConfirmResultModif1Compte2.php?idcycle="+idcycle;
                                  }


                                  j'aurai aimé avoir réponse
                                  je vous remerci
                                  • 1
                                  • 2