IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Calcul automatique javascript


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut Calcul automatique javascript
    Bonjour à tous, j'utilise dans un formulaire la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!--
    	function sum_elements(){
    	   var somme=0;
    	   var result = document.getElementById('somme');
    	   for(var i = 1; i<=6; i++){
    	      var element = document.getElementById('total'+i);
    	      if(element.value!='' && !isNaN(element.value)){
    	         somme += parseFloat(element.value);
    	      }
    	   }
    	   result.value = somme;
    	}
    	//-->
    Elle me sert à faire un calcul automatique que j'affiche comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Total pour 1 chambre <input id="somme" name="somme" type="text" size="8" value="<?php echo"$total_chambres";?>">
    Je demande dans le formulaire combien de chambre sont concernées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nombre de chambres <input onblur="calculTch()" name="nbre_ch" type="text" size="1" value="<?php echo"$nbre_ch";?>">
    Et je calcul comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!--
    	function calculTch()
    	{
    	var total_tchambres= document.getElementById("formulaire").elements["nbre_ch"].value * document.getElementById("formulaire").elements["total_chambres"].value;
    	document.getElementById("formulaire").elements["total_tchambres"].value=total_tchambres;
    	}
    	//-->
     
    <input type="hidden" name="total_chambres" value="<?php echo"$total_chambres";?>" size="20" onblur="calculTch()">
     
    <input id="total_tchambres" name="total_tchambres" type="text" size="8" value="<?php echo"$total_tchambres";?>">
    Mon problème, le calcul se fait automatiquement mais sur la valeur enregistrée dans la base de donnée "$total_chambres" et non sur le résultat de "somme" qui est le résultat du calcul automatique..

    Pouvez-vous m'aider à résoudre ce problème?
    Merci d'avance.

  2. #2
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Bonjour,

    Lorsque vous écrivez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="<?php echo"$total_chambres";?>"
    vous récupérez la valeur donnée par le serveur lors du chargement de la page.

    En fait, dans votre fonction sum_elements(), vous devriez affecter le résultat au champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("somme").value = somme;
    Je n'ai pas bien compris quand et comment vous appeliez cette fonction, d'ailleurs.
    Et mettre un onblur sur un champ hidden ne fera pas grand chose.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="<?php echo $total_chambres ;?>";
    voire même si c'est du numérique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value=<?php echo $total_chambres ;?>;
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos réponses. Je ne sait pas si j'ai compris, j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!--
    	function sum_elements(){
    	   var somme=0;
    	   var result = document.getElementById("somme").value = somme;
    	   for(var i = 1; i<=6; i++){
    	      var element = document.getElementById('total'+i);
    	      if(element.value!='' && !isNaN(element.value)){
    	         somme += parseFloat(element.value);
    	      }
    	   }
    	   result.value = somme;
    	}
    	//-->
    Mais la le calcul ne se fait plus.
    Je vais poser la question autrement: comment récupérer "somme " à la place de "$total_chambres" dans la ligne ci-dessous?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="total_chambres" value="<?php echo"$total_chambres";?>" size="20" onblur="calculTch()">

  5. #5
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Le récupérer à partir de quand (quelle action ?) ? Vous voulez vraiment avoir ce résultat dans un champ hidden ?

    L'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("somme").value = somme;
    va positionner le valeur somme dans le champ d'id somme. La valeur somme est calculée dans votre fonction, donc cette instruction doit être en fin de fonction. Mais bon, apparemment ce n'est pas dans le champ somme que vous désirez cela.

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Je m'explique mal,
    Dans un premier temps je fait la somme pour une chambre : "$total_chambres".
    Je voudrais dans un deuxième temps multiplier ce résultat par le nombre de chambres. Je ne tient pas spécialement à ce le récupérer dans un champ hidden, j'avais utiliser cette façon pour effectuer le calcul.

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour, on à trouvé cette façon de récupérer la variable javascript en php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $total = "<script>document.write(somme);</script>";
     
    echo"Somme : $total;" 
    ?>
    Mais elle ne fonctionne pas. Pouvez-vous nous aider à l'écrire.
    Merci d'avance

  8. #8
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Recommençons depuis le début.

    Vous avez votre page qui s'affiche.

    Qu'y a-t-il dedans comme champs (qui nous intéressent) ?
    Quelles actions, quels événements sont déclenchés où quand par qui comment ?
    Actions qui lancent un calcul (lequel ?). Où doit-être présenté/transmis le résultat ?

    Je ne parviens pas à savoir d'où viennent les infos (serveur ? encodage utilisateur ?) et si vous voulez faire un calcul à l'écran, et donc en JavaScript, ou bien si vous voulez récupérer des informations côté serveur.

    Notez également que nous sommes sur le forum JavaScript et que nous demandons le code HTML généré et non pas du code PhP.


    Quant à echo"Somme : $total;", il affiche la chaine de caractères "Somme : $total;". Pour afficher la variable, c'est echo"Somme : " . $total;.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    au passage oublie document.write
    utilise plutot un createElement ou passe par le innerHTML ou le value d'un element de la page
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par vermine Voir le message
    Quant à echo"Somme : $total;", il affiche la chaine de caractères "Somme : $total;". Pour afficher la variable, c'est echo"Somme : " . $total;.
    Ça c’est pas vrai. Dans les chaînes avec double-quotes ("), PHP substitue les noms de variables. Ce serait différent avec les single-quotes (') :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo 'Somme : $total'; ?>

    Sinon, @Theo : je pense que tu te mélanges les pinceaux dans les contextes d'éxecution de PHP et de JavaScript. PHP tourne sur le serveur, puis la page arrive sur le navigateur, puis JavaScript prend le relais. Tu ne pourras pas récupérer une variable JavaScript en faisant un echo. Il est nécessaire de renvoyer l'information au serveur, et pour ça l'input hidden était une bonne idée, à condition qu'il soit dans un <form> correctement déclaré. Le renvoi des données se fait alors par la soumission du formulaire, avec un input submit ou via la méthode Javascript monForm.submit();.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  11. #11
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    @Watilin : Ha ben j'ai bien fait de venir. Merci pour la correction.

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Je vais essayer d'être clair.
    La page est un formulaire ou on rentre 6 valeurs de dépense de rénovation "$total" (de 1 à 6) d'une chambre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="total6" name="total6" type="text" size="8" size="8" value="<?php echo"$total6";?>
    La fonction "sum_elements" additionne automatiquement ceux-ci et le résultat "$total_chambres" s'actualise à chaque entrée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!--
    	function sum_elements(){
    	   var somme=0;
    	   var result = document.getElementById('somme');
    	   for(var i = 1; i<=6; i++){
    	      var element = document.getElementById('total'+i);
    	      if(element.value!='' && !isNaN(element.value)){
    	         somme += parseFloat(element.value);
    	      }
    	   }
    	   result.value = somme;
    	}
    	//-->
    Donc "$total_chambres" correspond aux dépenses pour une chambre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="somme" name="somme" type="text" size="8" value="<?php echo"$total_chambres";?>">
    Ensuite on demande le nombre de chambres concernées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input onblur="calculTch()" name="nbre_ch" type="text" size="1" value="<?php echo"$nbre_ch";?>">
    Le calcul se fait par par la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!--
    	function calculTch()
    	{
    	var total_tchambres= document.getElementById("formulaire").elements["nbre_ch"].value * document.getElementById("formulaire").elements["total_chambres"].value;
    	document.getElementById("formulaire").elements["total_tchambres"].value=total_tchambres;
    	}
    	//-->
    On multiplie "$total_chambres" par "$nbre_ch".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="total_chambres" value="<?php echo"$total_chambres";?>" size="20" onblur="calculTch()">
    On affiche le résultat total pour toutes les chambres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="total_tchambres" name="total_tchambres" type="text" size="8" value="<?php echo"$total_tchambres";?>">
    Le problème c'est que le calcul se fait automatiquement mais sur la valeur enregistrée dans la base de donnée "$total_chambres" et non sur le résultat de "somme" qui est le résultat du calcul automatique.
    Donc je cherche un solution pour afficher automatiquement le total pour toutes la chambres quand on entre le nombre de chambres.
    En tout cas merci pour vos réponses et surtout pour votre patience.

  13. #13
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    C'est étrange car vous avez déjà un exemple dans votre fonction calculTch(). Comme j'ai essayé de vous le dire, dans votre fonction sum_elements(), vous devez remplacer la dernière ligne :

    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("formulaire").elements["total_chambres"].value = somme;

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Oui, nous avions compris, mais le calcul se fait sur $total_chambres,c'est à dire sur la valeur enregistrée dans la BD.
    Si on modifie cette somme sur le formulaire sans enregistrer le calcul ne se fait pas sur cette nouvelle somme.
    C'est pour cette raison que nous pensions utiliser le résultat "somme" de la fonction plutôt que $total_chambres.

    C'est également pour cette raison que nous avons essayé de récupérer la variable javascript en php. Mais nous n'y somme pas arrivé.

  15. #15
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Je n'ai toujours pas compris.

    Si vous faites une alert sur la variable somme avant de quitter la fonction, vous obtenez le résultat que vous escomptiez ?

    Si oui, ce résultat, que désirez-vous en faire ? Le mettre dans un champ à l'écran ? Le récupérer du côté serveur (pour éventuellement l'enregistrer en DB) ?

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    En fait nous voulons multiplier "somme" par le nombre de chambres pour avoir la somme totale et l'enregistrer.

  17. #17
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Que contient le champs "total_chambres" alors ?

    Car ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var total_tchambres= document.getElementById("formulaire").elements["nbre_ch"].value * document.getElementById("formulaire").elements["total_chambres"].value;
    vous l'utilisez dans votre produit. Or vous me dites que vous voulez que ce soit le résultat de somme. Donc je vous ai proposé de mettre somme dans ce champ mais apparemment, ce n'est pas ce que vous cherchez.

  18. #18
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    total_chambres contient "somme" qui est le résultat pour 1 chambre et enregistré sous ce nom. Nous voulons multiplier ce résultat par le nombre de chambres pour avoir le coût total "total_tchambres".

  19. #19
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Mais. C'est ce que fait calculTch(). A part peut-être un parsing, si les valeurs sont bonnes, le calcul est fait.

    Vérifiez les valeurs avant de les multiplier.
    Vérifier le produit avant de le mettre dans "total_tchambres".

  20. #20
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Oui, bien sur le calcul se fait mais sur $total_chambres, c'est à dire sur la valeur enregistrée dans la base de donnée et affichée. Le calcul ne se fait pas quand celui-ci est actualisé par la fonction "sum_elements".

    Exemple:
    total_chambres est à 60 ,
    nbre_ch est à 3,
    total_tchambres est à 180,
    Très bien, j'enregistre.
    J'affiche de nouveau le formulaire les champs s'affiche avec ces valeurs.
    Si je modifie total_chambres à 80 et nbre_ch à 3, total_tchambres affiche 180 alors que je devrais avoir 240.

Discussions similaires

  1. calcul automatique javascript
    Par groskanel dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2011, 17h29
  2. effectuer un calculs automatique??
    Par annajoul dans le forum Access
    Réponses: 1
    Dernier message: 30/05/2006, 10h41
  3. CEdit et calcul automatique d'une expression réelle
    Par youngkoolboy dans le forum MFC
    Réponses: 8
    Dernier message: 03/05/2006, 19h38
  4. [VBA-E] calculs automatique sur une seule feuille
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/03/2006, 11h53
  5. Faire des calculs automatiques en JavaScript
    Par yoyot dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2005, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo