Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calculs PHP à effectuer en Javascript

    22 juillet 2009 à 1:01:58

    Bonjour tout le monde!

    alors, je suis en train de coder un système d'achat en PHP (avec argent virtuel, pour un jeu..), et je voudrai effectuer quelques actions an asynchrone.

    j'ai tenté d'utiliser la librairie Xajax, mais sans résultats satisfaisants..
    Je pense qu'utiliser directement du javascript codé par l'homme serait plus efficace et pratique que d'utiliser cette librairie qui impose des contraintes et que j'ai du mal à utiliser. C'est pourquoi je me tourne vers vous, car je n'ai aucune connaissance en JS!

    mon premier soucis:
    j'ai un formulaire comprenant 2 éléments :
    - une liste déroulante comprenant la liste des articles achetables.
    - une liste déroulante comprenant le nombre de fois que l'on peut acheter l'article (1, 2, 3, 4 ...)

    j'aimerai que, lorsque la personne sélectionne un article dans la liste 1 (avec un onclick), soit calculé le nombre de fois que la personne peut acheter cet article, suivant sa valeur, et une variable "argent" que je possède (qui contient la valeur de l'argent que possède la personne)

    voici à quoi la fonction ressemblerai en PHP, si ce langage s'effectuait en asynchrone :

    <?php
    function nombreMaxArticle($prix, $argent)
    {
    $nombreMaxArticle = floor($argent / $prix);//floor très important! pour trouver le nombre entier le plus petit
    
    //boucle à afficher dans les Balises de la liste 2 (sur ce point là aussi ca pose problème en PHP)
    for ($i = 0; $i <= $nombreMaxArticle; $i++)
    {
    echo '<option value="'.$i.'">'.$i.'</option>';
    }
    }
    ?>
    



    Mon deuxième soucis:
    j'ai une liste d'élements (en texte simple, affichés avec php, car variables)
    ex:
    - Region A
    - Region B
    - Region C
    - Reg...
    etc..

    je voudrai que, chaque fois que l'on clique sur un de ces élément, apparaisse en dessous un formulaire (variable également)
    Et que lorsque l'on clique sur un autre élément de cette liste, s'efface ce qui était déjà affiché autre part, et que s'affiche uniquement ce qui concerne cet élément. De préférence, que ca s'affiche de manière fluide, sans retour en haut de la page^^

    Bon si vous pouvez me fournir ça, c'est déjà pas mal du tout! :)

    mais mon problème s'étend plus loin:
    est-ce que la fonction javascript peut actionner une fonction PHP, sans rechargement de la page?
    ou bien une alternative serait de charger dès le début le formulaire de chaque élément, dans un div portant un id correspondant au nom de l'élement. Qu'ils soient tous cachés par défaut au début, et que l'on puisse ensuite faire comme dit plus haut.


    J'ai conscience que ce que je demande est assez compliqué, et peut être un peu laborieux, mais ce serait vraiment super si vous pouviez m'aider et me passer des bouts de code!
    merci d'avance, et bonne nuit! :p:D
    • Partager sur Facebook
    • Partager sur Twitter
      22 juillet 2009 à 1:09:44

      Citation : .~Nefty~.

      C'est pourquoi je me tourne vers vous, car je n'ai aucune connaissance en JS!



      J'y met mon petit grain de sel:
      Normalement on est ici pour ceux qui ont des connaissances en JS. On aide ceux qui ont du mal avec leurs codes ou qui comprennent mal un tuto ou autre.. J'avoue que j'en ai plus que marre de voir genre 5 topics par jours commençant par "Je ne connais rien au JS".


      Mais bon, ça n'engage que moi, et je suppose que demain t'auras une réponse. Surtout si Golmote passe par là.
      • Partager sur Facebook
      • Partager sur Twitter
        22 juillet 2009 à 8:02:30

        En fait, il faudrait créer un forum "petit coup de pouce pour vos projets" dans le gnere du forum "recrutement pour vos projets" où on pourrait aller aider si on n'a rien à faire :-°
        M'enfin de toute façon, il n'y a que Golmote qui fait ça :p
        Moi, j'ai essayé une fois, je me suis retrouvé avec un code PHP qui marchait même pas à devoir mettre de l'Ajax >_<
        • Partager sur Facebook
        • Partager sur Twitter
          22 juillet 2009 à 11:04:08

          Boarf, je suis bon samaritain, certes, mais en ce moment, j'ai pas franchement le temps... Alors si en plus c'est pour mettre en place de l'Ajax... j'suis pas motivé.

          Par contre, je pense qu'il est judicieux de te rediriger vers... un tuto pour apprendre le JS, et un tuto pour apprendre l'Ajax ! :)
          • Partager sur Facebook
          • Partager sur Twitter
            22 juillet 2009 à 11:35:24

            o_O
            T'as vraiment pas de chance.
            Je crois que c'est la première fois que le bon samaritain ne fais pas le truc...
            • Partager sur Facebook
            • Partager sur Twitter
              22 juillet 2009 à 12:35:51

              Bah j'aime pas trop l'Ajax... ça part côté serveur... et vous savez surement que je suis quelque peu fâché avec le PHP, et que je n'ai pas encore pris le temps de me réconcilier avec...
              • Partager sur Facebook
              • Partager sur Twitter
                22 juillet 2009 à 14:50:36

                aah, j'ai pas de chance :(
                le problème c'est que j'ai pas le temps d'apprendre un nouveau langage..
                je pars dans quelques jour en vacance pour un mois, sans connexion, et je comptais terminer mon système au calme sur mon pc portable :o
                n'y a t'il pas une autre âme bienfaisante, prête à aider un pauvre programmeur dans le besoin? :euh::lol:
                • Partager sur Facebook
                • Partager sur Twitter
                  22 juillet 2009 à 16:10:54

                  oh..
                  le truc, c'est que j'ai quand même pas le temps, vacance ou pas^^
                  je te remercie quand même pour l'astuce.
                  pour être honnête, j'espérais recupérer ici des bouts de code, et tout assembler en vacance. :euh:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 juillet 2009 à 1:11:14

                    Citation : .~Nefty~.

                    oh..
                    le truc, c'est que j'ai quand même pas le temps, vacance ou pas^^
                    je te remercie quand même pour l'astuce.
                    pour être honnête, j'espérais recupérer ici des bouts de code, et tout assembler en vacance. :euh:



                    Et t'espérais quoi ? Qu'on allait faire ton truc, parce que tu n'as pas le temps ?
                    On a rien sans rien :o
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 juillet 2009 à 16:44:41

                      En gros l'idée de l'Ajax c'est que la meme fonction que tu utilise quand c'est fait par le serveur (lors d'un "chargement" de page) de le faire faire au serveur, mais pas au chargement mais à ta demande (donc celle de l'utilisateur)...

                      Exemple:
                      Tu valide ton formulaire, alors sa recharge la meme page mais avec argent = argent - 100... en php ta fonction fait

                      // on suppose être dans la page index.php pour simplifier...
                      
                      <?php 
                      if(isset($_POST['depense'])) 
                        $_POST['argent']-= $_POST['depense']; 
                      ?>
                      
                      J'ai <?php echo $_POST['argent']; ?>€
                      
                      <form action="index.php" method="post">
                      <input name="argent" type="hidden" value="<?php echo $_POST['argent']; ?>">
                      Je dépense <input name="depense" type="text">€
                      <input type="submit" value="Go!">
                      </form>
                      


                      C'est cool, mais recharge toute la page...

                      En ajax, tu va appeler un fichier différent (calcul.php) qui va te faire tes opérations...

                      // calcul.php
                      
                      <?php 
                      if(isset($_POST['depense'])&&isset($_POST['argent'])) 
                         echo $_POST['argent'] - $_POST['depense']; 
                      ?>
                      


                      Et dans index tu va appeler calcul en ajax...

                      // on suppose être dans la page index.php pour simplifier...
                      
                      J'ai <span id="argentDispo"><?php include('calcul.php'); ?></span>€
                      
                      <form action="index.php" method="post">
                      <input name="argent" type="hidden" value="<?php echo $_POST['argent']; ?>">
                      Je dépense <input name="depense" type="text">€
                      <input type="submit" value="Go!" onClick="ajaxCalcul(); return false;">
                      </form>
                      


                      Et la fonction ajaxCalcul() fait:

                      <!-- 
                      function ajaxCalcul()
                      {
                        var req = null; 
                      		
                      	if(window.XMLHttpRequest)
                      		req = new XMLHttpRequest(); 
                      	else if (window.ActiveXObject)
                      		req  = new ActiveXObject('Microsoft.XMLHTTP'); 
                      
                      	req.onreadystatechange = function()
                      	{ 
                      		if(req.readyState == 4)
                      			if(req.status == 200)
                      			{
                      				document.getElementById('argentDispo').innerHTML= req.responseText;	
                      			        document.getElementById('argent').value = req.responseText;
                      			}
                      			else;	
                      				// erreur
                      	}; 
                      	
                      	req.open("POST", "calcul.php", true); 
                      	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
                      	req.send("argent="+document.getElementById('argent')+"&depense="+document.getElementById('depense'));
                      }
                      
                      -->
                      


                      Analyse déja sa...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 juillet 2009 à 17:47:10

                        Mon sauveur! :D


                        ok, donc si j'ai bien compris, les calculs et la boucle que ma fonction effectuerai, je les mets dans calcul.php


                        pour le JS, c'est un peu du chinois pour moi^^
                        si je regarde bien, les trucs que j'ai à toucher c'est à la ligne 15, l'id du block.
                        à la ligne 20, le nom de la page de calcul

                        et à la ligne 22?
                        c'est là où on traite les variables du formulaire, si je ne m'abuse?
                        elle sert à quoi cette ligne?

                        déjà, merci pour ta grande aide! :D

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 juillet 2009 à 10:27:51

                          Alors j'ai changer 2-3 truc qui était un peu faux... donc maintenant tes questions portent sur ligne 23 à 25...

                          Ligne 23: quel fichier on appel sur le serveur et la méthode (post ou get ou ...)
                          Ligne 25: les arguments qu'on passe a ce fichier... ici argent et depense... tu remarque que mes champs argent et argentqDispo ont toujours la meme valeur, mais c'est pour que le code marche javascript activé ou non (c'est très important sa!)

                          req.responseText correspond au texte que te renverrai le fichier (ligne 23) si on lui passai le argement (ligne 25).On choisi de mettre ce texte dans les balises qui vont bien (les balises sont sélectionnée en JS par leur ID)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 juillet 2009 à 15:21:17

                            bon, voilà ce que j'ai fait:
                            résultat : le formulaire s'affiche correctement mais il ne se passe rien quand je sélectionne une élement du menu.
                            c'est sans doute un truc à modifier dans le js, je crois?

                            page test.php
                            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                            <html xmlns="http://www.w3.org/1999/xhtml">
                            <head>
                            <title>Untitled Document</title>
                            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                            <script type="text/javascript">
                            <!-- 
                            function ajaxCalcul()
                            {
                              var req = null; 
                            		
                            	if(window.XMLHttpRequest)
                            		req = new XMLHttpRequest(); 
                            	else if (window.ActiveXObject)
                            		req  = new ActiveXObject('Microsoft.XMLHTTP'); 
                            
                            	req.onreadystatechange = function()
                            	{ 
                            		if(req.readyState == 4)
                            			if(req.status == 200)
                            			{
                            				document.getElementById('nombre').innerHTML= req.responseText;	
                            			        document.getElementById('argent').value = req.responseText;
                            			}
                            			else;	
                            				// erreur
                            	}; 
                            	
                            	req.open("POST", "calcul.php", true); 
                            	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
                            	req.send("argent="+document.getElementById('argent')+"&unite="+document.getElementById('unite'));
                            }
                            
                            --></script>
                            
                            </head>
                            <body>
                            <form action="test.php" method="post">
                            <input type="hidden" name="argent" value="5400" />
                            <select name="unite">
                            <option value="300" onclick="ajaxCalcul();">unit1</option>
                            <option value="450" onclick="ajaxCalcul();">unit2</option>
                            <option value="800" onclick="ajaxCalcul();">unit3</option>
                            <option value="1005" onclick="ajaxCalcul();">unit4</option>
                            <option value="1100" onclick="ajaxCalcul();">unit5</option>
                            
                            <div id="nombre">
                            <select name="nombre">
                            <option value="0">0</option>
                            </select>
                            </div>
                            
                            <input type="submit" value="Acheter" />
                            </form>
                            </body>
                            </html>
                            



                            calcul.php
                            <?php
                            if (isset($_POST['unite']))
                            {
                            
                            $nombre_max_unit = floor($_POST['argent'] / $_POST['unite']);
                            
                            echo '<select name="nombre">';
                            	for ($i = 0; $i <= $nombre_max_unit; $i++)
                            	{
                            	echo '<option value="'.$i.'">'.$i.'</option>';
                            	}
                            echo'</select>';
                            }
                            ?>
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 juillet 2009 à 16:12:29

                              1e erreur: Si tu met l'action ajax sur le menu, il faut pas utilisé onClick à mon avis mais onMouseLeave ou un truc dans le genre... Perso je metterai plutot l'action avec onClick sur le bouton de validation...

                              2e erreur: Tu ne peux pas faire le retour avec innerHTML sur un select... fait le pour commencer avec un div... et dans ce div, tu réécris tout (a savoir ton <select> et touts des <option> puis </select>) => <select> a rajouter dans le code PHP du coup!

                              PS: A un moment tu a écris xajax à la place de ajax
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 juillet 2009 à 21:09:12

                                j'ai modifié les codes en haut, problème, erreur:

                                Warning: Division by zero in C:\wamp\www\ETWC_v1.0\calcul.php on line 5

                                (même résultat avec onemouseout ou autres)
                                j'ai mis le prix de l'unité dans la valeur. Perplexe, j'ai fait un var_dump() sur $_POST['unite'], et ca me dit que c'est une chaine (string).
                                comment faire en sorte que ca soit considéré comme int?



                                edit : j'ai posé la question ici :
                                http://www.siteduzero.com/forum-83-426 [...] html#r3969750

                                tu peux suivre pour tes idées, quelqu'un parle de changer le js, mais j'ai rien voulu faire vu que je connais pas. Je pars maintenant, j'essayerai de trouver un pc dans un aéroport pour voir ta réponse^^
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Calculs PHP à effectuer en 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