Php formulaire calcul de congé.

Résolu
Bonjour,

Je n'arrive pas a coder ce formulaire depuis 3 jours.

Cela m'affiche une page blanche.


<?php
if(!preg_match("#^[0-9]+$#", $_POST['A']) || !preg_match("#^[0-9]+$#", $_POST['R']) || !preg_match("#^[0-9]+$#", $_POST['Q']) || !preg_match("#^[0-9]+$#", $_POST['S']) || !preg_match("#^[0-9]+$#", $_POST['C']))
{
?>
<form method="post" action="">
Nombre total de jour à prendre en compte pour le calcul de la durée des vacances : <input type="text" name="A" />
Nombre moyen de jours par semaine durant lesquels le travailleur est censé travailler sur la base de son contrat : <input type="text" name="R" />
Nombre moyen d'heures par semaine durant lesquelles le travailleur est censé travailler sur la base de son contrat : <input type="text" name="Q" />
Nombre moyen d'heures par semaine durant lesquelles un travailleur à temps plein est censé travailler : <input type="text" name="S" />
<input type="hidden" name="C" value="5" />
<input type="submit" value="Calculer" />
</form>
<?php
}
else
{

$resultat = ($_POST['A'] * $_POST['C'] / $_POST['R']) * $_POST['Q'] / $_POST['S'];

// on teste si la valeur de notre variable est comprise entre 0 et 9

if ($resultat >= 0 && $resultat < 10) {

echo 'Vu que vous avez travaillé ' $resultat. ' jour(s) l\'année précédente vous avez droit à aucun jour de congé';

}

// on teste si la valeur de notre variable est comprise entre 10 et 19
elseif ($resultat >= 10 && $resultat < 20) {

echo 'Vu que vous avez travaillé ' $resultat. ' jour(s) l\'année précédente vous avez droit à 1 jour de congé';

}

// on teste si la valeur de notre variable est comprise entre 20 et 38
elseif ($resultat >= 20 && $resultat < 39) {

echo 'Vu que vous avez travaillé ' $resultat. ' jour(s) l\'année précédente vous avez droit à 2 jours de congés';

}

else {

// si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas

echo ' ';

}

}

?>


Savez-vous me dire pourquoi svp ?

Merci d'avance.

Bien à vous.

7 réponses

  1. Modérateur
    Bonjour,

    1 - Ajoutes la ligne suivante au début de ton script :
     error_reporting(E_ALL);


    2 - Tu as des erreurs de syntaxe .... tu as oublié des "points".
    par exemple :
     echo 'Vu que vous avez travaillé ' $resultat. ' jour(s) 
    

    A remplacer par :

     echo 'Vu que vous avez travaillé ' . $resultat . ' jour(s) 
    


    3 - Merci de spécifier le "langage" dans les balises de code lorsque tu postes du code sur le forum.
    Explications disponibles ici :
    https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

    .
    .
    0
    1. Merci,

      j'ai modifié cela.

      Maintenant la page s'affiche, mais le calcul ne se fait pas, $resultat apparait toujours comme 0.

      D'où cela pourrait venir svp ?

      Merci.

      Voici le lien de la page en question pour que vous puissiez voir :

      http://liberty-chat.be/stp_dev/tools/conges.php

      Voici le code modifié :

      <?php
      
      if(!preg_match("#^[0-9]+$#", $_POST['A']) || !preg_match("#^[0-9]+$#", $_POST['R']) || !preg_match("#^[0-9]+$#", $_POST['Q'])  || !preg_match("#^[0-9]+$#", $_POST['S']))
      {
      ?>
      <form method="post" action="">
       Nombre total de jour à prendre en compte pour le calcul de la durée des vacances : <input type="text" name="A" /><br />
       Nombre moyen de jours par semaine durant lesquels le travailleur est censé travailler sur la base de son contrat : <input type="text" name="R" /><br />
       Nombre moyen d'heures par semaine durant lesquelles le travailleur est censé travailler sur la base de son contrat : <input type="text" name="Q" /><br />
       Nombre moyen d'heures par semaine durant lesquelles un travailleur à temps plein est censé travailler : <input type="text" name="S" /><br />
       <input type="hidden" name="C" value"5" /><br />
       <input type="submit" value="Calculer" />
      </form>
      <?php
      }
      else
      {
       $resultat = ($_POST['A'] * $_POST['C'] / $_POST['R']) * $_POST['Q'] / $_POST['S'];
       
      // on teste si la valeur de notre variable est comprise entre 0 et 9
      
      if ($resultat >= 0 && $resultat < 10) {
      
       echo 'Vu que vous avez travaillé' .$resultat.' jour(s) l\'année précédente vous avez droit à aucun jour de congé';
       
      }
      
      // on teste si la valeur de notre variable est comprise entre 10 et 19
      elseif ($resultat >= 10 && $resultat < 20) {
      
      
       echo 'Vu que vous avez travaillé' .$resultat.' jour(s) l\'année précédente vous avez droit à 1 jour de congé';
      
      }
      
      else {
      
       // si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas
      
       echo '';
      
      }
      
      }
      
      
      
      ?>
      
      0
      1. Modérateur
        Fais donc un PRINT des variables histoire que l'on sache ce qu'elles contiennent.
        print_r($_POST);
        


        De plus, .. pense à récupérer "proprement" les variables AVANT de les utiliser.
        pour se faire tu peux utiliser ISSET et l'écriture TERNAIRE
        Comme ceci :
        
        $A = isset($_POST['A']) ? (float)$_POST['A'] : 0;
        $R = isset($_POST['R']) ? (float)$_POST['R'] : 0;
        $C = isset($_POST['C']) ? (float)$_POST['C'] : 0;
        $Q = isset($_POST['Q']) ? (float)$_POST['Q'] : 0;
        $S = isset($_POST['S']) ? (float)$_POST['S'] : 0;
        
         $resultat = ($A * $C / $R) * $Q / $S;
        
        
        0
      2. cela m'affiche Array ( [A] => 40 [R] => 5 [Q] => 38 [S] => 38 [C] => 5 )
        0
      3. Modérateur
        Et avec le reste du code que je t'ai donné. .. le résultat donne quoi ?
        0
    2. Cela ne m'affiche rien de plus que Array ( [A] => 40 [R] => 5 [Q] => 38 [S] => 38 [C] => 5 ).

      Cependant je sais pas si je le met bien au bon endroit.

      Merci

      Voici le lien de la page en question pour que vous puissiez voir :

      http://liberty-chat.be/stp_dev/tools/conges.php

      Voici le code modifié :

      <?php
      header('Content-type: text/html; charset=utf-8');
      
      if(!preg_match("#^[0-9]+$#", $_POST['A']) || !preg_match("#^[0-9]+$#", $_POST['R']) || !preg_match("#^[0-9]+$#", $_POST['Q'])  || !preg_match("#^[0-9]+$#", $_POST['S']))
      {
      ?>
      <form method="post" action="">
       Nombre total de jour à prendre en compte pour le calcul de la durée des vacances : <input type="text" name="A" /><br />
       Nombre moyen de jours par semaine durant lesquels le travailleur est censé travailler sur la base de son contrat : <input type="text" name="R" /><br />
       Nombre moyen d'heures par semaine durant lesquelles le travailleur est censé travailler sur la base de son contrat : <input type="text" name="Q" /><br />
       Nombre moyen d'heures par semaine durant lesquelles un travailleur à temps plein est censé travailler : <input type="text" name="S" /><br />
       <input type="hidden" name="C" value="5" /><br />
       <input type="submit" value="Calculer" />
      </form>
      <?php
      }
      else
      {
      
      $A = isset($_POST['A']) ? (float)$_POST['A'] : 0;
      $R = isset($_POST['R']) ? (float)$_POST['R'] : 0;
      $C = isset($_POST['C']) ? (float)$_POST['C'] : 0;
      $Q = isset($_POST['Q']) ? (float)$_POST['Q'] : 0;
      $S = isset($_POST['S']) ? (float)$_POST['S'] : 0;	
      	
      print_r($_POST);
      	
       $resultat = ($A * $C / $R) * $Q / $S;
      // on teste si la valeur de notre variable est comprise entre 0 et 9
      
      if ($resultat >= 0 && $resultat < 10) {
      
      	echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à aucun jour de congé';
      	
      }
      
      // on teste si la valeur de notre variable est comprise entre 10 et 19
      elseif ($resultat >= 10 && $resultat < 20) {
      
      
      	echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 1 jour de congé';
      
      }
      
      else {
      
      	// si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas
      
      	echo '';
      
      }
      
      }
      
      
      
      ?>
      
      
      0
      1. Modérateur
        Et si tu fais un echo de $resultat ??
        Que te donne t'il ?
        0
      2. Si je rajoute

        echo .$resultat.;


        Sa m'affiche une page toute blanche sans erreur.
        0
      3. Modérateur
        @TzmagnumQue fais ce "point" devant la variable ?? et l'autre derrière ?????
        Il faut simplement écrire :
        echo $resultat;
        
        0
    3. Désolé, je débute, c'est pour apprendre que je code ces quelques pages.

      Avec

      echo $resultat; 


      cela m'affiche également une page toute blanche.
      0
      1. Modérateur
        Peux tu me remontrer le code complet de ta page ? (avec toutes les modifs demandées...)
        Tu as bien mis la ligne error_reporting comme indiqué au début de cette discussion ???
        0
    4. Oui je l'ai mis

      Voici le code complet:

      <?php
      error_reporting(E_ALL);
       
      header('Content-type: text/html; charset=utf-8');
      
      if(!preg_match("#^[0-9]+$#", $_POST['A']) || !preg_match("#^[0-9]+$#", $_POST['R']) || !preg_match("#^[0-9]+$#", $_POST['Q'])  || !preg_match("#^[0-9]+$#", $_POST['S']))
      {
      ?>
      <form method="post" action="">
       Nombre total de jour à prendre en compte pour le calcul de la durée des vacances : <input type="text" name="A" /><br />
       Nombre moyen de jours par semaine durant lesquels le travailleur est censé travailler sur la base de son contrat : <input type="text" name="R" /><br />
       Nombre moyen d'heures par semaine durant lesquelles le travailleur est censé travailler sur la base de son contrat : <input type="text" name="Q" /><br />
       Nombre moyen d'heures par semaine durant lesquelles un travailleur à temps plein est censé travailler : <input type="text" name="S" /><br />
       <input type="hidden" name="C" value="5" /><br />
       <input type="submit" value="Calculer" />
      </form>
      <?php
      }
      else
      {
      
      $A = isset($_POST['A']) ? (float)$_POST['A'] : 0;
      $R = isset($_POST['R']) ? (float)$_POST['R'] : 0;
      $C = isset($_POST['C']) ? (float)$_POST['C'] : 0;
      $Q = isset($_POST['Q']) ? (float)$_POST['Q'] : 0;
      $S = isset($_POST['S']) ? (float)$_POST['S'] : 0;	
      	
      print_r($_POST)
      	
       $resultat = ($A * $C / $R) * $Q / $S;
      // on teste si la valeur de notre variable est comprise entre 0 et 9
       echo $resultat;
      
      	if ($resultat >= 0 && $resultat < 10) {
      
      	echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à aucun jour de congé';
      	
      }
      
      // on teste si la valeur de notre variable est comprise entre 10 et 19
      elseif ($resultat >= 10 && $resultat < 20) {
      
      
      	echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 1 jour de congé';
      
      }
      
      else {
      
      	// si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas
      
      	echo '';
      
      }
      
      }
      
      
      
      ?>
      
      
      0
      1. Modérateur
        Essayes ça :
        <?php
        header('Content-type: text/html; charset=utf-8');
        
        //------------------------------------------------------------//
        //Affichage des erreurs PHP
        //------------------------------------------------------------//
        error_reporting(E_ALL);
         
        
         //------------------------------------------------------------//
         //Récupération propre des variables:
         //------------------------------------------------------------//
        $A = isset($_POST['A']) ? (float)$_POST['A'] : 0;
        $R = isset($_POST['R']) ? (float)$_POST['R'] : 0;
        $C = isset($_POST['C']) ? (float)$_POST['C'] : 0;
        $Q = isset($_POST['Q']) ? (float)$_POST['Q'] : 0;
        $S = isset($_POST['S']) ? (float)$_POST['S'] : 0; 
        
        $resultat = ($A * $C / $R) * $Q / $S;
        
        //------------------------------------------------------------//
        //le temps des tests :.
        //------------------------------------------------------------//
        print_r($_POST);
        echo $resultat; 
        
        //------------------------------------------------------------//
        if(!preg_match("#^[0-9]+$#", $_POST['A'])
           || !preg_match("#^[0-9]+$#", $_POST['R']) 
           || !preg_match("#^[0-9]+$#", $_POST['Q'])  
           || !preg_match("#^[0-9]+$#", $_POST['S'])){
        ?>
        <form method="post" action="">
         Nombre total de jour à prendre en compte pour le calcul de la durée des vacances : <input type="number" name="A" /><br />
         Nombre moyen de jours par semaine durant lesquels le travailleur est censé travailler sur la base de son contrat : <input type="number" name="R" /><br />
         Nombre moyen d'heures par semaine durant lesquelles le travailleur est censé travailler sur la base de son contrat : <input type="number" name="Q" /><br />
         Nombre moyen d'heures par semaine durant lesquelles un travailleur à temps plein est censé travailler : <input type="number" name="S" /><br />
         <input type="hidden" name="C" value="5" /><br />
         <input type="submit" value="Calculer" />
        </form>
        <?php
        } else {
         if ($resultat >= 0 && $resultat < 10) {
            echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à aucun jour de congé';
         }elseif ($resultat >= 10 && $resultat < 20) {
          // on teste si la valeur de notre variable est comprise entre 10 et 19
           echo 'Vu que vous avez travaillé ' .$resultat.' jour(s) l\'année précédente vous avez droit à 1 jour de congé';
          } else {
            // si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas
            echo '';
          }
        }
        ?>
        


        Cordialement, 
        Jordane                                                                 
        1
        1. Désolé de la réponse tardive, je n'avais plus accès à un ordinateur.

          Cela ne fonctionne pas avec cette modification, j'ai pourtant juste fais un copier/coller.

          Sa m'affiche cela au dessus de la page :


          Warning: Division by zero in /var/www/stp_dev/tools/conges.php on line 19 Call Stack: 0.0003 243376 1. {main}() /var/www/stp_dev/tools/conges.php:0 Warning: Division by zero in /var/www/stp_dev/tools/conges.php on line 19 Call Stack: 0.0003 243376 1. {main}() /var/www/stp_dev/tools/conges.php:0 Array ( ) Notice: Undefined index: A in /var/www/stp_dev/tools/conges.php on line 28 Call Stack: 0.0003 243376 1. {main}()


          Et puis quand je remplis mes cases et que je clique sur calculer sa m'affiche une page blanche avec juste ceci de noté tout en haut :


          Array ( [A] => 41 [R] => 5 [Q] => 38 [S] => 38 [C] => 5 ) 41


          Merci.
          0
          1. Modérateur
            Donc c'est bon.

            Il ne te reste plus qu'à gérer la division par zéro.
            Par exemple en faisant :
            if($R>0 && $S>0){
             $resultat = ($A * $C / $R) * $Q / $S;
            }
            

            Le reste fonctionne visiblement.
            Tu as bien le calcul qui est fait : => 41
            Si rien d'autre n'apparait ... c'est par ce que tu es dans le ELSE de ton IF ... et que dedans ... tu as juste fais un
            echo '' ;
            0
          2. C'est résolu.

            Un grand merci.
            0