Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme pour récupérer la valeur d'une variable javascript

Sujet résolu
    8 octobre 2009 à 23:21:03

    Bonjour,

    Par exemple une base de données dont voici le contenu de la table "test":

    id-item | nom_item | quantité |
    1 ----| objet 1 --| ---- 2 ----|
    2 ----| objet 2 --| ---- 7 ----|
    3 ----| objet 3 --| ---- 3 ----|
    4 ----| objet 4 --| ---- 9 ----|

    Via une requête PHP, je récupère les valeurs du tableau:
    <script type="text/javascript">si = 0;</script>;
    

    <?php
    $sql_items = mysql_query("SELECT id_item,nom_item,quantite FROM TABLE test");
    $i = 0; 
    echo "<table>";
            while($items = mysql_fetch_assoc($sql_items))
    	{
    		echo "<div id='id_item".$i."' style='display:none'>" . $items['id_item'] ."</div>";
    		echo "<tr>
    		<td>" . $items['nom_item'] . "</td>
    		<td id='item_nbr".$i."'>" . $items['quantite'] . "</td>";
    		$i++;
    		?>
    		<script type="text/javascript">
    		id_item = parseInt($('id_item'+si).innerHTML);
                    item_nbr = parseInt($('item_nbr'+si).innerHTML);
    		si++;
                    </script>
                    <?php
    		echo "<td><a onclick=\"gerer_item('u',id_item,item_nbr); return false;\">CLIQUER ICI</a></td>
    </tr>";
    	}
    ?>
    


    Soit la fonction javascript gerer_item()
    function gerer_item(action,id,nbr)
    {
    	if(nbr>0){
    	        if(action == 'u'){
    			alert(id);
    		}
            }
    }
    


    Normalement quand je clic sur le lien "CLIQUER ICI" de la premiere boucle de ma requete (soit quand $i=0) alors alert(id) devrait renvoyer l'id de la premiere ligne de mon tableau sql mais la il me renvoi 4 en résultat... Idem pour les 3 autres boucles de ma requête.

    Idem, si je fais alert(nbr), cà me renvoi toujours "9".

    Evidemment que je m'y prend mal. Si quelqu'un a un début de solution, je suis preneur.

    Merci ;)
    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2009 à 23:39:04

      <script type="text/javascript">
              var si = '';
      </script>;
      


      ??
      • Partager sur Facebook
      • Partager sur Twitter
        9 octobre 2009 à 0:25:08

        Donnes nous le code généré.

        Tu vas sur la page => Affichage => Code source.
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2009 à 0:38:45

          Le code source généré diffère quelque peu de mon exemple mais je pense que tu t'y retrouvera a peu près:

          <table width="100%" border="1" cellspacing="0">
                  <div id="id_item0" class="invisible">3</div><tbody><tr>
          		<td width="22px" height="22px"><img src="images/shop/catalogue/mouton.png" width="25px" height="25px"></td>
          		<td width="250px">Mouton</td>
          		<td id="item_nbr0" width="38px" align="center">3</td>				
                          <td>
          			<a onclick="gerer_item('u',id_item,item_nbr,sy); return false;">U</a>
          		</td>
          	</tr><div id="id_item1" class="invisible">2</div><tr>
          		<td width="22px" height="22px"><img src="images/shop/catalogue/lapin.png" width="25px" height="25px"></td>
          		<td width="250px">Lapin</td>
          		<td id="item_nbr1" width="38px" align="center">9</td>				
                          <td>
          			<a onclick="gerer_item('u',id_item,item_nbr,sy); return false;">U</a>
          		</td>
          	</tr><div id="id_item2" class="invisible">5</div><tr>
          		<td width="22px" height="22px"><img src="images/shop/catalogue/eau.png" width="25px" height="25px"></td>
          		<td width="250px">eau</td>
          		<td id="item_nbr2" width="38px" align="center">1</td>				
                          <td>
          			<a onclick="gerer_item('u',id_item,item_nbr,sy); return false;">U</a>
          		</td>
          	</tr><div id="id_item3" class="invisible">4</div><tr>
          		<td width="22px" height="22px"><img src="images/shop/catalogue/41227229147.png" width="25px" height="25px"></td>
          		<td width="250px">Boîte(s) de conserve</td>
          		<td id="item_nbr3" width="38px" align="center">1</td>				
                          <td>
          			<a onclick="gerer_item('u',id_item,item_nbr,sy); return false;">U</a>
          		</td>
          	</tr><div id="id_item4" class="invisible">18</div><tr>
          		<td width="22px" height="22px"><img src="images/shop/catalogue/181217514605.jpg" width="25px" height="25px"></td>
          		<td width="250px">Combinaison(s) polaire</td>
          		<td id="item_nbr4" width="38px" align="center">3</td>				
                          <td>
          			<a onclick="gerer_item('u',id_item,item_nbr,sy); return false;">U</a>
          		</td>
          	</tr></tbody></table>
          


          Bien sur, par rapport a l'xemple initiale, le bouton "CLIQUER ICI" a été remplacé par le bouton "U".
          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2009 à 0:56:41

            Toute la page s'teup, avec le javascript.

            J'aime pas les morceaux =)
            • Partager sur Facebook
            • Partager sur Twitter
              9 octobre 2009 à 1:37:45

              Le soucis c'est que c'est une page appelé via la méthode Ajax en GET.
              Du coup pour afficher le code source généré, je fais "selectionner tout" puis "code source de la selection" et cà m'affiche le code précédent.
              • Partager sur Facebook
              • Partager sur Twitter
                9 octobre 2009 à 12:03:55

                >_>

                Baaah.. id_item,item_nbr,sy renvoient à quoi ?
                • Partager sur Facebook
                • Partager sur Twitter
                  9 octobre 2009 à 12:33:53

                  Ba normalement
                  <script type="text/javascript">
                  id_item = parseInt($('id_item'+si).innerHTML);
                  item_nbr = parseInt($('item_nbr'+si).innerHTML);
                  si++;
                  </script>
                  

                  Non? :euh:
                  Mais la tous les résultats dans la boucle de ma requête sql renvoi ceci (nefin je pense):
                  <a onclick="gerer_item('u',18,3,si);">U</a>
                  <a onclick="gerer_item('u',18,3,si);">U</a>
                  <a onclick="gerer_item('u',18,3,si);">U</a>
                  <a onclick="gerer_item('u',18,3,si);">U</a>
                  <a onclick="gerer_item('u',18,3,si);">U</a>
                  

                  au lieu de:
                  <a onclick="gerer_item('u',3,3,si);">U</a>
                  <a onclick="gerer_item('u',2,9,si);">U</a>
                  <a onclick="gerer_item('u',5,1,si);">U</a>
                  <a onclick="gerer_item('u',4,1,si);">U</a>
                  <a onclick="gerer_item('u',18,3,si);">U</a>
                  

                  Puisque quand je clic sur les 5 liens qui se présentent, j'ai toujours l'alerte renvoyé avec comme résultat "18".

                  Pour rappel, la fonction est:
                  function gerer_item(action,id,nbr,si)
                  {
                  	if(nbr>0){
                  	        if(action == 'u'){
                  			alert(id);
                  		}
                          }
                  }
                  


                  (Pour "sy" fait pas attention, c'est une variable javascript égale à "si")
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 octobre 2009 à 12:47:27

                    echo "<td><a onclick=\"gerer_item('u',id_item,item_nbr); return false;\">CLIQUER ICI</a></td>

                    C'est ça qui les créé?
                    id_item est toujours = à id_item. Si ça vient de ta base de données, faudrait plutôt écrire en php les données ...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 octobre 2009 à 13:21:22

                      Oui c'est bien cà qui les crée.

                      Mais normalement, dans ma boucle while(), les valeurs de id_item sont censées changer car ma table a plusieurs lignes et donc je devrais avoir autant de valeurs pour id_item qu'il y a de résultats retourné par ma requête sql...

                      Quand je fais
                      <script type="text/javascript">
                      id_item = parseInt($('id_item'+si).innerHTML);
                      alert(id_item);
                      item_nbr = parseInt($('item_nbr'+si).innerHTML);
                      si++;
                      </script>
                      

                      alert(id_item) me retourne successivement et correctement toutes les valeurs du champs id_item de ma table.

                      Mais dans la fonction gerer_item(), la même alerte, en locurrence alert(id) me retourne uniquement la dernière valeur lue du champs id_item de ma table...

                      En faite, je voudrais simplement recupérer les différentes valeurs de mon champs id_item. Donc en PHP, cà fonctionne bien dans ma boucle while mais quand j'essaie de mettre l'id dans la fonction gérer_item(), là sa fonctionne plus.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 octobre 2009 à 13:25:12

                        Normal :-° Puisque id_item est une seule et même variable. Si elle change à chaque nouvelle ligne PHP c'est normal. et c'est tout aussi normal que ça ne garde que la dernière valeur (logique, non ?)
                        Au lieu de donner une variable à ta fonction, donne lui une valeur
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 octobre 2009 à 13:25:24

                          Bah tu réécris ta variable à chaque fois, c'est normal que ça merde.

                          <?php
                          $sql_items = mysql_query("SELECT id_item,nom_item,quantite FROM TABLE test");
                          $i = 0; 
                          echo "<table>";
                                  while($items = mysql_fetch_assoc($sql_items))
                          	{
                          		echo "<div id='id_item".$i."' style='display:none'>" . $items['id_item'] ."</div>";
                          		echo "<tr>
                          		<td>" . $items['nom_item'] . "</td>
                          		<td id='item_nbr".$i."'>" . $items['quantite'] . "</td>";
                          		echo "<td><a onclick=\"gerer_item('u'," . $i . "," . $items['id_item'] ."); return false;\">CLIQUER ICI</a></td>
                          </tr>";
                          		$i++;
                          	}
                          ?>
                          



                          Grilled de 12secondes, enfoiré =°
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 octobre 2009 à 13:29:13

                            Pas de gros mots... :p mais bon, tu lui donnes tout là :-°
                            PS: oublie pas de dire merci... t'as vu il est pas content après :D
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 octobre 2009 à 14:02:33

                              Ah ok... Putain je suis parti loin là alors.
                              C'est vraiment tout bête. Des fois on va chercher loin.
                              Je me demande pourquoi je me suis entêté a utiliser inner.HTML pour récupérer mes valeurs alors que en effet, il me suffisait d'utiliser les variables PHP dans ma fonction sur le oncklick pour utiliser mes valeurs.

                              Fioou. C'est tellement bête comme solution que j'en ai honte :euh:

                              MERCIIIIII !!!

                              PS birdy42 => Pourquoi Bonjour titipotter dans ta signature o_O ?
                              Moi je dis tous les jours bonjour :ange:
                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 octobre 2009 à 14:04:09

                                Je vois "Bonjour birdy42" moi, tiens... bizarre :-°
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 octobre 2009 à 14:05:25

                                  Un script à la con By Xavierm qui affiche le pseudo. J'ai Bonjour Tiller moi.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 octobre 2009 à 14:08:00

                                    Il est en constante amélioration :-° (oui à la con ça va hein ! )
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Probleme pour récupérer la valeur d'une variable javascript

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown