Utilisation de condition if

Signaler
Messages postés
229
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
25 juillet 2013
-
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
-
salut je veux utiliser la condition if dans mon code mais je constate que le condition marche pas .le code marche mais ne tiens pas compte de la condition if . je suis debutant en php veuillez bien m'aider si possible mettre des commentaire pour explication .
voici mon code :
<?php
 
//print_r($_POST);
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);
$sql2 = "SELECT candidat.montantT - SUM(payement.MTV) AS reste
FROM candidat,payement 
where candidat.Ncandidat = payement.Ncandidat and candidat.Ncandidat='".$id."'";
/*
$query = "SELECT candidat.Ncandidat,candidat.nom,candidat.pieceP,candidat.contact,candidat.nationalite,payement.Npayement,payement.datePay,payement.MTV ".
"FROM candidat, payement ".
"WHERE candidat.Ncandidat = payement.Ncandidat";   */
$req2 = mysql_query($sql2) or die('Erreur SQL !
'.$sql2.'
'.mysql_error());


$res2=null;

while ($liste_etu=mysql_fetch_assoc($req2)) {

  //$j=$i%2;

  
  $res2.='<tr bgcolor=#FFFFCC>

 
  <td bgcolor="#CCCCCC"></td>
  </tr>';

  
  }

}else{
$res2=null;
}
 echo $res2 = isset($res2) ? $res2 : null;
 
if($res2 == 0)
  {
     echo 'vous avez soldé !!!';
  }else 
  {
    echo 'vous navez pas encore soldé merci de bien vouloir continuer à payer';
  }
  

?>

1 réponse

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
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)