calculateur de tarifs

pimprenelle23
Invité n'ayant pas de compte PHPfrance

17 mars 2013, 20:28

Bonjour, help !
Il s'agit d'un calculateur de tarifs en fonction de 2 variables : le tirage et le type d'article. J'ai commencé à monter le formulaire en essayant le calcul en fonction du tirage 1 et des valeurs (prix) 1,2,3. Je crois que le code parlera mieux que moi : j'ai posé des conditions en php mais elles ne sont pas du tout rencontrées ! Seule la première valeur est prise en compte dans le calcul, quoique l'on choisisse. Si quelqu'un(e) peut m'aider à comprendre ce qui ne va pas... merci !

CODE HTML

<form method="get">

<label>Tirage : </label>
<select name="tirage" id="tirage">
<option name="t1" id="t1" value="1">- 50.000 ex.</option>
<option name="t2" id="t2" value="2">de 50.000 à 100.000 ex.</option>
<option name="t3" id="t3" value="3">de 100 à 200.000 ex.</option>
<option name="t4" id="t4" value="4">+ 200.000 ex.</option>
</select>



<br/>
<br/>

<label>Type d'article : </label>
<input type="checkbox" name="value1" id="value1" value="1">traitement de dépêches, comptes-rendus
<input type="checkbox" name="value2" id="value2" value="2">critiques et commentaires
<input type="checkbox" name="value3" id="value3" value="3">articles de fond, interviews, reportages


<br/>
<br/>

Nombre de signes : <input type = "text" name="signes" size=4> <br>

<input type="hidden" name="calc" value="yes">

<br/>
<br/>

<input type="submit" name="Calculate" value="Calculez!"/>

</form> [/html]

LE PHP

$tirage=('tirage');
$value1=('value1');
$value2=('value2');
$value3=('value3');


if ($tirage='1' && $value1='1')
{
$tarif = 0.0203333333333333333;
}

elseif ($tirage='1' && $value2='2')
{
$tarif = 0.02916666666;
}

elseif ($tirage=='1' && $value3='3')
{
$value3 = $tarif3 = 0.0321666666666666666666667;
}

if(isset($_GET['calc']) && $_GET['calc']!="")
{
$calc=(int)($_GET['calc']);
$signes = $_GET['signes'];
$produit = $tarif*$signes;
echo "<p>&rarr; <strong><u>Vous devriez facturer : $produit &euro;</u></strong></p>";
}

ViPHP
ViPHP | 1996 Messages

17 mars 2013, 21:20

Avec les if, il faut vérifier avec == et non avec = (un seul =)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Mammouth du PHP | 2278 Messages

17 mars 2013, 21:24

Un formulaire qui n'a pas de partie action relance la page où il se trouve: il est donc normal qu'on repasse par le formulaire.
On voit bien ce que tu voudrais faire avec l'input calculez, mais pour qu'il serve, il faudrait qu'il soit testé avant le formulaire;
possible, mais un peu pénible à mettre en place.
Il est beaucoup plus simple de diviser en deux pages:
L'une avec le formulaire, apelons-la saisie.html, l'autre avec le calcul, calcul.php
saisie.html est plus ou moins ce que tu avais écrit
il n'y a pas d'attribut name niid pour les options du select. Ils sont ignorés.
<form method="get"  action="calcul.php">
<select name="tirage" id="tirage">
<option value="1">- 50.000 ex.</option>
<!-- -->
</select>
<!--1) Le type d'article n'est pas une checkbox (on peut choisir plusieurs valeurs renvoyées comme un tableau:) Ce serait:

<input type="checkbox" name="type[]" id="value1" value="1">traitement de dépêches, comptes-rendus
<input type="checkbox" name="type[]" id="value2" value="2">critiques et commentaires
<input type="checkbox" name="type[]" id="value3" value="3">articles de fond, interviews, reportages

Il vaut mieux:-->
<input type="radio" name="type" id="value1" value="1" />traitement de dépêches, comptes-rendus
<input type="radio" name="type" id="value2" value="2" />critiques et commentaires
<input type="radio" name="type" id="value3" value="3" />articles de fond, interviews, reportages


<!-- supprimer <input type="hidden" name="calc" value="yes">-->
<!--le reste identique-->
calcul.php
<?PHP // ajouter PHP 
$tirage=('tirage'); //inutile car le selct passe une valeur qui a pour nom tirage, mais qu'il faut récupérer
$value1=('value1'); //inutile
$value2=('value2'); // inutile
$value3=('value3');//inutile
$tirage = $_GET['tirage'];
if ($tirage='1' && $value1='1')// cette aberration se remplace aisément par un
switch ($tirage)
{
	case 1:
		switch($type)
		{
			case 1:
				$tarif =  0.0203333333333333333;
			break;
		//etc
		}
	break;
//etc

}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

pimprenelle23
Invité n'ayant pas de compte PHPfrance

17 mars 2013, 22:28

Millions de mercis pour tous ces conseils que je viens d'appliquer et tout fonctionne nickel !