Pb calcul d'une commande

Eléphanteau du PHP | 11 Messages

29 mai 2006, 11:57

Bonjour,

Voilà j'ai un souci pour calculer une commande, pour être plus clair voici mon code :
<? $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;</td>
<td><input type="text" name="qt_plateau[]"  size="5" maxlength="3" value="0"></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>
Mon 1er problème c'est que je n'arrive pas à multiplier le prix par la quantité et mon 2ème c'est que je voudrais que le montant total s'affiche lorsque je clique sur le bouton calculer.

Quelqu'un a-t-il une solution. :cry:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 mai 2006, 12:05

Suggestion : Lorsque tu présentes un extrait de code,
n'oublie pas d'utiliser les balises
 pour l'encadrer. :pouce:

Je l'ai fait pour toi. ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 mai 2006, 12:07

Qu'est ce qui est affiché actuellement pour le total ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1353 Messages

29 mai 2006, 12:55

Bonjour,
<? $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 ;
?>
while ($donnees = mysql_fetch_assoc($result)) {
Utilise mysql_fetch_assoc($result) puisque tu utilises le nom des colonnes dans les parametres. le array sert pour des entiers, par exemple $donnees[0].

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 mai 2006, 13:03

while ($donnees = mysql_fetch_assoc($result)) {
Utilise mysql_fetch_assoc($result) puisque tu utilises le nom des colonnes dans les parametres. le array sert pour des entiers, par exemple $donnees[0].
Absolument pas :
Le type de tableau retourné depend de la définition du paramètre result_type. En utilisant MYSQL_BOTH (défaut), vous récupèrerez un tableau contenant des indices associatifs et numériques. En utilisant MYSQL_ASSOC, vous ne récupèrerez que les indices associatifs (comme le fonctionnement de la fonction mysql_fetch_assoc()), en utilisant MYSQL_NUM, vous ne récupèrerez que les indices numériques (comme le fonctionnement de la fonction mysql_fetch_row()).
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1353 Messages

29 mai 2006, 13:13

oups désolé, autant pour moi ! Lecture rapide du code et je m attendais a un assoc... :?

Eléphanteau du PHP | 11 Messages

30 mai 2006, 09:07

Salut,

Désolée pour les balises
, merci.
Merci pour les messages, le problème c'est que je n'ai pas tout compris, je débute en php et là je vous avoue que je comprends pas.
Pour info,
lorsque je mets ça :
$prixtot = $prixtot + $prix_plateau; 
J'ai le prix total des plateaux, mais lorsque je mets ça:
$prixtot = $prixtot + ($prix_plateau*$qt_plateau); 
rien ne s'affiche, je ne sais pas comment récupérer la valeur que le client a inscrit.

Mammouth du PHP | 1353 Messages

30 mai 2006, 09:15

Ca y est je comprend ton problème.
Tu essaye de récupérer directement la valeur inscrite dans un "input" pour la multiplier à d'autres valeurs.
Le problème est que en php tu ne peux pas accéder à cette valeur directement (à ma connaissance).
Il existe deux solutions : Soit il te faut rafraichir la page, donc en fait tu met ce champ de type input dans un formulaire qui appelle sa propre page et au début de la page tu regardes si ce formulaire a posté une valeur : if(isset($_POST["qt_plateau"])) alors tu fais les calculs ... Cela implique un bouton "Calculer" sur ton formulaire qui rafraichit la page par exemple....

La deuxième solution consiste à utiliser le javascript, qui te permettra de récupérer dynamiquement la valeur du champ à chaque modification par l'utilisateur.

Eléphanteau du PHP | 11 Messages

30 mai 2006, 09:23

Ok, 1er solution le problème c'est que c'est déjà dans un formulaire qui envoit les données par mail, donc ça ne vas pas être possible, non ?(dis moi ce que tu en penses).

2ème solution, je veut bien mettre en place du javascript, mais je ne trouve pas de script simple et clair pour une novice comme moi en javascript.

Si tu as quelque chose de ce type sous la main ça m'intéresse. :wink:

Merci encore pour l'aide.

Mammouth du PHP | 1353 Messages

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.

Eléphanteau du PHP | 11 Messages

30 mai 2006, 10:43

Merci, ça m'intéresse.

Mammouth du PHP | 1353 Messages

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...

Eléphanteau du PHP | 11 Messages

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.

Mammouth du PHP | 1353 Messages

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.

Eléphanteau du PHP | 11 Messages

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: