Utilisation de condition if

msi079 Messages postés 212 Date d'inscription lundi 2 août 2010 Statut Membre Dernière intervention 25 juillet 2013 - 14 janv. 2012 à 17:24
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 15 janv. 2012 à 03:23
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

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
15 janv. 2012 à 03:23
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)
0
Rejoignez-nous