Calculs dans un formulaire en php

Fermé
Utilisateur anonyme - 17 mars 2009 à 14:52
vincent170186 Messages postés 316 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 28 septembre 2012 - 23 mars 2009 à 08:53
Bonjour,

Je souhaite créer un formulaire de commande basique et faire des calculs pour calculer le total des articles, de la commande... Mais mes calculs ne fonctionnent pas...

Le problème c'est que si j'ai bien compris le php ne permet pas de mettre à jour en temps réel, il faut recharger d'une manière la page ?
Javascript serait peut-être une solution mais je comprends encore moins que php !, alors si il existe une méthode en php, je suis preneuse !

Voici mon code :
<body>
<form id="commande" method="post" action="">
<fieldset>
<h3>
<legend>Infos personnelles</legend>
</h3>
<p>
<label>Nom
<input type="text" name="nom" id="nom" />
</label>
</p>
<p>
<label>Prénom
<input type="text" name="prenom" id="prenom" />
</label>
</p>
<p>
<label>Adresse
<input type="text" name="adresse" id="adresse" />
</label>
</p>
<p>
<label>Code postal
<input type="text" name="cp" id="cp" />
</label>
<label>Ville
<input type="text" name="ville" id="ville" />
</label>
</p>
</fieldset>
<fieldset>
<h3>
<legend>Commande</legend>
</h3>
<table>
<tr>
<td>Désignation</td>
<td>Quantité</td>
<td>PU</td>
<td>Total</td>
</tr>
<tr>
<td>Article A</td>
<td><input type="text" name="QA" id="QA" /></td>
<td>10,00 €
<input name="PUA" type="hidden" value="10" /></td>
<td><input name="TA" type="text" id="TA" value="<? echo $QA*$PUA?>" /></td>
</tr>
<tr>
<td>Article B</td>
<td><input type="text" name="QB" id="QB" /></td>
<td>20,00 €
<input name="PUB" type="hidden" value="20" /></td>
<td><input type="text" name="TB" id="TB" value="<? echo $QB*$PUB?>" /></td>
</tr>
<tr>
<td>Article C</td>
<td><input type="text" name="QC" id="QC" /></td>
<td>30,00 €
<input name="PUC" type="hidden" value="30" /></td>
<td><input type="text" name="TC" id="TC" value="<? echo $QC*$PUC?>" /></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><strong>Total TTC</strong></td>
<td><strong>
<input type="text" name="TTC" id="TTC" value="<? echo $TA+$TB+$TC?>" />
</strong></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td>Dont TVA 19,6%</td>
<td><input type="text" name="TVA" id="TVA" value="<? echo $TTC/"1.196"?>" /></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td>Total HT</td>
<td><input type="text" name="HT" id="HT" value="<? echo $TTC-$TVA?>" /></td>
</tr>
</table>
</fieldset>
<p>
<label>
<input type="submit" name="envoyer" id="envoyer" value="Envoyer" />
</label>
</p>
</form>
<!--Début Envoi du formulaire-->
<?php
if(isset($_POST['envoyer']))
{
$nom = $_POST['nom'];
$prenom = $_POST['prenoml'];
$adresse = $_POST['adresse'];
$cp = $_POST['cp'];
$ville = $_POST['ville'];
$QA = $_POST['QA'];
$PUA = $_POST['PUA'];
$TA = $_POST['TA'];
$QA = $_POST['QB'];
$PUA = $_POST['PUB'];
$TA = $_POST['TB'];
$QA = $_POST['QC'];
$PUA = $_POST['PUC'];
$TA = $_POST['TC'];
$email_destinataire = "xxx";
$subject = "Vous avez une commande";
$body = "Client : \n"."$nom"."$prenom \n"."$adresse \n"."$cp"."$ville \n\n"."Commande : \n"."Article A : $QA article(s) à $PUA pour un total de $TA \n"."Article B : $QB article(s) à $PUB pour un total de $TB \n"."Article C : $QC article(s) à $PUC pour un total de $TC \n\n"."Total commande : $TTC \n\n";
$headers = "From: $nom <$email_expediteur> \n";
$headers .= "Reply-To: $email_expediteur \n\n";
echo "<h3 class='centre'>votre commande a été envoyé ! Merci</h3>";
mail($email_destinataire, $subject, $body, $headers);
}
?>
<!--Fin Envoi du formulaire-->
</body>
A voir également:

5 réponses

NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
17 mars 2009 à 14:54
Comme vous l'avez si bien dit, php demande un rechargement pour mettre à jour les données, donc à moins de faire un submit de votre formulaire vous n'obtiendrez rien.
Javascript peut en effet vous être utile dans ce cas, mais vous préférerez peut-être rester en php et faire uniquement le submit.
0
vincent170186
17 mars 2009 à 15:01
salut !
je ne crois pas que tu ais besoin de javascript pour faire des calcul !
il y a un souci avec tes echo
tu met <? echo $QA*$PUA?> essaye <? echo "$QA*$PUA";?> toujours echo"contenu";
ça fonctionnera mieux
et plutôt que de faire <? echo $QA*$PUA?> crée plutot une variable suplementaire du genre
$qqchose= $QA*$PUA; et ensuite <? echo "$qqchose ";?> !!

voila !
0
Utilisateur anonyme
19 mars 2009 à 13:15
Merci Vincent

J'ai fait qq modifs :
1/ dans mes echo, c'est bien echo $qqchose et non echo "$qqchose", sinon il m'écrit : $qqchose, or ce n'est pas du texte qui m'intéresse mais le résultat du calcul que je souhaite

2/ avant le formulaire j'ai rajouté en début une initialisation des variables de calcul (suite à ton conseil pour créer des variables de calcul) :
<?php
//Initialisation des variables
$TA=' ';
$TB=' ';
$TC=' ';
$TTC=' ';
$TVA=' ';
$HT=' ';
?>

3/ ensuite j'ai rajouté un bouton calculer de type submit afin de rafraîchir les variables, mais ça ne marche pas ! comme je débute, c'est dur...
<?php
//Si le bouton "calculer" du formulaire est cliqué
if(isset($_POST['calculer']))
{
//Calculs
$TA=$QA*$PUA;
$TB=$QB*$PUB;
$TC=$QC*$PUC;
$TTC=$TA+$TB+$TC;
$TVA=$TTC/1.196;
$HT=$TTC-$TVA;
}
//Si le bouton du formulaire est cliqué ('envoyer' = c'est le nom du bouton submit)
if(isset($_POST['envoyer']))
{
//Récupération des variables du formulaire par methode POST
$nom = $_POST['nom'];
$prenom = $_POST['prenoml'];
$adresse = $_POST['adresse'];
$cp = $_POST['cp'];
$ville = $_POST['ville'];
$QA = $_POST['QA'];
$PUA = $_POST['PUA'];
$TA = $_POST['TA'];
$QA = $_POST['QB'];
$PUA = $_POST['PUB'];
$TA = $_POST['TB'];
$QA = $_POST['QC'];
$PUA = $_POST['PUC'];
$TA = $_POST['TC'];
//Génération des autres variables. Ne pas changer "From:" c'est un terme de la fonction mail php
$email_destinataire = "xxx";
$subject = "Vous avez une commande";
//Génération du corps du mail
$body = "Client : \n"."$nom"."$prenom \n"."$adresse \n"."$cp"."$ville \n\n"."Commande : \n"."Article A : $QA article(s) à $PUA pour un total de $TA \n"."Article B : $QB article(s) à $PUB pour un total de $TB \n"."Article C : $QC article(s) à $PUC pour un total de $TC \n\n"."Total commande : $TTC \n\n";
//Génération des entêtes du mail / From : pour indiquer l'expéditeur (nom + email) / Reply-to pour pouvoir lui répondre (sinon c'est une adresse du site web par défaut et souvent non en service qui est indiquée)
$headers = "From: $nom <$email_expediteur> \n";
$headers .= "Reply-To: $email_expediteur \n\n";
//envoi du mail avec la fonction mail()
echo "<h3 class='centre'>votre commande a été envoyé ! Merci</h3>";
mail($email_destinataire, $subject, $body, $headers);
}
?>

Qui peut m'aider? Merci
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513 > Utilisateur anonyme
19 mars 2009 à 14:25
Il faut remplacer
if(isset($_POST['envoyer']))
par
if(isset($_POST))

car ce que tu as mis veut dire : si on a envoyé par la méthode post un champ de formulaire de nom envoyer
0
vincent170186 Messages postés 316 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 28 septembre 2012 52
19 mars 2009 à 14:47
salut !
alors petite astuce pour tes calculs avec du javascript !
au lieu de faire un bouton submit fait un <input type='button' value='calculer' onclick='calcul()' />
et en haut de ta page tu crée une fonction calcul():
alors je t'explique un peu comment ça fonctionnent !
on prend le cas ou le formulaire s'appelle form et l'input :input
document.form.input.value ->correspond a la valeur de ton input
donc maintenant si on a input1 et input2 et on veut que le resultat de l'input1+l'input2 qu'on mettra dans un input3
on aura donc document.form.input3.value=(document.form.input1.value+document.form.input2.value);
alors pour ce simplifié la vie tu l'identifie au début de ta fonction !
genre g=document.form.input3.value ;
h=document.form.input1.value ;
i=document.form.input2.value ;
on aura donc g=h+i ;

donc on revient a la fonction
function calcul()
{
g=document.form.input3.value ;
h=document.form.input1.value ;
i=document.form.input2.value ;
g=h+i ;
}
bon après tu fait ça pour tous tes calculs et si tu veut pas que l'utilisateur voit les calculs tu les fait dans input type='hidden'
j'espere avoir été clair ! sinon n'esite pas a poser des questions
voila !
0
Utilisateur anonyme
20 mars 2009 à 09:44
Bonjour
Merci pour vos réponses

Alors en ce qui concerne la méthode PHP, cela ne fonctionne pas, le calcul fait que la page se recharge mais ne conserve pas les données saisies, je me retrouve donc devant une page vide, alors qu'il faudrait conserver toutes les données saisies pour voir les calculs. En modifiant le isset comme indiqué, je reçois 3 messages, alors que je n'ai pas cliqué sur le bouton "envoyer" mais "calculer". Je ne comprends pas...

J'ai essayé avec javascript, dans le head j'ai mis un calcul pour tester :
<script type="text/javascript">
function calcul()
{
QA=document.form_commande.QA.value ;
PUA=document.form_commande.PUA.value ;
TA=QA*PUA ;
}
</script>
et ajouter le onclick sur le bouton "calculer"
Comme pour php, la page se rafraichit, et revient vierge !

Bouhouhouh !!!
je désespère....

Merci pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vincent170186 Messages postés 316 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 28 septembre 2012 52
23 mars 2009 à 08:53
pour le javascript a tu bien mis on onclick=calcul()
et ha oui ! si tu est sous IE c'est normal que le javascript ne fonctionnent pas renome tes variable !
je m'explique il faut que ta variable ai un nom unique par exemple dans ta page ton input s'appelle QA et ta variable aussi donc ça ne fonctionnera pas ! essaye en les renomant et normalement ça devrait marcher
voila !
0