Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1784 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Actualiser un prix automatiquement suivant la selection d'un poids

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Actualiser un prix automatiquement suivant la selection d'un poids

n°1968870
hppp
Serveur@home
Posté le 24-02-2010 à 12:39:26  profilanswer
 

Salut à tous
 
voilà la fin de mon formulaire pour commencer :

Code :
  1. <label for="conditionnement"><strong>Conditionnement : </strong></label>
  2.     <select name="conditionnement" id="conditionnement">
  3.      <option value="70">70 g</option>
  4.      <option value="130">130 g</option>
  5.      <option value="230">230 g</option>
  6.     </select>
  7.     <label><strong>Quantité : </strong></label><input type="text" name="quantite" value="1" size="3" />
  8.     <?php
  9.     if ($_POST['conditionnement']==70)
  10.     prix=2;
  11.     elseif ($_POST['conditionnement']==130)
  12.     prix=4;
  13.     elseif ($_POST['conditionnement']==230)
  14.     prix=5;
  15.     ?>
  16.     <strong>Prix : </strong><?php echo prix; ?> &euro;
  17.     <input type="submit" name="123" value="Ajouter au Panier" />
  18.     </form>


 
Je voudrais donc en java actualiser le prix automatiquement après que le client est changé le conditionnement du produit sans actualiser la page, mais je ne sais pas du tous comment faire en java, pourriez vous m'aider en m'indiquant quel fonction utiliser? merci de votre aide.

mood
Publicité
Posté le 24-02-2010 à 12:39:26  profilanswer
 

n°1968886
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 24-02-2010 à 13:31:55  profilanswer
 

Java ou Javascript ? Java : ce n'est pas la bonne cat...
 
Javascript : appliquer un "onchange" au select, qui appelle une fonction Javascript.
type onchange="RefreshPrice(this.value)" et dans RefreshPrice un document.getElementbyId('...')


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1968950
hppp
Serveur@home
Posté le 24-02-2010 à 16:09:29  profilanswer
 

NewsletTux a écrit :

Java ou Javascript ? Java : ce n'est pas la bonne cat...
 
Javascript : appliquer un "onchange" au select, qui appelle une fonction Javascript.
type onchange="RefreshPrice(this.value)" et dans RefreshPrice un document.getElementbyId('...')


oui un Javascript désolé.
 
Je vais essayer de regarder ta piste. Merci

n°1968959
hppp
Serveur@home
Posté le 24-02-2010 à 16:55:15  profilanswer
 

Bon j'ai trouvé un petit script simpa :

Code :
  1. // Au départ la valeur est a 2
  2. <input type="text" id="input1" value="2" readonly="readonly" />
  3. // Quand on clique sur le bouton on la multiplie par 2
  4. <input type="button" value="Multiplier par 2" onclick="javascript:document.getElementById('input1').value=document.getElementById('input1').value*2;" />


 
Donc si je l'adapte à moi sa donnerait çà :

Code :
  1. <select name="conditionnement" id="conditionnement" onclick="javascript:document.getElementById('prix-<?php echo $produits_donnees['id']; ?>').value=<?php echo $prix; ?>">


 
Mais sans tester je sais que ça ne marchera pas car la variable $prix n'existe plus une fois la page exécute, alors comment faire?
Je pourais bien modifier la valeur des <select> mais j'ai besoin de connaitre le poids aussi, se qui serait bien c'est d'avoir un value2="" mais je pense pas que sa soit possible. Si vous avez une solution. merci


Message édité par hppp le 24-02-2010 à 16:57:07
n°1968991
lasnoufle
La seule et unique!
Posté le 24-02-2010 à 18:11:37  profilanswer
 

Rien compris ton histoire avec les selects, pour le reste tu peux déclarer une variable Javascript quand ta page est créée et lui affecter une valeur générée par PHP, comme ca tu peux t'en resservir plus tard. Ou alors si tu veux pas la variable Javascript, tu peux faire une balise input de type hidden mais bon ca revient au meme en moins pratique.
 
Ex pour un seul produit, à l'arrache:

Code :
  1. <script>
  2.     var prixUnitaire = <?php echo le prix unitaire?>;
  3.     function updatePrix(source, destID) {
  4.          document.getElementById('destID').value = source.options[source.selectedIndex].value * prixUnitaire;
  5.     }
  6. </script>
  7. ...
  8. <select name="conditionnement" id="conditionnement" onclick="javascript:updatePrix(this,IDDuTrucQuiAfficheLePrix);"> ... </select>


Après si t'as plein de produits, utilise un tableau au lieu d'une seule variable.


---------------
C'était vraiment très intéressant.
n°1969013
hppp
Serveur@home
Posté le 24-02-2010 à 20:01:51  profilanswer
 

lasnoufle a écrit :

Rien compris ton histoire avec les selects, pour le reste tu peux déclarer une variable Javascript quand ta page est créée et lui affecter une valeur générée par PHP, comme ca tu peux t'en resservir plus tard. Ou alors si tu veux pas la variable Javascript, tu peux faire une balise input de type hidden mais bon ca revient au meme en moins pratique.
 
Ex pour un seul produit, à l'arrache:

Code :
  1. <script>
  2.     var prixUnitaire = <?php echo le prix unitaire?>;
  3.     function updatePrix(source, destID) {
  4.          document.getElementById('destID').value = source.options[source.selectedIndex].value * prixUnitaire;
  5.     }
  6. </script>
  7. ...
  8. <select name="conditionnement" id="conditionnement" onclick="javascript:updatePrix(this,IDDuTrucQuiAfficheLePrix);"> ... </select>


Après si t'as plein de produits, utilise un tableau au lieu d'une seule variable.


 
Déjà merci pour ton aide.
Après j'ai essayé de faire ça mais comme je n'ai jamais fais de javascript j'ai un peut de mal :

Code :
  1. <script>
  2. var ttc = new Array(Array);
  3. ttc[1] = new Array(Array);
  4.  ttc[1][70]='1.3';
  5.  ttc[1][130]='2.5';
  6.  ttc[1][230]='5.2';
  7. function updatePrix(source, destID) {
  8.     document.getElementById('destID').value = ttc[1][source.options[source.selectedIndex].value];
  9. }
  10. </script>
  11.     <label for="conditionnement"><strong>Conditionnement : </strong></label>
  12.     <select name="conditionnement" id="conditionnement" onclick="javascript:updatePrix(this,prix-1);" >
  13.        <option value="70">70 g</option>
  14.        <option value="130">130 g</option>
  15.        <option value="230">230 g</option>
  16.       </select>
  17.     </p>
  18.     <p><label><strong>Quantité : </strong></label><input type="text" name="quantite" value="1" size="3" /></p>
  19.     <p id="prix-1"><strong>Prix : </strong>0 &euro;</p>


 
Sa ne marche pas mais je ne comprends pas à quoi sert source.options[source.selectedIndex].value ? merci

n°1969065
lasnoufle
La seule et unique!
Posté le 24-02-2010 à 22:59:53  profilanswer
 

Alors voyons voir.
 
Pour source.options[source.selectedIndex].value, c'est en fait très facile:
- source, tu l'as passé en argument, c'est ton élement <select>,
- source.options[] c'est un tableau contenant toutes les <option> du <select>, premier index à 0, et dans l'ordre où ils sont sur ta page,
- source.selectedIndex c'est une propriété du <select> qui donne l'index de l'option actuellement sélectionnée,
- source.options[source.selectedIndex] t'amène donc à l'élément <option> actuellement sélectionné,
- le .value te fait récupérer sa valeur.
 
Maintenant, rapide correction.
En fait t'as à la fois un prix en fonction du conditionnement, plus une quantité.
Le plus simple dans ton cas, c'est probablement de caser le prix directement dans l'attribut "value" de tes options. Du coup, meme pas besoin de te trimballer le tableau.
Après, la quantité fait un peu chier, faut vérifier que c'est bien un nombre. Mais finalement c'est pas si casse couilles que ca vu que je suppose que c'est censé etre que des entiers positifs.
Ensuite, j'ai déplacé le ID "prix-1" vu que c'est pas tout ton <p> que tu veux rafraichir, sinon tu vas perdre le reste de ton texte.
Enfin, le parametre destID que tu passes à la fonction est censé etre une chaine de caractères -> délimitée par des quotes.

Code :
  1. <script>
  2. // expression régulière pour tester si une chaine de caractères est un entier positif - pas sur de moi là
  3. var RETestPositiveInteger = \d*$/;
  4. function updatePrix(source, quantite, destID) {
  5.  // D'abord, vérifier que la quantité est bien un nombre
  6.  if (RETestPositiveInteger.test(quantite)) {
  7.   // Pas de quotes autour de destID ici, c'est un de tes paramètres, et c'est déjà (normalement) une chaine de catactères.  
  8.   document.getElementById(destID).innerHTML = (source.options[source.selectedIndex].value * quantite) + " &euro;";
  9.  }
  10.  else {
  11.   document.getElementById(destID).innerHTML = "Quantite invalide";
  12.  }
  13. }
  14. </script>
  15.     <label for="conditionnement"><strong>Conditionnement : </strong></label>
  16.     <select name="conditionnement" id="conditionnement" onclick="javascript:updatePrix(this,document.getElementById('quantite').value,'prix-1');" >
  17.        <option value="1.3">70 g</option>
  18.        <option value="2.5">130 g</option>
  19.        <option value="5.2">230 g</option>
  20.       </select>
  21.     </p>
  22.     <p><label><strong>Quantité : </strong></label><input type="text" id="quantite" value="1" size="3" /></p>
  23.     <p><strong>Prix : </strong><span id="prix-1">0 &euro;</span></p>


Bon c'est au pifomètre, dis moi si ca marche. Puis faudrait aussi ajouter quelque chose pour faire rafraichir le prix quand la quantité change dans la zone de texte.


---------------
C'était vraiment très intéressant.
n°1969118
hppp
Serveur@home
Posté le 25-02-2010 à 08:59:52  profilanswer
 

Bon j'essaye de comprendre vos codes en les modifiant etc ...
 
Mais j'ai un problème avec les fonctions, se code marche très bien :
 

Code :
  1. <select name="conditionnement" id="conditionnement" onclick="javascript:document.getElementById('prix-1').innerHTML=4;" >


 
il me change bien la valeur par 4 du prix
 

Code :
  1. <script>
  2.   function updatePrix() {
  3. document.getElementById('prix-1').innerHTML=4;
  4. }
  5. </script>
  6. <select name="conditionnement" id="conditionnement" onclick="javascript:updatePrix();" >


 
mais celui là ne marche pas et je ne comprends pas pourquoi.


Message édité par hppp le 25-02-2010 à 09:03:44
n°1969122
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 25-02-2010 à 09:31:27  profilanswer
 

il ne faut pas dire "ce code ne marche pas" mais "ce code retourne l'erreur XXXXXXX avec le message YYYYY".
Si tu es sous firefox, regarde dans la console Javascript l'erreur produite.
 
Si tu insères ton <script> tel quel, ça ne marche pas parce que à mon avis, quand le navigateur (qui lit le code source de haut en bas) arrive au <script>, il n'a encore rencontré aucun élément dont l'ID vaut "prix-1".
 
essaie de le mettre après le select, ou en fonction JS dans un fichier séparé (et appelé depuis le head de ta page)


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1969135
hppp
Serveur@home
Posté le 25-02-2010 à 10:18:03  profilanswer
 

Ok, la prochaine fois je regarderais la console de firefox.

 

Pour résoudre mon problème j'ai mi des paramètres :

 
Code :
  1. function updatePrix(conditionnement,IdProduit,destID) {
  2. document.getElementById(destID).innerHTML = tab[IdProduit][conditionnement];
  3. }
 

Maintenant que ça marche je voudrais mettre mes poids et prix dans un tableau mais quand je crée le tableau sans php pas de problème :

 
Code :
  1. <script>
  2. tab=new Array();
  3. tab[1]= new Array();
  4. tab[1][70]= 3;
  5. tab[1][130]= 5;
  6. tab[1][230]= 8;
  7. </script>
 

Mais quand je le crée avec php  :

 
Code :
  1. <script>
  2. tab=new Array();
  3. tab[<?php echo $produits_donnees['id']; ?>]= new Array();
  4. tab[<?php echo $produits_donnees['id']; ?>][70]= 3;
  5. tab[<?php echo $produits_donnees['id']; ?>][130]= 5;
  6. tab[<?php echo $produits_donnees['id']; ?>][230]= 8;
  7. </script>
 

- "<?php echo $produits_donnees['id']; ?>" vaut 1

 

firefox me dis Erreur : tab[1] is undefined

 

avec <a href="#" Onclick = "alert(tab[<?php echo $produits_donnees['id']; ?>][130]);"> Test</a>

 

Alors que dans le code source j'ai bien :

 
Code :
  1. tab=new Array();
  2. tab[1]= new Array();
  3. tab[1][70]= 3;
  4. tab[1][130]= 5;
  5. tab[1][230]= 8;
 

La je ne vois pas pourquoi ça ne marche pas? Merci encore de votre aide.


Message édité par hppp le 25-02-2010 à 10:19:03
mood
Publicité
Posté le 25-02-2010 à 10:18:03  profilanswer
 

n°1969136
lasnoufle
La seule et unique!
Posté le 25-02-2010 à 10:19:56  profilanswer
 

NewsletTux a écrit :

il ne faut pas dire "ce code ne marche pas" mais "ce code retourne l'erreur XXXXXXX avec le message YYYYY".
Si tu es sous firefox, regarde dans la console Javascript l'erreur produite.
 
Si tu insères ton <script> tel quel, ça ne marche pas parce que à mon avis, quand le navigateur (qui lit le code source de haut en bas) arrive au <script>, il n'a encore rencontré aucun élément dont l'ID vaut "prix-1".
 
essaie de le mettre après le select, ou en fonction JS dans un fichier séparé (et appelé depuis le head de ta page)


La fonction n'est pas exécutée à sa création, c'est probablement pas un problème d'élément non présent...
Après, le code a l'air bon, donc effectivement, faut regarder l'erreur remontée, de préférence avec Firefox parce que sous IE c'est la plupart du temps incompréhensible.
Autre truc hppp, plutot que de lancer le rafraichissement sur onclick, fais le sur onchange plutot, c'est plus propre.


---------------
C'était vraiment très intéressant.
n°1969137
kao98
...
Posté le 25-02-2010 à 10:21:53  profilanswer
 

Ton tableau, il est déclaré à quel moment dans ta page ? Il est bien global ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1969139
lasnoufle
La seule et unique!
Posté le 25-02-2010 à 10:22:53  profilanswer
 

T'es sur que ca marche avec le premier code?
Je dirais qu'il faut que tu rajoutes le mot clé "var" devant ta première affectation de tab, pour bien définir que c'est une variable globale:
var tab = new Array();


---------------
C'était vraiment très intéressant.
n°1969164
hppp
Serveur@home
Posté le 25-02-2010 à 11:27:47  profilanswer
 

donc j'ai changé par :
 

Code :
  1. ......
  2. <script>
  3. var tab=new Array();
  4. tab[<?php echo $produits_donnees['id']; ?>]= new Array();
  5. tab[<?php echo $produits_donnees['id']; ?>][70]= 3;
  6. tab[<?php echo $produits_donnees['id']; ?>][130]= 5;
  7. tab[<?php echo $produits_donnees['id']; ?>][230]= 8;
  8. </script>
  9. <a href="#" Onclick = "alert(tab[<?php echo $produits_donnees['id']; ?>][130]);"> Test</a>
  10. ......


 
voilà mon script en gros, je le met donc entre les <body>.
 
Mais j'ai toujours l'erreur : Erreur : tab[1] is undefined
 
JavaScript semble pas facile comme langage quand même.
 
Merci de votre aide

n°1969177
lasnoufle
La seule et unique!
Posté le 25-02-2010 à 12:14:15  profilanswer
 

hppp a écrit :

donc j'ai changé par :
 

Code :
  1. ......
  2. <script>
  3. var tab=new Array();
  4. tab[<?php echo $produits_donnees['id']; ?>]= new Array();
  5. tab[<?php echo $produits_donnees['id']; ?>][70]= 3;
  6. tab[<?php echo $produits_donnees['id']; ?>][130]= 5;
  7. tab[<?php echo $produits_donnees['id']; ?>][230]= 8;
  8. </script>
  9. <a href="#" Onclick = "alert(tab[<?php echo $produits_donnees['id']; ?>][130]);"> Test</a>
  10. ......


 
voilà mon script en gros, je le met donc entre les <body>.
 
Mais j'ai toujours l'erreur : Erreur : tab[1] is undefined
 
JavaScript semble pas facile comme langage quand même.
 
Merci de votre aide


Bizarre...
Dans ton navigateur, tu peux afficher le code source de la page (celui que tu recois après le passage de PHP). Menu View -> Source ou un truc dans le genre selon ton navigateur. Peux-tu regarder ca et vérifier que le <script> affecte bien des trucs à tab[1]?
 
Javascript ca pue puissance 1000, c'est pas très compliqué mais le fait que ca soit implémenté différemment par quasiment chaque navigateur fait que c'est la grosse merde. Du code optimisé pour IE marchera pas ou mal sous Firefox, et vice versa; la gestion de la mémoire est pourrie au possible quelque soit le navigateur, tu te retrouves souvent à faire de l'optimisation "technique", donc casse couilles et pas intéressant (pour moi), etc, etc.  
 
Par contre, les résultats que tu peux obtenir avec, ca dépote.


---------------
C'était vraiment très intéressant.
n°1969179
hppp
Serveur@home
Posté le 25-02-2010 à 12:19:40  profilanswer
 

Voilà le code source après le php :
 

Code :
  1. <script language="javascript">
  2. var tab=new Array();
  3. tab[1]= new Array();
  4. tab[1][70]= 3;
  5. tab[1][130]= 5;
  6. tab[1][230]= 8;
  7. </script>
  8. <p><a href="#" Onclick = "alert(tab[1][130]);"> Les Produits</a></p>


 
Et y a rien de mieux que le java alors? Merci

n°1969185
lasnoufle
La seule et unique!
Posté le 25-02-2010 à 12:32:07  profilanswer
 

hppp a écrit :

Voilà le code source après le php :

 
Code :
  1. <script language="javascript">
  2. var tab=new Array();
  3. tab[1]= new Array();
  4. tab[1][70]= 3;
  5. tab[1][130]= 5;
  6. tab[1][230]= 8;
  7. </script>
  8. <p><a href="#" Onclick = "alert(tab[1][130]);"> Les Produits</a></p>
 

Et y a rien de mieux que le java alors? Merci


Mwai c'est vraiment bizarre ton truc. A priori ca devrait marcher tranquille. Y'a un numéro de ligne avec ton erreur? Y a nulle part d'autre sur ta page ou tu essayes de taper dans le tableau?
Si c'est pas encore le cas, fais une page de test avec le minimum, juste ca dans une balise <body> et c'est tout, et regarde si ca plante toujours.
Je suppose que y'a pas moyen qu'on accède à ta page de test en live?

 

Et sinon, Java != Javascript, et pour faire des trucs coté client, je connais que Javascript. P'tetre Flash mais j'y connais rien.


Message édité par lasnoufle le 25-02-2010 à 12:32:30

---------------
C'était vraiment très intéressant.
n°1969190
hppp
Serveur@home
Posté le 25-02-2010 à 12:46:28  profilanswer
 

Bon sa marche dans une page à part donc je vais regarder pourquoi ça bug.
 
Merci encore.

n°1969655
hppp
Serveur@home
Posté le 26-02-2010 à 12:03:03  profilanswer
 

Bon, tous marche super bien, déjà merci mais j'ai un petit problème.
 
Sur certain calcule j'ai par exemple 8.3400000003 et je voudrais qu'il arrondisse au nombre supérieur donc 8.35 mais je ne sais pas comment faire en javascript.
 
Merci

n°1969714
lasnoufle
La seule et unique!
Posté le 26-02-2010 à 15:27:41  profilanswer
 

Roh bah quand meme, cherche un peu dans d'la doc, c'est facile à trouver.
Math.round(8.3400000003); te renverra 8.
Math.round(8.3400000003*100)/100; te renverra 8.34.


---------------
C'était vraiment très intéressant.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Actualiser un prix automatiquement suivant la selection d'un poids

 

Sujets relatifs
selection d'une plage dans une feuille non activeSelection element liste identique
Requete SQL de selection complexeSelection, tri tableau
[PDO/SQL] Aide selection et classement (JOIN ??)redimensionner automatiquement des images issues d'un XML
JGraph et selection celluleRTE et comportements différents suivant les navigateurs
Aide sur petit tableau de calcul de prixSélection d'un noeud d'un JTree avec un button.
Plus de sujets relatifs à : Actualiser un prix automatiquement suivant la selection d'un poids


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR