Php formulaire calcul de congé.

Résolu
Tzmagnum Messages postés 132 Statut Membre -  
Tzmagnum Messages postés 132 Statut Membre -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  3. Tzmagnum Messages postés 132 Statut Membre
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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. Tzmagnum Messages postés 132 Statut Membre
       
      cela m'affiche Array ( [A] => 40 [R] => 5 [Q] => 38 [S] => 38 [C] => 5 )
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Et avec le reste du code que je t'ai donné. .. le résultat donne quoi ?
      0
  4. Tzmagnum Messages postés 132 Statut Membre
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Et si tu fais un echo de $resultat ??
      Que te donne t'il ?
      0
    2. Tzmagnum Messages postés 132 Statut Membre
       
      Si je rajoute


      echo .$resultat.;


      Sa m'affiche une page toute blanche sans erreur.
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Tzmagnum Messages postés 132 Statut Membre
         
        Que fais ce "point" devant la variable ?? et l'autre derrière ?????
        Il faut simplement écrire :
        echo $resultat;
        
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Tzmagnum Messages postés 132 Statut Membre
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  7. Tzmagnum Messages postés 132 Statut Membre
     
    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
  8. Tzmagnum Messages postés 132 Statut Membre
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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. Tzmagnum Messages postés 132 Statut Membre
       
      C'est résolu.

      Un grand merci.
      0