Page 1 sur 1

faire un calcul dans 2 listes déroulantes

Posté : 07 sept. 2016, 01:01
par augustin1990
Bonsoir,

Je suis débutant en PHP, et je suis entrain de réfléchir à un petit exercice... J'ai deux listes déroulantes
une qui s'appelle domicile et une autre gare

dans la premiere liste déroulante (domicile) il y a la ville de bruxelles par exemple et dans la seconde liste déroulante (gare) il y a la ville de charleroi, ce que je voudrais faire c'est que lorsqu'un utilisateur sélectionne dans la première liste déroulante (domicile) bruxelles et dans la seconde liste déroulante il sélectionne par exemple charleroi et qu'il appuie sur calculer il y a le prix de 30 euros qui s'affiche...

Est-ce quelqu'un peut m'expliquer un peu comment je pourrais faire en php svp ??

Code : Tout sélectionner

<form method="post" action=""> <fieldset> <legend>Formulaire</legend> <label for="domicile">domicile : </label> <select id="domicile" name="domicile"> <option value="1">Bruxelles</option> </select> <br /> <label for="gare">gare : </label> <select id="gare" name="gare"> <option value="0" selected="selected">Charleroi</option> <option value="1">Mons</option> </select> <br /> <input type="submit" value="Calculer" /> </fieldset> </form> <div> <label for="resultat">Résultat : </label> <input id="resultat" type="text" readonly="readonly" /> </div>

Re: faire un calcul dans 2 listes déroulantes

Posté : 07 sept. 2016, 08:53
par moogli
bonjour,

il faut pour cela récupérer les valeurs du formulaire
http://phpdebutant.org/article56.php
http://www.lephpfacile.com/cours/8-recu ... ormulaires

ensuite il faut chercher la donnée. Je ne sais pas comment tu as prévu de sauvegarder ces données, c'est en fonction de ce choix que tu pourras réaliser la recherche et retourner le résultat.

Les données peuvent être dans des fichers, une (ou plusieurs) base(s) de données.

@+

Re: faire un calcul dans 2 listes déroulantes

Posté : 07 sept. 2016, 13:34
par augustin1990
Bonjour,

J'y suis finalement arrivé... :) Merci pour tes liens... Je ne veux pas créer de base de donnée, on va là jouer cool... :mrgreen:

J'ai une petite question... Donc j'ai deux listes déroulantes avec mes villes...
domicile (1er liste déroulante), gare (2ème liste déroulante)

Quand je sélectionne Melin --> Bruxelles il m'affiche bien la somme de 20 euros
Quand je sélectionne Melin -->Liège, il m'affiche bien la somme de 75 euros
cependant ma liste déroulante ne reste pas sur Melin --> Liège mais retourne à Melin-Bruxelles
est-ce que je dois créer une session ???
<form method="post" action="">
    <fieldset>
        <legend>Formulaire</legend>
        <label for="domicile">Domicile: </label>
        <select id="domicile" name="domicile">
            <option value="1">1342-Melin</option>
            <option value="2">1300-Wavre</option>
            <option value="3">7777-Namur</option>
        </select>
        <br />
        <label for="gare">Gare: </label>
        <select id="gare" name="gare">
            <option value="1" selected="selected">Bruxelles</option>
            <option value="2">Liege</option>
            <option value="3">Charleroi</option>
        </select>
        <br />
        <input type="submit" value="Calculer" />
    </fieldset>


 
 </form>
<?php
 
 
if(isset($_POST['domicile']) && isset($_POST['gare']))
{
 
	$arTarifs = array(
		1 => array( //melin
			
			1=>20,
			2=>75,
			3=>40,
		),
		
		2 => array( //wavre
			1=>4,
			2=>12,
			3=>67
		),
		3  => array(
			0=>10,
			1=>54,
			10=>89
		)
	);
 
	if (isset($arTarifs[$_POST['domicile']][$_POST['gare']])) {
		echo $arTarifs[$_POST['domicile']][$_POST['gare']] . '€'; 
 	}
	
	else {
	   echo 'aucun tarif pour ce trajet';
	}
 
	}
 
 
?>

Re: faire un calcul dans 2 listes déroulantes

Posté : 07 sept. 2016, 14:00
par moogli
de rien,

il faut que tu vérifies pour chaque entrée des listes s'il existe dans le tableau $_POST l'index qui va avec et s'il correspond l'option courante (comment ça c'est pas clair !!!!) et dans ce cas tu ajoute l'attribut selected
exemple
<option value="1"<?php if(!empty($_POST['domicile']) && $_POST['domicile'] == 1) echo ' selected="selected"'?>>1342-Melin</option>

je te conseil de te faire une fonction qui prend en paramètre le tableau post et l'idex que tu veux tester. elle retourne ' selected="selected"' ou une chaine vide.
cela va te permettre de gagner un lisibilité et en maintenance ;)
c'est ce que tu as fait pour Bruxelles (la c'est inutile par c'est le premier élément de la liste mais le principe est là ;) )

pour ce qui est de la base de données ce n'est pas super complexe (mais ça peux l'être ;)). Par contre c'est pratique et efficace.

la si tu rajoute une ville de départ tu ajoutes un tableau avec tout les tarifs et modifies le select html, si tu ajoutes une destination c'est une ligne dans les deux tableaux et le select html, si c'est un départ et une destination c'est deux. Bref faut pas avoir trop le choix sinon c'est vite la merde ;)
c'est beaucoup de chance de faire une connerie alors que c'est "juste" pour des données.

Avec un SGBD tu vas avoir une table avec les villes et une table trajet qui fera référence à la première pour le départ et l'arrivée (et contiendra le prix).
Pour l'affichage c'est simple tu récupère la liste des villes et construit les select dynamiquement tu a le tarif avec une requête simple.

l'avantage c'est que tu ne modifie pas le code source de l'application pour ajouter des données et ça c'est super bien (tu évites de péter un truc en ajoutant quelque chose) c'est dynamique deux ajout en base et ça fonctionne pas de fichier a modifier aucun risque.
la chose extensible (à l'info et au delà ....).

bref c'est bon ;)
tu peux partir sur un base fichier comme sqlite c'est simple rien a installer faut juste le driver sqlite pour php ;)

@+

Re: faire un calcul dans 2 listes déroulantes

Posté : 08 sept. 2016, 21:43
par augustin1990
Bonsoir Mooglie,

Je t'en suis reconnaissant j'y suis arrivé grâce à ton aide. C'est sûr que ça serait plus propre avec une fonction mais mon compétence sont encore très limité en php... Peut-être plus tard... :mrgreen:
<?php
if(isset($_POST['domicile']) && isset($_POST['gare']))
{
     $arTarifs = array(
        1 => array( //melin
            
            1=>20,
            2=>75,
            3=>40,
        ),
        
        2 => array( //wavre
            1=>40,
            2=>12,
            3=>67
        ),

        3  => array(
            1=>54,
            2=>12,
            3=>89
        ),
		
		
		4  => array(
            1=>12,
            2=>24,
            3=>29
        )
    );
}
 
?>
<form method="post" action="">
    <fieldset>
        <legend>Formulaire</legend>
        <label for="domicile">Domicile: </label>
        <select id="domicile" name="domicile">
		
            <option value="1"<?php if(!empty($_POST['domicile']) && $_POST['domicile'] == 1) echo ' selected="selected"'?>>1342-Melin</option>
               <option value="2"<?php if(!empty($_POST['domicile']) && $_POST['domicile'] == 2 ) echo ' selected="selected"'?>>Wavre</option>
            <option value="3"<?php if(!empty($_POST['domicile']) && $_POST['domicile'] == 3) echo ' selected="selected"'?>>Namur</option>
        </select>
        <br />
        <label for="gare">Gare: </label>
        <select id="gare" name="gare">
             <option value="1"<?php if(!empty($_POST['gare']) && $_POST['gare'] == 1) echo ' selected="selected"'?>>Bruxelles</option>
             <option value="2"<?php if(!empty($_POST['gare']) && $_POST['gare'] == 2) echo ' selected="selected"'?>>Liege</option>
              <option value="3"<?php if(!empty($_POST['gare']) && $_POST['gare'] == 3) echo ' selected="selected"'?>>Namur</option>
        </select>
        <br />
        <input type="submit" value="Calculer" />
    </fieldset> 
 </form>

 <div style="font-size: 38rem; color: red;">
   <?php 
     if (isset($arTarifs[$_POST['domicile']][$_POST['gare']])) {
        echo $arTarifs[$_POST['domicile']][$_POST['gare']] . '€'; 
     }
    
    else {
       echo 'aucun tarif pour ce trajet';
    }
    ?>
 </div>