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 :

Faire un calcul dans un champ du formulaire


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut Faire un calcul dans un champ du formulaire
    Salut à tous,
    j'ai un p'tit soucis ...
    j'ai 3 champs au niveau de mon formulaire :
    1-Numero Produit(chargé au prés de la base de données sous forme d'un bouton select)
    2-Prix Unitaire/kg(par defaut = 0.5 euro par exemple)
    3-Montant à payer(poid * Prix unitaire)

    Donc je veux au niveau de 3éme champ afficher le montant à payer à l'aide de cette requéte :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $req=$bdd->prepare('select * from Produit');
    while($donnees=$req->fetch())
    {
    $montant=0.5 *$donnees['Poid']; ?>
    j'ai essayé cette proposition mais toujours elle affiche le montant de dernier numero produit mais je veux lorsque je sélectionne un produit quelconque le montant s'affichera donc en fonction du numero de produit à sélectionner .......

    par exemple pn a 10 numero de produit 1-->10
    je veux lorsque je choisi le produit numero 1 automatiquement le montant s'affiche au niveau de l'attribut "value" du champ montant ...
    .. merci d'avancE

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir,

    Je ne vois pas le rapport avec JS, vue que tu nous montres que du code php

    A+.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    Salut , je vais expliquer mon probléme :

    j'ai un champ nommé numéro de produit sous forme d'un "SELECT"(qui se charge de la base par exemple 1-->10)
    si je sélectionne un numéro de produit quelconque ,un calcul se fait automatiquement dans un champ nommé montant, pour cela beaucoup de mes amis m'ont dit que la solution est avec le JS puisque il s'agit d'un évenement (selection), le montant est calculé sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $req=$bdd->prepare('select * from Produit');
    while($donnees=$req->fetch())
    {
    $montant=0.5 *$donnees['Poid']; ?>
    //suite des instructions du formulaire
    avec 0.5 c'est le prix unitaire par kg du produit ...
    j'espére que vous avez compris mon soucis ...et merci

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonsoir,

    Je ne vois pas le rapport avec JS, vue que tu nous montres que du code php

    A+.
    reste valable...

    sinon, sur l'événement onchange du SELECT tu récupères la value sélectionnée et tu fais ton calcul, mais sans une amorce de code...

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je ne vois pas le rapport avec JS

    mais déjà en php ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $req=$bdd->prepare('select 0.5 * Poid As Price, * from Produit');
    while($donnees=$req->fetch())
    {
      echo $donnees['Price']; ?>
    A+JYT

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    @sekaijin
    j'ai essayé avec ta proposition ..mais sans succés elle affiche toujours le méme montant c'est le montant de dernier produit existe à la base , j'ai amélioré un peu le code et j'ai fait une condition mais dans ce cas rien ne s'affiche
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    <form name="pdt">
    <table><tr><td>Numero Produit</td>
    <td ><select name="numt" size="1" id="num">
            <?php
            include("cnx.php");
            $req=$bdd->prepare('select * from Produit ');
            $req->execute();
            while($rst=$req->fetch())
            {
     
            ?>
    	<option  value="<?php echo $rst['Num_Produit'];?> "><?php echo $rst['Num_Produit'];?> </option><br />
        <?php
            }
            ?>
    	</select>
     
    	 ;</td>
      </tr>
     
    <tr>
        <td >Montant </td>
        <td > <?php
    $req=$bdd->prepare('select 0.5 * Poid As Price  from Produit where Num_Produit=?');
    $req->execute(array($rst['Num_Produit']));
    $donnees=$req->fetch();
     
    ?><input name="montant" type="text" id="montant"  size="20" value=" <?php echo $donnees['Price']; ?>"/>
          </td>
      </tr>
    </table>
    </form>
    ?>
    @NoSmoking
    je suis presque sùr que la solution est avec l'évenement onChange mais le problème je n'ai pas pu rédiger la fonction relative à l'évenement onChange ...
    j'espére que vous pouvez m'aider et merci d'avanCe

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    pourrais tu nous fournir le code HTML généré et non le PHP, de la partie mise en cause, c'est cela que signifie...
    Je ne vois pas le rapport avec JS, vue que tu nous montres que du code php

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    c'est le méme code précedent mais avec l'entéte ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" media="screen" type="text/css" title="design" href="design.css" />
    <title>Document sans nom</title>
     
    </head>
     
    <body>
     
    <form method="post" name="pdt" action="cible5.php" >
    <table><tr><td>Numero Produit</td>
    <td ><select name="num" size="1" id="num">
      	<?php
            include("cnx.php");
            $req=$bdd->prepare('select * from Produit ');
            $req->execute();
            while($rst=$req->fetch())
            {
     
            ?>
    	<option  value="<?php echo $rst['Num_Produit'];?> "><?php echo $rst['Num_Produit'];?> </option><br />
        <?php
            }
            ?>
    	</select>
     
    	 ;</td>
      </tr>
     
    <tr>
        <td >Montant </td>
        <td > <?php
    $req=$bdd->prepare('select 0.5 * Poid As Price  from Produit where Num_Produit=?');
    $req->execute(array($rst['Num_Produit']));
    $donnees=$req->fetch();
     
    ?><input name="montant" type="text" id="montant"  size="20" value=" <?php echo $donnees['Price']; ?>"/>
          </td>
      </tr>
    </table>
     
     
     
    <BR>
    <table width="387" border="0" align="left" cellpadding="0">
      <tr>
        <td width="169"><p align="right">&nbsp;
                <input name="effacer" type="reset" id="effacer" value="  Effacer  " />
        </p></td>
        <td width="212"><div align="center">
          <input name="enregistrer" type="submit" value="Enregistrer" />
        </div></td>
      </tr>
    </table>
     
    </form>
    </body>
    </html>

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Citation Envoyé par goldray Voir le message
    c'est le méme code précedent mais avec l'entéte ...
    NON, il faut regarder le code HTML généré, tu lances la page dans ton navigateur, tu cliques droit, tu sélectionnes code source de la page, ou un truc dans ce style, c'est ce code qui nous intéresse.

    Accessoirement, pas tant que cela d'ailleurs, cela permet de vérifier que le code est bien constitué est correspond bien à l'attente...

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" media="screen" type="text/css" title="design" href="design.css" />
    <title>Document sans nom</title>
     
    </head>
     
    <body>
     
    <form method="post" name="pdt" action="cible5.php" >
    <table >
      <tr>
        <td >Numero Produit</td>
     
        <td ><select name="num" size="1" id="num">
      		<option  value="1">1 </option><br />
        	<option  value="2">2 </option><br />
        	<option  value="3">3 </option><br />
        	<option  value="4">4</option><br />
        	</select>
    	</td>
     
      </tr>
     
      <tr>
        <td >Prix Unitaire</td>
        <td ><input name="prix_unitaire" type="text" id="prix_unitaire" value="0.5" size="20" />
     
          </td>
      </tr>
    <tr>
        <td >Montant</td>
        <td > <input name="montant" type="text" id="montant"  size="20" value=" "/>
       </td>
     
      </tr>
     
     
     
    </table>
     
     
    <BR>
    <table>
      <tr>
        <td ><p align="right">&nbsp;
     
                <input name="effacer" type="reset"  id="effacer" value="  Effacer  " />
        </p></td>
        <td >
          <input name="enregistrer" type="submit" value="Enregistrer" />
       </td>
      </tr>
    </table>
     
     
     
    </form>
     
    </body>
     
    </html>
    voila le code source

  11. #11
    Expert confirmé
    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 : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Vous vous enflammez vite les gens, on n'a pas besoin du code source de ce monsieur pour lui apporter une réponse. Il suffit de comprendre ce qu'il n'a pas compris…

    Goldray, je pense que ce que tu n'as pas compris c'est la complexité des mécanismes qui permettent de communiquer entre PHP et JS.
    Premièrement, considère que ton serveur ne sait envoyer que du texte. Le code HTML ? Du texte. Le code JS ? Du texte. Tout ceci ne prend un sens que lorsque ça arrive dans un navigateur côté client. Et bien sûr, coté client, il n'y a pas de PHP.

    Deuxièmement, quand la page est entièrement arrivée côté client, elle « oublie » l'existence du serveur. Il faut user de moyens artificiels (un formulaire ou une requête Ajax) pour rouvrir une communication avec ce serveur.

    Pose-toi la question : comment tu veux précisément que ta page se comporte ? Corrige-moi si je me trompe, récupérer les données de poids de tes produits est le cœur du problème. Tu as le choix :
    – Envoyer toutes les données de poids au chargement de la page. Tu peux les générer dans des input type hidden ou dans du code JavaScript. J'ai bien dit générer. Dans ce cas, plus besoin du serveur (une fois que la page a fini de charger), tout se fait en JavaScript.
    – Utiliser un formulaire HTML classique, ce qui impose un rechargement de la page à chaque action, que ce soit par un clic sur le bouton submit, ou par un submit déclenché par JS lors de l'évènement onchange de ton select (j'espère que tu me suis toujours ).
    – Utiliser Ajax, c'est-à-dire faire une requête JS sans recharger la page, mais cela suppose d'adapter un peu ton code PHP.

    Réfléchis à tout ça, et reviens nous poser des questions quand elles seront plus précises
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    @Watilin
    merci pour votre explication
    à propos je sais que le JS on utilise seulment de coté client et ce dernier comprend seulment le HTML(les vitrines) et que le php est utilisé par le serveur pour la génerations des page ...
    pour le poid de produit c'est facile de l'avoir , juste avec une simple requete on le récuppére depuis notre table produit ...
    le problème je cherche juste un outil qui me permet de quelque soit le numéro de produit sélectionné automatiquement le champ montant sera rempli au niveau de l'interface !!!!!!je dis bien au niveau de formulaire c.a.d l'utilisateur de l'interface va voir tout ça !! donc je crois soit l'évenement onClik soit onChange peuvent résoudre mon problème puisque tous données qu'on besoins seront chargé à l'aide de php depuis la BD !!!
    j'ai trouvé par hasard une solution à mon problème avec XHR(XMLHTTPREQUEST) mais cette solution est difficile à comprendre ...
    je vais re_expliquer mon problème :
    supposant que tous les données existent au niveau des input !!!
    je veux lorsque je selectionne un numéro par hasard automatiquement au niveau de champ montant s'affiche le montant relative à ce produit !!
    je crois pas c'est simple mais peut étre que vous n'avez pas bien compris mon soucis ..dans tout les cas j'espére que vous pouvez m'aider
    et merci d'avance à tous

  13. #13
    Expert confirmé
    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 : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    XHR c'est Ajax
    Mais si toutes les données existent au niveau des input, tu n'en as pas besoin.

    Voilà un petit exemple pour éclarcir les choses :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <head>
    <script>
     
    function majTotal( value ) {
            var prixUnitaire = document.getElementById('prix_unitaire').value;
            var poids = document.getElementById('poids_' + value).value;
            document.getElementById('total').value = poids * prixUnitaire;
    }
     
    </script>
    </head>
    <body>
     
    <select name="num" size="1" id="num" onchange="majTotal(this.value)">
    	<option value="1">1</option>
        	<option value="2">2</option>
        	<option value="3">3</option>
        	<option value="4">4</option>
    </select>
     
    <input name="prix_unitaire" type="text" id="prix_unitaire" value="0.5" size="20" />
     
    <input type="text" readonly="readonly" name="total" id="total" value="" />
     
    <input type="hidden" name="poids_1" id="poids_1" value="14" />
    <input type="hidden" name="poids_2" id="poids_2" value="8" />
    <input type="hidden" name="poids_3" id="poids_3" value="50" />
    <input type="hidden" name="poids_4" id="poids_4" value="24" />
     
    </body>
    </html>

    Est-ce que cela te convient ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Salut à tous, que dire de plus si ce n'est que le code généré confirme ce que je craignais à savoir aucune action pour le calcul.
    Citation Envoyé par NoSmoking Voir le message
    ...
    sinon, sur l'événement onchange du SELECT tu récupères la value sélectionnée et tu fais ton calcul, mais sans une amorce de code...
    L'exemple de Watilin associé à ses explications devrait d'aider à résoudre ton problème.

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    @Watilin
    merci bien pour ta proposition ..mais je crois que tu as mal compris qu'est ce que ...
    1érement, je poséde un champ nommé poid au niveau de formulaire mais on récuppére les poids à l'aide d'un requete sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php $req=$bdd->prepare('select  Poid_Olive  from lot_olive ');
    $req->execute();
    $donnees=$req->fetch(); ?>
    mais il faut ajouter une condition à cette requéte pour qu'elle renvoie chaque poid relative au numéro de produit sélectionné !!
    bien sue j'ai pas dit que ta propostion est fausse mais elle ne marche dans mon cas ...
    voici une question trés important si la réponse sera vraie donc on pourra trouvé la solution :
    Est ce que avec le JS on peux sélectionner un numéro à l'aide de SELECT et aprés cette selection le champ montant qui est initialement vide va contenir le montant relatif à ce numéro et si on sélectionne un autre numéro de méme le montant sera relative à ce dernier ??
    pour mieux comprendre mon soucis voici un exemple :
    http://nayi.free.fr/dev/ajax/XMLHttpRequest_getList.php

    et merci

  16. #16
    Expert confirmé
    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 : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Yeah.
    Pour résumer tout ça en une phrase : tu as choisi la solution Ajax. Du coup ton problème devient tout à fait classique :
    1. l'évènement onchange déclenche une requête Ajax (XHR) vers une script PHP (côté serveur) prévu pour ça, avec la valeur du select en paramètre GET ou POST ;
    2. ce script PHP fait une requête SQL avec le paramètre récupéré ;
    3. toujours ce même script PHP traite les résultats et renvoie le montant vers le client ;
    4. à l'aide d'une fonction de rappel, le JavaScript du client récupère le montant et met à jour les champs.

    Tu as tous les éléments en main, il ne te reste plus qu'à te documenter sur Ajax. C'est un problème sans difficulté, c'est à toi de le faire !
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Test et calcul dans un champ de formulaire
    Par bandit3364 dans le forum IHM
    Réponses: 11
    Dernier message: 30/06/2013, 15h24
  2. [AC-2010] Récuperer un total dans une requête pour faire un calcul dans un champ
    Par infoprev dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 20/02/2012, 09h07
  3. Réponses: 2
    Dernier message: 22/05/2007, 16h15
  4. Réponses: 7
    Dernier message: 22/08/2006, 16h01
  5. Calcul dans un champ de formulaire
    Par Marmouz dans le forum Access
    Réponses: 6
    Dernier message: 07/02/2006, 11h55

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