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
    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. 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

      .
      .
      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 '';
        
        }
        
        }
        
        
        
        ?>
        
        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;
          
          
        2. cela m'affiche Array ( [A] => 40 [R] => 5 [Q] => 38 [S] => 38 [C] => 5 )
        3. Modérateur
          Et avec le reste du code que je t'ai donné. .. le résultat donne quoi ?
      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 '';
        
        }
        
        }
        
        
        
        ?>
        
        
        1. Modérateur
          Et si tu fais un echo de $resultat ??
          Que te donne t'il ?
        2. Si je rajoute

          echo .$resultat.;


          Sa m'affiche une page toute blanche sans erreur.
        3. Modérateur
          @TzmagnumQue fais ce "point" devant la variable ?? et l'autre derrière ?????
          Il faut simplement écrire :
          echo $resultat;
          
      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.
        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 ???
      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 '';
        
        }
        
        }
        
        
        
        ?>
        
        
        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.
          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 '' ;
          2. C'est résolu.

            Un grand merci.