Mise à jour instantanée

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mise à jour instantanée

par FuZZyLine » 29 juil. 2009, 15:12

Salut,
oui, à la rigueur...le javascript...donne le prix de la commande à l'utilisateur...
et ensuite quand il clique sur envoyer...php recalculera le tout...et enverra le mail...
les prix seront fixe, avec l'utilisateur n'aura pas la possibilité de modifier les prix...juste
la quantités souhaité...
[2]par contre niveau JS...je connais pas grand chose!!
[1]et pour les histoire de sessions;..je vois pas comment tu veux les utiliser...je ne
compte pas utilisé de BDD...les prix seront fixer "en dur" dans le code...
merci d'ores et déjà pour vos réponse :)
1) Les sessions ne sont pas obligatoirement liées aux BD et heureusement ;)

2) Ca va peut-être te mettre le pieds à l'étrier ...ou pas t'interresser du tout :

Ce script est tout bête, la sécurité n'est pas gérée, il n'est pas (biensur) compatible w3,
le code est moche; aucun doctype ou meta et quand à la compatibilité html/xhtml...
mais ca te donne une idée de que tu peux faire avec JS.
Le style de développement est facile, rapide et... tu es suivi pas à pas dans le codage si tu
utilises FF et FireBug:

Testé sous FF, Mozilla et IE6 pour te dire qu'il n'est pas difficile de développer sous multi-Browser ;)

Code : Tout sélectionner

<html> <head> <script langage="javascript"> <!-- var prod = Array(); prod[0] = new ProduitClass("huitre"); prod[1] = new ProduitClass("sardine"); prod[2] = new ProduitClass("crabe"); prod[3] = new ProduitClass("truite"); function ProduitClass(strName) { this.name = strName == undefined ? "Unknow" : strName; this.number = 0; this.addProd = function(obj) { this.number++; var iCount = prod.length; var num = 0; document.getElementById("unit_"+this.getName()).innerHTML = this.number; for(var i=0; i<iCount; i++) { num += prod[i].count(); } document.getElementById("capture").innerHTML = num; } this.delProd = function() { this.number--; if (this.number < 0) this.number = 0; } this.count = function() { return this.number; } this.getName = function() { return this.name; } this.ren = function(strName) { return this.name = strName; } } --> </script> </head> <body> Nombre de produits : <span id="capture">0</span>. <br /><br /> Ajouter <a id="huitre" href="#" onClick="javascript:prod[0].addProd(this);">Huitre</a> (<span id="unit_huitre">0</span>)<br /> Ajouter <a id="sardine" href="#" onClick="javascript:prod[1].addProd(this);">Sardinne</a> (<span id="unit_sardine">0</span>)<br /> Ajouter <a id="crabe" href="#" onClick="javascript:prod[2].addProd(this);">Crabe</a> (<span id="unit_crabe">0</span>)<br /> Ajouter <a id="truite" href="#" onClick="javascript:prod[3].addProd(this);">Truite</a> (<span id="unit_truite">0</span>)<br /> </body> </html>
Le script JS, lui-même, est bon mais ce qui l'entoure ne l'est pas hein, alors à toi de jouer si tu souhaites l'utiliser. (et ...si c'est le cas merci de le préciser)

@+ bon code ;)

EDIT: Désolé Ryle t'as posté juste quand je finalisais... ;)

par Ryle » 29 juil. 2009, 14:17

Bah y a pas grand chose à connaitre en js pour répondre à ton besoin... il existe de nombreuses façons de faire, en voici une :)

Je déclare 3 champs dans un formulaire :
- Le prix unitaire en lecture seule (mais je peux tout aussi bien le mettre en hidden ou aller chercher l'info ailleurs en js)
- Le champ de saisie de la quantité. Je spécifie que lorsque l'utilisateur quitte ce champ (onblur) j'appelle une fonction javascript calculPrix().
- Le champ dans lequel j'affiche le prix (en lecture seule également)
<form name="monFormulaire" ...>
  <input type="text" name="prix_unitaire" value="15" readonly="readonly" />
  <input type="text" name="quantite" value="" onblur="calculPrix();" />
  <input type="text" name="prix_total" value="" readonly="readonly" />
</form>
Il ne reste plus qu'à définir ce que fait la fonction :
<script type="text/javascript">
function calculPrix() {
  // je récupère les valeurs renseignées dans les champs (ce sera plus explicite) :
  var prixUnitaire = document.monFormulaire.prix_unitaire.value; // dans la page (document), le formulaire nommé "monFormulaire", 
// dans lequel je vais chercher le champ "prix_unitaire", pour lequel je demande de récupérer la valeur de l'attribut value (et donc la valeur saisie)
  var qte = document.monFormulaire.qte.value;

  // je fais mon calcul :
  var prix = prix_unitaire * qte;

  // je met le résultat dans le champ qui va bien :
  document.monFormulaire.prix.value = prix;
}
</script>
et le tour est joué :)

Bon après, tu auras à loisir de gérer la possibilité d'avoir plusieurs produits (donc plusieurs prix, qté, ...), le fait de passer des arguments à ta fonction, les cas ou ton visiteur va taper du texte au lieu d'un nombre, etc. Mais basiquement c'est pas plus compliqué que ça :)

par J-Nicolas » 29 juil. 2009, 13:20

Je conseille aussi le javascript, parce que c'est le plus simple à mettre en place. Les autres solutions ne sont à envisager que s'il y a un très grand nombre de variables.

par Freddo31 » 29 juil. 2009, 12:38

oui, à la rigueur...le javascript...donne le prix de la commande à l'utilisateur...
et ensuite quand il clique sur envoyer...php recalculera le tout...et enverra le mail...

les prix seront fixe, avec l'utilisateur n'aura pas la possibilité de modifier les prix...juste la quantités souhaité...

par contre niveau JS...je connais pas grand chose!!
et pour les histoire de sessions;..je vois pas comment tu veux les utiliser...je ne compte pas utilisé de BDD...les prix seront fixer "en dur" dans le code...

merci d'ores et déjà pour vos réponse :)

Re: Mise à jour instantanée

par FuZZyLine » 29 juil. 2009, 09:22

Salut,
Salut tout le monde!
avant de me lancer dans mon projet...je souhaites savoir une petite chose...
c'est pour un jeu, dans le but de prendre des "commandes", on souhaiterai avoir une sorte de bon de commande online...dans ce bon de commande on aurait divers encadré (des form je pense) avec le nom du module à commandé, avec son prix, et puis a côté, une case avec le nombre de module que le client souhaite commander!
ce que j'aimerais c'est que suivant le nombre de module qu'il commande, le prix bouge [*]instantanément au bas de la page...de façon à ce qu'il voit à combien il en est à tout moment, sans avoir à cliquer sur un bouton...
le seul bouton que je souhaiterais serait juste un "envoyer" de façon à ce que je reçoive un mail me récapitulant toute la commande!!!
'sachant que pour le mail, je maîtrise à peu près la fonction mail() :-) )
voila, merci de votre aide
[*] Cette demande précise ne peut être traitée qu'en JS.

Mais si tu souhaite passer par le serveur et non un traitement JS essaie de voir du côté des sessions.
Se me semble être la manière la plus simple et surtout plus la rapide afin de solutionner ce cas.

petit exemple assez parlant:

$post = $_POST;

if (!isset($_SESSION[commande]) $_SESSION[commande] = Array();

// Dans un cas pareil j'aime bien tout établir à l'avance et donc (en ce cas)
// qu'un produit soit ou non présent en commande je le noterait if (false) prod_X = 0;
// ca bouffe 1 minimum de ressources ('fin...) mais ca évite quelque tests
.
.
if ($post[commande] == CHOIX_pack_1) $_SESSION[commande][pack_1] += QUANTITE
if ($post[commande] == CHOIX_pack_2) $_SESSION[commande][pack_3] += QUANTITE
.
.
Tu as le nom du produit en commande, la quantité et dans ton script (j'imagine) le prix de chaque produit à l'unité. Me semble jouable ainsi.

Bon code @+ ;)

par Ryle » 29 juil. 2009, 00:00

Moui.. ajax est une solution... on peut aussi envisager un webservice avec des échanges de flux xml et une percolation de matrice logiques... ou pas se prendre la tête et faire ça tout bêtement avec 2 lignes de javascript ;)

Plus sérieusement, pour réaliser des actions côté client, c'est effectivement du javascript qu'il va te falloir utiliser. Maintenant si tu as un prix de base et que l'utilisateur doit juste renseigner une quantité, le calcul en javascript prix x qté n'a rien de sorcier...

Je te recommande tout de même de refaire le calcul en php lorsque l'utilisateur valide sa commande, parce que le javascript, ça peut se bricoler :roll: Mais au moins comme ça, tu donnes du confort à ton utilisateur qui a une idée du montant en direct (et s'il tente de le changer, bah de toute façon tu le recalcule ensuite ;))

par Yosh » 28 juil. 2009, 23:06

Il va te falloir regarder du côté de l'AJAX pour faire ce que tu veux.

http://www.xul.fr/xml-ajax.html

Mise à jour instantanée

par Freddo31 » 28 juil. 2009, 21:18

Salut tout le monde!
avant de me lancer dans mon projet...je souhaites savoir une petite chose...

c'est pour un jeu, dans le but de prendre des "commandes", on souhaiterai avoir une sorte de bon de commande online...dans ce bon de commande on aurait divers encadré (des form je pense) avec le nom du module à commandé, avec son prix, et puis a côté, une case avec le nombre de module que le client souhaite commander!

ce que j'aimerais c'est que suivant le nombre de module qu'il commande, le prix bouge instantanément au bas de la page...de façon à ce qu'il voit à combien il en est à tout moment, sans avoir à cliquer sur un bouton...
le seul bouton que je souhaiterais serait juste un "envoyer" de façon à ce que je reçoive un mail me récapitulant toute la commande!!!
'sachant que pour le mail, je maîtrise à peu près la fonction mail() :-) )

voila, merci de votre aide