Problème avec mon PHP

Résolu
Bonjour,
J'ai un problème avec mon PHP, le problème est le suivant, quand je tape ma saisie il m'affiche les 4 résultats des 4 fonctions alors que j'en veux que un.

<?php
	$_POST['nombre'];
	$_POST['result'];
	$_POST['choix'];
	
		if($_POST['choix'] = 1 AND isset($_POST['choix'])) {
		function xCalc($nombre, $result)
		{
			$inconu = $_POST['result'] -  $_POST['nombre'];
			echo "<h1>= $inconu </h1> ";
			
		}
		xCalc(1, 2, 3); 
		}

		
		if($_POST['choix2'] = 2 AND isset($_POST['choix'])) {
		function yCalc($nombre, $result)	
		{
			$inconu = $_POST['nombre'] + $_POST['result'];
			echo "<h1>= $inconu </h1>";
		}
		yCalc(1, 2, 3);
		}
		
		if($_POST['choix3'] = 3) {
		function zCalc($nombre, $result)
		{
			$inconu = $_POST['nombre'] / $_POST['result'];
			echo "<h1>= $inconu </h1>";
		}
		zCalc(1, 2, 3);
		}
		
		if($_POST['choix'] = 4) {
		function qCalc($nombre, $result)
		{
			$inconu = $_POST['result'] / $_POST['nombre'];
			echo"<h1>= $inconu </h1>";
		}
		qCalc(1, 2, 3);
		}	
	
?>


et voici la saisie

 <form action="xCalc.php" method="post">
	<p>Saisissez:<br/> <input type="text" name="nombre" /><select name="choix">
    <option value="choix1">+</option>
    <option value="choix2">-</option>
    <option value="choix3">x</option>
    <option value="choix4">÷</option>
</select> X =
	<input type="text" name="result" />
	<input type="submit" value="Valider" />
	</p>
</form>


Aidez moi S.V.P
Cordialement


Cordialement

12 réponses

Résumé de la discussion

Le problème est que le script PHP affiche les quatre résultats des fonctions au lieu d'en afficher qu'un seul selon le choix de l'utilisateur. Des solutions préconisent d'utiliser switch-case et de remplacer les opérateurs d'affectation (=) par des opérateurs de comparaison (== ou ===) dans les conditions, afin d'exécuter uniquement la fonction correspondant au choix. D'autres conseils insistent sur la vérification de isset pour les variables POST et sur le fait de ne pas appeler les quatre fonctions, les arguments passent mal et l'indexation des POST est erronée. En complément, harmoniser les noms des champs et les valeurs du formulaire afin que le switch utilise la même clé POST et que chaque cas corresponde exactement à une opération.

Bobot (l’IA à votre service)
  1. if($_POST['choix'] = 1 AND isset($_POST['choix'])) {

    il manque un egal dans tes autres cas aussi
    if($_POST['choix'] == 1 AND isset($_POST['choix'])) {

    Puis si c'est ou l'un ou lautre autant utilise des if ..elseif

    ...
    de plus...

    tu test la valeur de ta variable et ensuite tu verifies qu'elle existe, l'inverse t"eviterais qques notice
    0
    1. ton if est à l'envers.
      if($_POST['choix'] == 1 AND isset($_POST['choix'])) { 

      tu devrais tester isset en premier car si c'est false ça ne sert à rien de tester si la valeur est 1 ...
      0
  2. il te manque un = dans tes tests dans les if ;)

    if($_POST['choix'] == 1) {
    }
    0
    1. J'ai fais les changement mais maintenent rien ne s'affiche...
      
      <?php
      	$_POST['nombre'];
      	$_POST['result'];
      	$_POST['choix'];
      	
      		if($_POST['choix'] == 1 AND isset($_POST['choix'])) {
      		function xCalc($nombre, $result)
      		{
      			$inconu = $_POST['result'] -  $_POST['nombre'];
      			echo "<h1>= $inconu </h1> ";
      			
      		}
      		xCalc(1, 2, 3); 
      		}
      
      		
      		if($_POST['choix'] == 2 AND isset($_POST['choix'])) {
      		function yCalc($nombre, $result)	
      		{
      			$inconu = $_POST['nombre'] + $_POST['result'];
      			echo "<h1>= $inconu </h1>";
      		}
      		yCalc(1, 2, 3);
      		}
      		
      		if($_POST['choix'] == 3 AND isset($_POST['choix'])) {
      		function zCalc($nombre, $result)
      		{
      			$inconu = $_POST['nombre'] / $_POST['result'];
      			echo "<h1>= $inconu </h1>";
      		}
      		zCalc(1, 2, 3);
      		}
      		
      		if($_POST['choix'] == 4 AND isset($_POST['choix'])) {
      		function qCalc($nombre, $result)
      		{
      			$inconu = $_POST['result'] / $_POST['nombre'];
      			echo"<h1>= $inconu </h1>";
      		}
      		qCalc(1, 2, 3);
      		}	
      	
      ?>
      
      0
      1. Modérateur
        Salut,

        Au lieu de faire ceci :
        if($_POST['choix'] == 3 AND isset($_POST['choix']))
        {
           ...
        }
        if($_POST['choix'] == 4 AND isset($_POST['choix']))


        Teste tout en haut de ta fonction ceci :
        if(isset($_POST['choix']))
        Ensuite, tu fais un switch case sur la valeur de $_POST['choix']

        Vérifie aussi le nom du paramètre choix passé en paramètre !
        0
        1. Merci de votre aide mais mon niveau en PHP est pas super donc je sais pas comment utiliser les balise switch case . Pourriez vous m'aidez ? Merci
          0
      2. Tu fais des divisions avec tes nombres.
        Tu devrais aussi t'assurer que tu ne fais pas une division par zéro avant de faire le calcul ...
        0
        1. Modérateur
          Utilisation du switch case :
          https://www.php.net/manual/fr/control-structures.switch.php

          Exemple où $i est la variable à tester :

          switch ($i) {
              case 0: //Cas où i vaut 0
                  echo "i égal 0";
                  echo "i est égal 0 j'ai dit !";
                  break;
              case 1: //Cas où i vaut 1
                  echo "i égal 1";
                  break;
              case 2: //Cas où i vaut 2
                  echo "i égal 2";
                  break;
          }


          Tu peux mettre une ou plusieurs instructions dans le case (jusqu'au break).
          Je te laisse tester et demande-moi si tu as des questions.
          0
          1. Merci !!!! Vous m'aidez enomémant ! Maintenent je vais tester le tout, j'ai juste une petite question, ou je dois mettre la "fonction"?
            0
            1. Modérateur
              La question à se poser :
              - As-tu vraiment de nommer des fonctions ? (Oui si tu réutilises ce code plusieurs fois dans ta page).
              - Si oui, nomme toutes tes fonctions en haut de code et appelle les ensuite.
              - Si tu n'as pas besoin de fonction, saisis juste le code de la fonction dans le case:
              0
            2. Je suis confu ^^
              donc si je veux faire mon calcul je dois faire:

              	$_POST['nombre'];
              	$_POST['result'];
              	$_POST['choix'];
              
              switch ($i) {
              		function xCalc($nombre, $result)
              		{
              			$inconu = $_POST['result'] -  $_POST['nombre'];
              			echo "<h1>= $inconu </h1> ";
              		}
              		xCalc(1, 2, 3);
                      break;
                  case 1: //comme en haut
                      echo "i égal 1";
                      break;
                  case 2: //comme au premier
                      echo "i égal 2";
                      break;
              }
              0
            3. Modérateur
              Non, la fonction passe avant le switch.
              Globalement, cela donne ceci :
              - Fonctions
              - Switch

              - case 1
              -instruction 1
              -instruction 2
              -Fonction1 appelée
              - Fin case 1

              - case 2
              -instruction 1
              - Fin case 2

              - case 3
              -instruction 1
              -Fonction2
              - Fin case 3
              0
            4. Que signifie "instruction" et "Fonction appelée" ?
              0
            5. Modérateur
              Il est essentiel que tu connaisses les bases de la programmation !
              Définition d'une instruction.
              "Fonction appelée" => tu appelle la fonction écrite.

              Exemple :
              function eriretoto() 
              { 
                    echo("toto"); 
              } 
              //... Le programme continue ici et 100 lignes plus loin : 
              
              ecriretoto(); //J'appelle la fonction ici que j'ai dégini plus haut.
              0
          2. Modérateur
            Tu as une variable $toto qui vaut soit 1, soit 2, soit 3, soit 4.
            Au lieu de faire :
            if ($toto == 1)
            {
               //Je fais ceci
            }
            elseif ($toto == 2)
            {
               //Je fais ceci
            }
            elseif ($toto == 3)
            {
               //Je fais ceci
            }
            else
            {
               //Je fais cela
            }


            TU FAIS CECI :

            switch ($toto) //On teste la valeur de $toto
            {
                case 1:          //Cas où $toto vaut 1
                    echo "i égal 0"; //Je fais donc telle action
                    break;          //Fin du cas où $toto vaut 1, on ne rentrera pas dans les autres cas => le programme quitte le switch.
                case 2:          //On traite le cas où $toto vaut 2
                    echo "toto égal 2";
                    break;
                case 3:
                    echo "toto égal 3";
                    break;
                default:
                     echo "Tous les autres cas non satisfaits !";
            }


            Je ne peux rien faire de plus si tu ne comprends pas.
            Lis bien ceci :
            https://www.php.net/manual/fr/control-structures.switch.php

            Tu as ainsi bien moins de lignes de code.
            0
            1. J'ai bien compris cela mais je sais pas ou il faut mettre la fonction pour calculer
              0
            2. Modérateur
              Tu la met tout en haut de ton code.
              Essaye et dis moi ce que ça donne.
              0
            3. J'ai tout tester mais ca ne marche toujours pas ... Pourriez vous me donner quelque ligne en exemple avec mon code ? Merci
              0
          3. Bonjour,
            juste un détail...

            si tes options ont comme value "choix1", "choix2"... tes if doivent porter sur:

            if($_POST['choix'] == 1) ...
            0
            1. Modérateur
              Cela devrait mieux entrer en adéquation avec ce que tu veux faire.
              Maintenant, il faut restreindre l'utilisation des zones de texte à des chiffres, ...

              <?php
              		//--------------------------- Définition des fonctions -------------------------//
              	
              		function soustCalc($nombre, $nombre2) //Sousctraction du nombre 1 par le nombre 2
              		{
              			$resultat = $nombre -  $nombre2;
              			echo "<h1>= $resultat </h1>";
              		}
              		
              		function plusCalc($nombre, $nombre2) //Addition des deux nombres
              		{
              			$resultat = $nombre + $nombre2;
              			echo "<h1>= $resultat </h1>";
              		}
              		
              		function multiplieCalc($nombre, $nombre2) //Soustraction du nombre 1 par le nombre 2
              		{
              			$resultat = $nombre - $nombre2;
              			echo "<h1>= $resultat </h1>";
              		}
              		
              		function DiviseCalc($nombre, $nombre2) //Division nombre1 par nomnbre 2 (Attention aux divisions par 0 !)
              		{
              			if ($nombre2 != 0) {
              				$resultat = $nombre / $nombre2;
              				echo"<h1>= $resultat </h1>";
              			}
              			else {
              				echo"<h1>Pas de dsivision par 0 !</h1>";
              			}
              		}	
              		
              		//--------------------------- Début du traitement -------------------------//
              
              		if(isset($_POST['nombre2']) && isset($_POST['nombre']))
              		{
              			$nombre = $_POST['nombre'];
              			$nombre2 = $_POST['nombre2'];
              			$choix = $_POST['choix'];
              			echo "Nb1 = $nombre // Nb2 = $nombre2 // Choix = $choix";
              			switch ($choix) {
              				case 1:
              					plusCalc($nombre, $nombre2);
              					break;
              				case 2:
              					soustCalc($nombre, $nombre2);
              					break;
              				case 3:
              					multiplieCalc($nombre, $nombre2);
              					break;
              				case 4:
              					DiviseCalc($nombre, $nombre2);
              			}
              		}
              	
              ?>
              
              <!------------------------ Affichage => Code HTML ----------------------!-->
              
               <form action="test2.php" method="post">
              	<p>Saisissez:<br/> <input type="text" name="nombre" /><select name="choix">
                  <option value="1">+</option>
                  <option value="2">-</option>
                  <option value="3">x</option>
                  <option value="4">÷</option>
              </select>
              	<input type="text" name="nombre2" />
              	<input type="submit" value="Valider" />
              	</p>
              </form>
              0
              1. Un très grand merci a toi !! Je pourrais enfin faire des calculs un peu plus difficile que ca !

                Lukas
                0
              2. Modérateur
                PArfait.
                Que cela te serve de base au moins pour comprendre.
                Ce n'est pas extraordinaire mais bon.
                Ce que je disais aussi c'est que ici, les fonctions ne sont pas utiles !

                On aurait pu faire par exemple ceci :

                case 1:
                		echo "<h1>= $nombre + $nombre2 </h1>";
                		break;

                A ce moment là, toutes les fonctions ne sont pas utilisées.
                Mais l'avantage est de bien structurer le code : si tu veux modifier une fonction tu sais rapidement où cela se fait.
                0
              3. Je sais que cela n'est pas extraordinaire mais apres je voudrais resoudre des equations comme 4x + 2 = 7x - 12 (pour trouver x )

                (Site supprimé, Modération CCM)
                0
              4. Modérateur
                luki, merci de ne pas tout mélanger.
                Si tu as un souci d'hébergement, ce un nouveau topic à ce propos.
                De plus, merci de ne pas faire de publicité pour ton site ici.
                Pour les équations, aucune idée, à toi de trouver l'algorithme.
                0
            2. Je crois que j'ai trouve le probleme ...

              Dans ta saisie tu as des options tel que :
              <option value="choix1"> mais ca ne correspond pas aux "if" que tu fais ...

              Tu devrais avoir des options defini de cette facon :

              <option value="1">
              0
              1. Modérateur
                Oui, je ne l'ai pas précisé mais je l'ai modifié dans mon code :
                 <form action="test2.php" method="post">
                	<p>Saisissez:<br/> <input type="text" name="nombre" /><select name="choix">
                    <option value="1">+</option>
                    <option value="2">-</option>
                    <option value="3">x</option>
                    <option value="4">÷</option>
                </select>
                0