Php formulaire calcul de congé.

Résolu/Fermé
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 - 15 mars 2016 à 09:50
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 - 16 mars 2016 à 23:58
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.
A voir également:

7 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 15/03/2016 à 17:29
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 mars 2016 à 10:01
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
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
Modifié par Tzmagnum le 15/03/2016 à 11:50
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 mars 2016 à 11:52
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
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
15 mars 2016 à 12:12
cela m'affiche Array ( [A] => 40 [R] => 5 [Q] => 38 [S] => 38 [C] => 5 )
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 mars 2016 à 12:29
Et avec le reste du code que je t'ai donné. .. le résultat donne quoi ?
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
15 mars 2016 à 13:31
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 mars 2016 à 15:42
Et si tu fais un echo de $resultat ??
Que te donne t'il ?
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
15 mars 2016 à 16:32
Si je rajoute


echo .$resultat.;


Sa m'affiche une page toute blanche sans erreur.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
15 mars 2016 à 16:40
Que fais ce "point" devant la variable ?? et l'autre derrière ?????
Il faut simplement écrire :
echo $resultat;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
15 mars 2016 à 17:03
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 mars 2016 à 17:07
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
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
15 mars 2016 à 17:21
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
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
15 mars 2016 à 23:35
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
16 mars 2016 à 10:06
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
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
16 mars 2016 à 23:58
C'est résolu.

Un grand merci.
0