[resolu]calcul d'une somme avec plusieurs INPUT

calcul d'une somme avec plusieurs INPUT [resolu] - PHP - Programmation

Marsh Posté le 23-03-2007 à 17:20:39    

Bonjour à tous,  
 
Je n'ai encore jamais fait en PHP, pourriez-vous m'éclairer?
 
j'ai une boucle d'INPUT de ce genre :  

Code :
  1. <input type="checkbox" value="<?=$res->opt_prix?>"><?=$res->opt_nom?>


J'ai une ligne avec marqué TOTAL. En face de ce total je souhaite calculer le total de mes options. Si l'option, mon total prend la valeur de l'ensemble des INPUT cochés.
 
Vous voyez?
 
Merci d'avance
jennifer


Message édité par jenny50 le 27-03-2007 à 17:27:58
Reply

Marsh Posté le 23-03-2007 à 17:20:39   

Reply

Marsh Posté le 25-03-2007 à 16:17:31    

Si ton total ne doit pas être mis à jour, alors un simple calcul php fera l'affaire...
 
avant le premier <input> tu initialises une variable :

Code :
  1. $total = 0;


 
et après chaque <input> :

Code :
  1. <input type="checkbox" value="<?=$res->opt_prix?>"><?=$res->opt_nom?><?php $total += $res->opt_prix; ?>


 
et à la fin, tu affiches le total :

Code :
  1. echo "<p>Total :".$total."</p>";


 
Maintenant si le fait de changer (coté client) des valeurs doit modifier le total, c'est un poil plus complexe parce que tu dois y mettre du javascript.

Reply

Marsh Posté le 27-03-2007 à 11:38:51    

merci pour cette solution mais effectivement si l'internaute coche le input, le total doit changer.
 
Comment je fais?

Reply

Marsh Posté le 27-03-2007 à 11:47:08    

NewsletTux a écrit :

Maintenant si le fait de changer (coté client) des valeurs doit modifier le total, c'est un poil plus complexe parce que tu dois y mettre du javascript.


Bin Newslettux tu l'as déjà expliqué [:spamafote]

Reply

Marsh Posté le 27-03-2007 à 14:09:14    

bin tu rajoutes à ola fin de ton formulaire un champ :

Code :
  1. <p>Total :<input type="text" id="total" name="total" value=""></p>


 
et sur chaque <input> tu mets un élément onclick :

Code :
  1. <input type="checkbox" value="<?=$res->opt_prix?>"><?=$res->opt_nom?><?php $total += $res->opt_prix; ?>


devient :

Code :
  1. <input type="checkbox" value="<?=$res->opt_prix?>" onclick="ajoutersomme(<?=$res->opt_prix?> );"><?=$res->opt_nom?><?php $total += $res->opt_prix; ?>


 
puis tu fais une fonction JS dans ton <head> pour effectuer ce traitement :
<script type="text/javascript">
function ajoutersomme(somme)
{
   document.getElementById('total').value += somme;
};
</script>

Reply

Marsh Posté le 27-03-2007 à 14:19:29    

Je viens d'essayer ton code mais j'ai un problème : quand je coche un INPUT d'option il insère bien mon prix d'option dans mon INPUT total mais quand je clique sur un deuxième INPUT d'option il affiche le prix de ma 2ème option à côté de la première.
EN fait il ne fait pas la somme.
 
Où est le problème?

Reply

Marsh Posté le 27-03-2007 à 14:58:07    

le problème est qu'il considère mon prix comme une chaine de caractère et non un entier donc lorsqu'il additionne il affiche les 2 prix (si coché 2 options) côte à côté.
Il ne fait pas une addition.
 
Quelle est la solution?

Reply

Marsh Posté le 27-03-2007 à 15:01:14    

parseInt


Message édité par anapajari le 27-03-2007 à 15:01:28
Reply

Marsh Posté le 27-03-2007 à 15:34:41    

en plus de ne pas calculer, le script ne retient pas la dernière valeur de INPUT total.
 
Avez-vous une solution? Je crains qu'il faille tout reprendre mais je suis dans le flou total.
 
Mon but calculer un montant des options choisis par l'internaute. Il les choisi grâce un des INPUT. Si coché alors ajout du prix au total.

Reply

Marsh Posté le 27-03-2007 à 16:45:42    

OK j'ai trouvé maintenant je souhaite que lorsque l'INPUT n'est pas coché ou lorsque je décoche l'INPUT, il soustrait mon TOTAL.  
 
Voici mon code pour vous éclairez et surtout m'aider :  

Code :
  1. function essai(valeur){
  2. document.getElementById('total').value = valeur + parseInt(document.getElementById('total').value);
  3. }


et dans mon body :  

Code :
  1. <table width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
  2.     <?
  3.     while($res = pg_fetch_object($qry))
  4.      {
  5.     ?>
  6.      <tr>
  7.       <td width="80%">
  8.       <input type="checkbox" name="opt" value="<?=$res->optvn_prix?>" onClick="javascript:essai(<?=$res->optvn_prix?> );"><?=$res->opt_nom?>
  9.       <td width="20%"><?=$res->optvn_prix?>€</td>
  10.      </tr>
  11.     <?
  12.       }
  13.     ?>
  14.      <tr bgcolor="#FFFFCC">
  15.       <td width="80%">TOTAL</td>
  16.       <td width="20%">:<input type="text" id="total" name="total" value="0">€</td>
  17.      </tr>
  18.     </table>

Reply

Marsh Posté le 27-03-2007 à 16:45:42   

Reply

Marsh Posté le 27-03-2007 à 17:11:17    

Code :
  1. function essai(chkObj){
  2.     document.getElementById('total').value += (chkObj.checked*2 - 1) * chkOBj.value;
  3. }


et l'appel:

Code :
  1. <input type="checkbox" ... onClick="essai(this)" ...>


Message édité par anapajari le 27-03-2007 à 17:11:28
Reply

Marsh Posté le 27-03-2007 à 17:13:05    

ah oui, pardon, il se peut que j'aie oublié de typer en entier.
quelque chose comme :

Code :
  1. <script type="text/javascript">
  2. function ajoutersomme(somme)
  3. {
  4.    var ajout = parseInt(somme);
  5.    var totalexistant = parseInt(document.getElementById('total').value);
  6.    totalfinal = totalexistant + ajout;
  7.    document.getElementById('total').value = totalfinal;
  8. };
  9. </script>


suffit-il ?
 
En ce qui concerne la suppression ... C'est un peu plus délicat. En fait il faudrait laisser le total initial à 0 et le mettre à jour dès qu'une checkbox est cochée et envoie sa valeur.
 
En gros dès que tu coches, ça envoie +Lambda et on compte la somme de toutes les cases cochées. et dès que tu décoches, pareil on met à jour le champ total.
un peu de lecture pour ça : http://www.commentcamarche.net/for [...] s-a-cocher
ça te donnera le principe.

Reply

Marsh Posté le 27-03-2007 à 17:16:13    

faut pas oublier le radix sur parseInt sinon 0(1-9) est interprété en octal au lieu d'être en décimal.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed