Salut,
Ta conditions fonctionen bien, c'est juste que tu n'as aps encore totalement compris le fonctionnement de isset. Si on résume ton code on a ceci :
<?php
if (condition)
$res = valeur;
else
$res = null;
echo $res2 = isset($res2) ? $res2 : null;
if($res2 == 0)
instruction;
else
instruction;
?>
Dans ton code, quel que soit le résultat de la condition du if, tu affecte une valeur à $res. Et oui, null est une valeur, nulle mais c'est une valeur quand même. Du coup, quand après tu fais un test avec isset(), le test est toujours vrai vu que $res est définie. Tu dois remplacer isset() par un test sur null.
Second piège : l'opérateur effectue des conversion de type. À cause de ça, 0 et null sont égaux. Pour éviter ceci, tu dois utiliser l'opérateur qui compare également le type.
Au passage, quelques autres modifications que tu peux faire :
if(isset($_POST['Ncandidat']) && !empty($_POST['Ncandidat'])){
Le isset() ne sert à rien ici vu que empty() s'en charge :
if(!empty($_POST['Ncandidat'])){
$id=(int)$_POST['Ncandidat'];
$id=mysql_real_escape_string($id);
Ici, c'est mysql_real_escape_string() qui est totalement inutile. En effet, tu convertis ton nombre en entier, qui sera lui même implicitement reconvertis en chaîne de caractère. Cette second conversion n'introduit aucun caractère qui ai besoin d'être échapper.
$id=(int)$_POST['Ncandidat'];
$sql2 = "SELECT candidat.montantT - SUM(payement.MTV) AS reste
FROM candidat,payement
where candidat.Ncandidat = payement.Ncandidat and candidat.Ncandidat='".$id."'";
Quelques remarques ici :
- Parce que tu utilises le double quote (") et non le simple quote (') tu as une expansion qui est effectuée sur la chaîne de caractère et donc tu n'as pas besoin de concaténer plusieurs chaînes avec $id, tu peux laisser $id dans la chaîne.
- Parce que $id est un entier, ta requête SQL n'a pas besoin de le mettre entre quotes.
- Il est mieux pour la lisibiliter de se conformer à une seule case sur l'écriture des mot-clé MySQL. Et entre le lowercase et le uppercase, on préféreras le uppercase.
- Pour les jointures, utiliser un mot clé explicite est prête moins à confusion que la simple virgule.
$sql2 = "SELECT candidat.montantT - SUM(payement.MTV) AS reste
FROM candidat INNER JOIN payement ON candidat.Ncandidat = payement.Ncandidat
WHERE candidat.Ncandidat=$id";
$req2 = mysql_query($sql2) or die('Erreur SQL !
'.$sql2.'
'.mysql_error());
Attention, ne fais de l'affichage d'erreur que lorsque tu veux débugger ta requête, il ne faut jamais que l'utilisateur puisse voire l'erreur exacte :
- Parce qu'un utilisateur lambda prendra peur.
- Parce qu'un utilisateur mal intentionné peut en tirer des informations sur ta base de donnée afin d'en sous-tirer des informations ou bien sen aider pour mettre au point une injection SQL si jamais il en a la possibilité.
echo $res2 = isset($res2) ? $res2 : null;
Totalement inutile.
if($res2 == 0)
Tout comme je l'ai expliqué plus haut, il te faut tester sur null avec l'opérateur ===.
if($res2 === null)