Pb calcul d'une commande

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 : Pb calcul d'une commande

par velsy » 31 mai 2006, 11:33

Merci, d'accord, je vais aller voir sur un forum javascript et je te tiens au courant si j'y arrive, encore merci pour ton précieux coup de main. :D

par guilt92 » 31 mai 2006, 11:26

Je ne suis pas spécialiste Javascript non plus mais ceci dit il y a quelques détails :

Code : Tout sélectionner

document.getElementById("qt_plateau");
Le problème ici est que comme tu fais ceci dans une boucle while() tu auras plusieurs champs avec le même nom, il faudrait à la rigueur les nommer à chaque fois avec un identifiant uniquement par exemple une variable i qui s'incrémente à chaque fois et que tu récupères en paramètres :

<name="qte_plateau<?php echo $i;?>" onchange="update(<?php echo $i;?>)">
(je suis pas sur que ca fonctionne mais je pense que si).

Ensuite pour le window.location="commander.php?valeur="total; je ne pense pas que cela doivent etre déclenché dès que l'utilisateur change une quantité puisque justement il peut en changer plusieurs, il faudrait uniquement avoir dans ton formulaire une case total dont tu ferais :

Code : Tout sélectionner

var total=document.getElementById("total"); total.value=...
Ceci dit je ne suis pas sûr d'être assez qualifié pour t'aider, tu devrais peut etre poser la question dans le forum javascript en demandant comment faire évoluer la valeur du Total dynamiquement à chaque modification d'une des cases, peut etre que ma solution est trop compliquée ou inadaptée :s

par velsy » 31 mai 2006, 11:12

Ok je suis d'accord avec toi, et maintenant côté javascript ça doit donner quoi ? quelque chose comme ça?

<script language="javascript">
function update()
{
var valeur=document.getElementById("qt_plateau");
var prix=document.getElementById("prix_plateau");
var total=+prix*(+valeur.value);
window.location="commander.php?valeur="total;
}
</script>

PS: je suis nul en javascript.

par guilt92 » 31 mai 2006, 10:45

En fait pour moi après avoir choisi les quantités l'utilisateur valide sa commande et recoit un mail (entre autre je suppose).

Ce qu'il faut c'est faire évoluer le champ Total en temps réel à chaque fois qu il modifie les quantités, ce qui revient à inscrire en javascript la valeur de la case "Total".

Ainsi à la fin de la saisie les cases quantités seront remplies correctement et l'utilisateur connaitra le total et pourra valider. Après la validation cela t amene sur une page ou tu récupères toutes les valeurs du formulaire (plateau et quantitées choisies), tu les inscris dans la base de données en faisant un UPDATE pour que les quantités correspondent à celle choisies et tu ecris la fonction pour envoyer un mail. Le total aura été aussi passé en parametre si il fait partie de ton formulaire donc tu pourra le récupérer avec $_POST["total"] par exemple, et l'inscrire ou non dans ta base de données, cela dépend si tu veux le garder ou pas.

par velsy » 31 mai 2006, 10:41

Donc si j'ai bien compris il faut tout calculer en javascript, parcontre le client peut-il visualiser le montant total avant de valider sa commande?

par guilt92 » 31 mai 2006, 10:30

Franchement je vois pas trop de solution à part de faire un champ total en javascript indépendant de celui en php qui s'actualise au fur et a mesure que le client entre les quantités, et lorsqu'il valide d'inscrire toutes les modifications dans la base de données et de calculer le total en php à partir de ces données pour les inclure dans le mail...

par velsy » 31 mai 2006, 10:17

Merci beaucoup, et je vais penser à mettre les balises.

par guilt92 » 31 mai 2006, 09:40

Bonjour,

Essaye de penser a mettre les balises php quand tu mets du code c'est plus lisible.

A part ça en fait le problème est que lorsque l'on rafraichit la page (après la saisie d'une valeur) les valeures non sauvegardées dans la base sont perdues et c'est le cas de $prix_tot par exemple puisque tu le déclares à 0. De plus c'est au milieu d'un while() qui n'avancera jamais puisque encore une fois à chaque rafraichissement tout recommence comme si on arrivait sur la page la première fois. La méthode du rafraichissement n'est donc finalement pas forcemment la bonne, ou alors il faudrait lui passer d'autres paramêtre comme le total et une valeur de LIMIT pour pouvoir faire une requete dynamique. Ce que je n'avais pas compris etait qu'en fait le champ quantité se réplique autant de fois qu il y a de plateaux donc ma solution est très incomplète pour ton probleme. Je vais réfléchir pour voir si je trouve autre chose et espérer que quelqu'un d autre puisse t aider dans l interval !! :)

par velsy » 31 mai 2006, 09:24

Bonjour,

Ca me donne ça :

light prix: 9 euros quantité :2
éco prix: 8 euros quantité :0

total : 34

parcontre si je fais ça

light prix: 9 euros quantité : 0
éco prix: 8 euros quantité :2

total : 0


Donc voici mon code comme convenu:

<script language="javascript">
function update()
{
var valeur=document.getElementById("qt_plateau");
window.location="commander.php?valeur="+valeur.value;
}
</script>
</head>
<?php
include "includes/connect.inc.php";
if(!isset($id_lien)) $id_lien = db_connect($nombd_defaut);

//$req = "SELECT * FROM categorie ORDER BY nom_categorie ASC";
//$result = mysql_query($req);

?>
<body>

<center>
<table width="750" height="468" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="5" align="center">
</td>
</tr>
<tr>
<td colspan="5" align="center"><?php include "includes/Header.php"; ?></td>
</tr>
<tr>
<td width="148" align="center" valign="top">
<?php
include "includes/Tab_gauche.php";
?>
</td>
<td width="18">&nbsp;</td>
<td width="415" align="center" valign="top" class="titreMilieu">
<img src="images/commander_03.gif" width="106" height="30"><br>&nbsp;


<table width="100%" border="0" cellspacing="0" cellpadding="0" class="texteMilieu">
<form action="commande_val.php" method="post" name="commande" enctype="application/x-www-form-urlencoded">
<tr>
<td><div align="right">Nom :&nbsp;</div></td>
<td><input type="text" name="nom" size="20" maxlength="50"></td>
<td><div align="right">Soci&eacute;t&eacute; :&nbsp;</div></td>
<td><input type="text" name="societe" size="15" maxlength="50"></td>
</tr>
<tr>
<td><div align="right">T&eacute;l. :&nbsp;</div></td>
<td><input type="text" name="telephone" size="15" maxlength="10"></td>
<td><div align="right">Email :&nbsp;</div></td>
<td><input type="text" name="email" size="20" maxlength="50"></td>
</tr>
<tr>
<td colspan="2"><br>Adresse de livraison :<br><textarea name="adresse_livraison" ROWS="3" COLS="20"></textarea>
<br>&nbsp;</td>
<td colspan="2"><br>Adresse de facturation :<br><textarea name="adresse_facturation" ROWS="3" COLS="20"></textarea>
<br>&nbsp;</td>
</tr>
<tr>
<td colspan="2">Date de livraison :<br><input name="jour" type="text" value="" size="20" maxlength="30">
<br></td>
<td colspan="2">Heure de livraison :<br><input type="text" name="heure" size="20" maxlength="10"></td>
</tr>
<tr>
<td colspan="4"><div align="center">
<p><br>

<img src="images/plateau_03.gif" width="106" height="30"></p>
<table width="95%" border="0" cellspacing="0" cellpadding="0" class="texteMilieu">
<tr>
<td width="46%">&nbsp;</td>
<td width="24%">Prix</td>
<td width="30%">Quantité</td>
</tr>
<tr>
<td width="46%"></td>
<td width="24%"></td>
<td width="30%"></td>
</tr>
<? $req = "SELECT * FROM plateau ORDER BY prix_plateau ASC";
$result = mysql_query($req);
$prixtot = 0;
while ($donnees = mysql_fetch_array($result)) {
$id = $donnees["id_plateau"];
$titre_plateau = ucfirst($donnees["titre_plateau"]);
$prix_plateau = $donnees["prix_plateau"];
$qt_plateau = 1 ;
?>
<tr>
<td><? echo $titre_plateau;?></td>
<td><? echo $prix_plateau;?>&nbsp;&euro;<input name="prix_plateau" type="hidden" value="<? echo $prix_plateau;?>"></td>
<?php
if(isset($_GET["valeur"])) $qt_plateau=$_GET["valeur"];
?>
<td><input type="text" name="qt_plateau[]" id="qt_plateau" size="5" maxlength="3" value="0" onchange="update()"> </td>
</tr>
<?

$prixtot = $prixtot + ($prix_plateau*$qt_plateau);
}

?>
<tr>
<td><br>Montant total : <? echo $prixtot; ?> &euro;</td>
<td colspan="2" align="center"><input type=button value="Calculer"></td>
</tr>
</table>

etc....
</form>

par velsy » 30 mai 2006, 12:36

maintenant plus rien ne fonctionne, en plus je ne suis pas là cette après midi, je revois tous ça demain, je poste mon nouveau code demain matin, j'espère que tu seras là.

Merci encore à demain. :wink:

par guilt92 » 30 mai 2006, 12:02

De plus lorsque la page se réactualise la quantité entrée revient à 0, peut-on laisser afficher la quantité entrée.
Aucun problème, en fait dans ton input tu lui spécifies value="0" ce qui explique qu il le remette à chaque fois. La solution est de laisser 0 si la valeur n'est pas définie et d'inscrire la valeure sinon :
<input type="text" name="qt_plateau" id="qt_plateau" size="5" maxlength="3" onchange="update()" value="<?php if(isset(qt_plateau)) echo $qt_plateau; else echo "0";?>"> 
Pour le deuxième problème il faudrait que tu postes ton nouveau code pour que l'on puisse voir la formule stp.

par velsy » 30 mai 2006, 11:43

Ca fonctionne, sauf que j'ai une liste de plateaux exemple :

prix quantité
light 9 euros 2
éco 8 euros 0


Et donc au lieu de me faire 9*2+8*0, il me fait (9+8)*2

il y a t-il une solution à ce problème?

De plus lorsque la page se réactualise la quantité entrée revient à 0, peut-on laisser afficher la quantité entrée.

Merci encore pour ta précieuse aide.

par guilt92 » 30 mai 2006, 10:48

<head>
<script language="javascript">
function update()
{
var valeur=document.getElementById("qt_plateau");
window.location="mapage.php?valeur="+valeur.value;
}
</script>
</head>

<body>
<?php
if(isset($_GET["valeur"])) $qt_plateau=$_GET["valeur"];
?>
<input type="text" name="qt_plateau" id="qt_plateau" size="5" maxlength="3" value="0" onchange="update()">
</body>
Dès que l'utilisateur changera la valeur la page s'actualisera. Tu peux profiter de la condition isset() pour savoir si il a rempli cette valeur ou non et donc faire certaines requetes que lorsque le champ n'est pas vide par exemple...

par velsy » 30 mai 2006, 10:43

Merci, ça m'intéresse.

par guilt92 » 30 mai 2006, 09:41

Le problème est que le javascript te permettrai uniquement d'afficher la valeur, et encore vu que c'est le résultat d'une somme avec des valeurs php. Il me semble que si c'est pour être envoyé dans un mail tu n'auras pas d'autre choix que de rafraichir la page avant l'envoi du mail qui sera déclenché par un bouton "Envoyer" je suppose.

Si tu utilises le javascript cela permettra de faire le rafrachissement sans le bouton "Calculer" c'est le seul avantage que j'y vois. Si ça t'interesse je te donnerai les quelques lignes qui permettent cela.