Faire des calcul en php

Fermé
msi79 - 11 janv. 2012 à 13:17
 le père - 11 janv. 2012 à 16:28
salut dois faire des calculs pour dire si le client a soldé ou non et combien il lui reste a payer . j'ai essayé c code mais ça passe pas . alors je suis ici pour avoir de l'aide .

voici le structure de mes tables :

-- Structure de la table 'candidat'
--

CREATE TABLE IF NOT EXISTS 'candidat' (
'id_c' int(15) NOT NULL AUTO_INCREMENT,
'Ncandidat' int(15) NOT NULL,
'nom' varchar(150) COLLATE utf8_unicode_ci NOT NULL,
'jourD' varchar(30) COLLATE utf8_unicode_ci NOT NULL,
'moisD' varchar(30) COLLATE utf8_unicode_ci NOT NULL,
'anneeD' varchar(30) COLLATE utf8_unicode_ci NOT NULL,
'lieuP' varchar(80) COLLATE utf8_unicode_ci NOT NULL,
'nomP' varchar(200) COLLATE utf8_unicode_ci NOT NULL,
'nomM' varchar(200) COLLATE utf8_unicode_ci NOT NULL,
'pieceP' varchar(100) COLLATE utf8_unicode_ci NOT NULL,
'domicile' varchar(80) COLLATE utf8_unicode_ci NOT NULL,
'contact' varchar(80) COLLATE utf8_unicode_ci NOT NULL,
'nationalite' varchar(80) COLLATE utf8_unicode_ci NOT NULL,
'Ndossier' varchar(80) COLLATE utf8_unicode_ci NOT NULL,
'categorieP' varchar(80) COLLATE utf8_unicode_ci NOT NULL,
'montantT' int(80) NOT NULL,
PRIMARY KEY ('id_c')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

--
-- Contenu de la table 'candidat'
--

INSERT INTO 'candidat' ('id_c', 'Ncandidat', 'nom', 'jourD', 'moisD', 'anneeD', 'lieuP', 'nomP', 'nomM', 'pieceP', 'domicile', 'contact', 'nationalite', 'Ndossier', 'categorieP', 'montantT') VALUES
(1, 10001, 'coulibaly zana souleymane', '3', '3', '1979', 'lakota', 'coulibaly T', 'minata Koné', 'c10024582', '', '01789050', 'ivoirienne', '100001', 'BCDE', 120),
(2, 10002, 'KESSE LUDVINE', '6', '7', '1983', 'bonoua', 'coulibaly T', 'minata Koné', 'c1002458200', '', '01789050', 'ivoirienne', '100002', 'B', 105),
(3, 10003, 'KONE CHANTAL', '25', '5', '1982', 'dabou', 'coulibaly T', 'minata Koné', 'c10024582458', '', '01789053', 'ivoirienne', '100003', 'C', 150),
(4, 10004, 'TOURE LAMINE', '7', '5', '1980', 'DIVO', 'TOURE HAMED', 'KONE AICHA', 'C1000155522589595', '', '01785286', 'ivoirienne', '10004', 'BCDE', 130);

-- --------------------------------------------------------


-- Structure de la table 'payement'
--

CREATE TABLE IF NOT EXISTS 'payement' (
'id_P' int(15) NOT NULL AUTO_INCREMENT,
'Ncandidat' int(15) NOT NULL,
'Npayement' varchar(50) COLLATE utf8_unicode_ci NOT NULL,
'datePay' varchar(50) COLLATE utf8_unicode_ci NOT NULL,
'MTV' varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY ('id_P')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

--
-- Contenu de la table 'payement'
--

INSERT INTO 'payement' ('id_P', 'Ncandidat', 'Npayement', 'datePay', 'MTV') VALUES
(1, 0, '1001', '07-01-2012', '100 000'),
(2, 10002, '1002', '07-01-2012', '80 000'),
(3, 10003, '1003', '07-01-2012', '80 000'),
(4, 10004, '1004', '09-01-2012', '65 0000'),
(5, 10003, '1003', '10-01-2012', '25 000'),
(6, 10003, '1003', '15-01-2012', '25 000');



NB : - MTV est la somme qu'il verse de manière echeloné s'il le veux.
- montantT : montant total qu'il a à payer .


voici le code que j'ai tenté :
merci de bien vouloir m'aider
<?php
if(isset($_POST['Ncandidat']) && !empty($_POST['Ncandidat'])){
include("connection.php");
//echo $id=(int)$_POST['Ncandidat'];
$id=(int)$_POST['Ncandidat'];
$id=mysql_real_escape_string($id);
// Passons au calcul du reste .

$nbre_total_victime = (mysql_query("SELECT COUNT(payement.MTV)
FROM candidat,payement 
where candidat.Ncandidat = payement.Ncandidat and candidat.Ncandidat='".$id."'";));
if($nbre_total_victime == 0){ echo 'vous n avez rien payer !!!';}
else{ 

$montantT =  mysql_query("SELECT candidat.montantT
FROM candidat,payement 
where candidat.Ncandidat = payement.Ncandidat and candidat.Ncandidat='".$id."'";);

if($nbre_total_victime < $montantT ) {
$reste = $montantT - $nbre_total_victime ;
   if($reste > 0){
   echo 'il vous reste a payer'.$reste; 
      if($nbre_total_victime == $montantT ){ echo 'vous avez soldé';
    }
   }
 }
	//while ($liste_etu=mysql_fetch_assoc($req)) {
//echo $reste .'est la somme qui vous reste a payer;</br>';
//echo $liste_etu['nom1'] 
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
</body>
</html>
A voir également:

3 réponses

Bonjour

Tu n'utilises pas correctement les résultats rendus par mysql_query.
En effet, mysql_query ne te rend pas directement la valeur d'un champ ; tu ne peux pas t'en servir tel quel pour faire un calcul.
mysql_query (sur un SELECT) te rend une ressource, c'est une sorte de tableau à deux dimensions qui contient les résultats (car il peut y en avoir plusieurs en général)
Tu peux extraire des informations de cette ressource avec (entre autres) :
mysql_num_rows($resource) qui te dit combien il y a de lignes dans la réponse
et mysql_fetxh_array ($resource) qui te rend une ligne du tableau dont je parlais au départ. C'est un vrai tableau PHP, celui-ci ; il représente une ligne de réponses. Les éléments de ce tableau sont les différents champs demandés dans la requête
par exemple :

$res=mysql_query("SELECT COUNT(payement.MTV) AS cnt
FROM candidat,payement 
where candidat.Ncandidat = payement.Ncandidat and candidat.Ncandidat='".$id."'";);

$ligne=mysql_fetch_array($res);
$nbre_total_victime=$ligne['cnt'];
$nbre_total_victime == 0){ echo 'vous n avez rien payer !!!';}


Il y a de nombreux tutoriaux sur l'utilisation de ces fonctions sur le web.
0
j'ai tenté de corriger mais ca marche toujours pas .

on m'affiche :
Parse error: parse error in C:\wamp\www\POJET AUTO ECOLE\reste2.php on line 16

voici le code :
<?php
if(isset($_POST['Ncandidat']) && !empty($_POST['Ncandidat'])){
include("connection.php");
$id=(int)$_POST['Ncandidat'];
$id=mysql_real_escape_string($id);
// Passons au calcul du reste .
$result=mysql_query("SELECT COUNT(payement.MTV) AS cnt
FROM candidat,payement 
where candidat.Ncandidat = payement.Ncandidat and candidat.Ncandidat='".$id."'");
$res = mysql_num_rows($result);
if($res == 0){
   while ($liste_etu=mysql_fetch_assoc($result)) {
       echo $liste_etu['cnt'];
	   echo 'vous n avez rien payé !!!!';
else {
    $result2 =  mysql_query("SELECT candidat.montantT FROM candidat,payement  where candidat.Ncandidat = payement.Ncandidat and candidat.Ncandidat='".$id."'");
	$res2 = mysql_num_rows($result2);
   if($res<$res2){
     $reste =  $res2 - $res ;
	  echo 'il vous reste'. $reste.'a payer';
	  
	   if ( $reste ==0 ){
	    echo 'vous avez soldé';
      
	   }
    }
 }
}
?>
0
La requête SELECT COUNT()... renvoie une ligne et une seule (si elle est bien écrite et ne comporte pas de GROUP BY...) Donc inutile d'utiliser mysql_num_rows sur le résultat de cette requête : tu auras toujours 1.
Par contre, il faut extraire la valeur du COUNT(blabla) et pour ça il faut utiliser mysql_fetch_array comme je te l'ai indiqué.
Remarque 1 : dans le bout de code que je t'i donné, il manquait if ( au début de la dernière ligne, j'espère que tu l'avais compris.
0