Pb de calcul

Petit nouveau ! | 3 Messages

05 févr. 2010, 22:11

Bonjour a tous, actuellement entreint de créer une application en PHP pour la gestion des congés de notre société, je suis arrivé a un point ou je bloque complètement !
Mon appli permet d'ajouter un employé, de lui ajouter des jours de congés acquis, des heures de repos acquis, de lui en déduire aussi, et enfin de modifier une date de départ ou de retour.
Quand une mofidication de date de départ ou de retour doit se faire, tout un calcul (ajout ou déduction de jour ou d'heure à faire) se fait et c'est là que mon calcul ne se fait pas parfaitement !

Par exemple:
$dmd1 = '$query5[conges_pr]' - '$conge_dmd';
$new_solde = '$query3[solde_conge]' + '$dmd1';

et lors de l'activation il se passe ceci:
1 = 3 -2
1 = 1 + 1
<?php
include('connect.php');

if ((isset($_POST['nom'])) AND (isset($_POST['prenom'])) AND (isset($_POST['conge_dmd'])) AND (isset($_POST['date_dep'])) AND (isset($_POST['date_ret'])) AND (isset($_POST['new_date_dep'])))	//si zone de texte rempli
{
	$nom = $_POST['nom']; // variable <- zone de texte
	$prenom = $_POST['prenom'];
	$conge_dmd = $_POST['conge_dmd'];
	$date_dep = $_POST['date_dep'];
	$date_ret = $_POST['date_ret'];
	$new_date_dep = $_POST['new_date_dep'];
}

else
{
	$nom = ""; // sinon variable <- vide
	$prenom = "";
	$conge_dmd = "";
	$date_dep = "";
	$date_ret = "";
	$new_date_dep = "";
}

// récupère le id_agent
	$query = mysql_query("SELECT id_agent
				FROM agent
				WHERE nom = '$nom'
				AND prenom = '$prenom'") or die ("Erreur de requête 1 : ".mysql_error());
				
	$query1 = mysql_fetch_array($query);

// récupère le solde_congé actuel
	$query2 = mysql_query("SELECT solde_conge
				FROM agent
				WHERE id_agent = '$query1[id_agent]'") or die ("Erreur de requête 2 : ".mysql_error());
				
	$query3 = mysql_fetch_array($query2);

// récupère le nbrs de congés pris
	$query4 = mysql_query("SELECT conges_pr
				FROM conges_pris
				WHERE id_agent = '$query1[id_agent]'
				AND deb_per_pr = '$date_dep'
				AND fin_per_pr = '$date_ret'") or die ("Erreur de requête 3 : ".mysql_error());
				
	$query5 = mysql_fetch_array($query4);
	
if ($new_date_dep > $date_dep) // si nouvelle date > date de départ prévu
{
	$dmd1 = '$query5[conges_pr]' - '$conge_dmd';
	$new_solde = '$query3[solde_conge]' + '$dmd1';
	
// met a jour le solde congé de AGENT
	mysql_query("UPDATE agent
				SET solde_conge = '$new_solde'
				WHERE id_agent = '$query1[id_agent]'") or die ("Erreur de requête 4 : ".mysql_error());
	
// met a jour la nouvelle date de départ
	mysql_query("UPDATE conges_pris
				SET deb_per_pr = '$new_date_dep', conges_pr = '$dmd1', solde_conge = '$new_solde'
				WHERE id_agent = '$query1[id_agent]'
				AND deb_per_pr = '$date_dep'
				AND fin_per_pr = '$date_ret'") or die ("Erreur de requête 5 : ".mysql_error());
	
}

else
{
	$dmd2 =  '$conge_dmd' - '$query5[conges_pr]';
	$new_solde = '$query3[solde_conge]' - '$dmd2';
	
// met a jour le solde congé
	mysql_query("UPDATE agent
				SET solde_conge = '$new_solde'
				WHERE id_agent = '$query1[id_agent]'") or die ("Erreur de requête 7 : ".mysql_error());
	
// met a jour la nouvelle date de départ
	mysql_query("UPDATE conges_pris
				SET deb_per_pr = '$new_date_dep', conges_pr = '$dmd2', solde_conge = '$new_solde'
				WHERE id_agent = '$query1[id_agent]'
				AND deb_per_pr = '$date_dep'
				AND fin_per_pr = '$date_ret'") or die ("Erreur de requête 6 : ".mysql_error());
}	

mysql_close($conn);	//ferme la connection a la BDD

if ($nom != NULL AND $prenom != NULL AND $new_date_dep != NULL AND $date_dep != NULL AND $date_ret) // si les variables diff de vide
{
	
// on affiche la page cachée
?>

ViPHP
ViPHP | 5462 Messages

05 févr. 2010, 22:23

normal t'as mis des quotes.....

Petit nouveau ! | 3 Messages

07 févr. 2010, 06:31

excuse moi mais qu'est ce que des quotes ?? quote = appostrophe ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 févr. 2010, 13:09

excuse moi mais qu'est ce que des quotes ?? quote = appostrophe ?
Exactement :)

En fait, dans la mesure où tes variables se trouvent plaçées entre apostrophes, ce n'est pas les valeurs que tu demandes d'additionner ou soustraire à php, mais des chaines de caractères.... résultat, ça ne peut pas marcher comme tu le souhaites :)

Si tu délimites une chaine avec des guillemets (") php va essayer d'évaluer les variables éventuelles qui se trouve à l'intérieur avant de traiter la chaine de caractères obtenue. Si ta chaine est délimitée avec des apostrophes ('), alors php considère qu'il s'agit de la chaine de caractères finale et ne fait aucune modification.

D'une manière général, il est recommandé de sortir ses variables des chaines, pour plus de lisibilité et surtout pour éviter ce genre de problème :) (Et c'est d'autant plus vrai si tu travailles avec des nombres et pas des chaines de caractères ;))
        $dmd1 = $query5['conges_pr'] - $conge_dmd;
        $new_solde = $query3['solde_conge'] + $dmd1;
Nota : Il faut cependant conserver tes apostrophes autour du nom de l'index, qui lui est bien une chaine de caractères
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

08 févr. 2010, 20:59

Excelent sa fonctionne !
Merci bcp "stealth35" et "Ryle" de m'avoir aidé.