Page 1 sur 1

condition if

Posté : 12 juin 2006, 09:49
par béka
Bonjour tout le monde, je fais une requete SQL et si celle-ci ne trouve pas de résultat, elle devrai afficher un message d'erreur. Mais lorsqu'il n'y a pas de résultat, elle n'affiche rien. Pourquoi?

Voila mon code :
//requete SQL
$sql = "SELECT id, milieu_professionnel FROM `offre_stage`";
$req = mysql_query($sql);
//Boucle d'affichage des liens qui affiche le titre est envoie l'id
while ($affichage = mysql_fetch_array($req)){ ?>
<p class="Texte"><a href="milieu2.php?id=<? echo $affichage[0]; ?>"><font color="black"><? echo $affichage['milieu_professionnel']; ?> <br></font></a></p>
<? 
}
if ($affichage=false)
{
echo "il n'y a aucun renseignement correspondant à votre requète"; }
mysql_close($db);

Posté : 12 juin 2006, 09:50
par charabia
Tite erreur dans ton if :
if($affichage==false)

Posté : 12 juin 2006, 09:58
par béka
en faisant ainsi, ca m'affiche la liste des résultat ET la phrase "il n'y a aucun renseignement correspondant à votre requète" en bas, en dessous des résultats.

Posté : 12 juin 2006, 10:04
par guilt92
en faisant ainsi, ca m'affiche la liste des résultat ET la phrase "il n'y a aucun renseignement correspondant à votre requète" en bas, en dessous des résultats.
C'est assez logique en fait. Tu fais ta requetes, tu affiches les résultats dans ton while tant qu'il y en a et apres tu demandes si la variable est à false, ce qui est le cas puisque le dernier mysql_fetch_array met ta variable a false ce qui permet de sortir du while.

Comme le message d'erreur est affiché après c est normal que tu aies les 2. J espere etre clair.

Posté : 12 juin 2006, 10:05
par Tictac
hello , tu devrais plutot faire =>
<?
//requete SQL 
$sql = "SELECT id, milieu_professionnel FROM `offre_stage`"; 
$req = mysql_query($sql); 

//combien de résultat ?///////////
/////////////////////////////////////
$nb_enregistrement = mysql_num_rows($req);

//si il existe des enregistrements//////////
/////////////////////////////////////////////////
if($nb_enregistrement > 0)
   {
//Boucle d'affichage des liens qui affiche le titre est envoie l'id 
for($i=0;$i<$nb_enregsitrement;$i++)
         {
         $affichage = mysql_fetch_array($req)
?>
<p class="Texte"><a href="milieu2.php?id=<? echo $affichage[0]; ?>"><font color="black"><? echo $affichage['milieu_professionnel']; ?> <br></font></a></p> 
<? 
    }//end for
} //end if
else
{ 
echo "il n'y a aucun renseignement correspondant à votre requète"; 
} 
mysql_close($db);

Posté : 12 juin 2006, 10:07
par béka
pour répondre à guilt92, en fait, j'aurais du fair le if et dans le if mettre le while ? je suis clair mon aussi?

Posté : 12 juin 2006, 10:14
par guilt92
pour répondre à guilt92, en fait, j'aurais du fair le if et dans le if mettre le while ? je suis clair mon aussi?
La meilleure solution pour vérifier qu'un affichage ne soit pas vide est bien sur de la faire avant de l afficher, en utilisant par exemple la solution proposée par Tictac qui est mysql_num_rows() qui te sert a compter le nombre de résulats de ta requète. Ainsi tu ne l'affiche que si le nombre de résultats est supérieur à 0, et sinon tu mets ton message d erreur.

Le problème avec le while dans le if est $affichage n'est définie qu'à partir du mysql_fetch donc si tu fais un if avant il ne rentrera pas dedans, et en revanche si tu le fais avant ton while perdra le premier enregistrement car il refera un mysql_fetch pour entrer dans sa boucle... bref je te conseille vivement l'utilisation de mysql_num_rows() :)

Posté : 12 juin 2006, 10:16
par béka
oui mais alors, en faisant ainsi :
<? 
include("../../connexion.php");
//requete SQL 
$sql = "SELECT id, milieu_professionnel FROM `offre_emploi`"; 
$req = mysql_query($sql); 

//combien de résultat ?/////////// 
///////////////////////////////////// 
$nb_enregistrement = mysql_num_rows($req); 

//si il existe des enregistrements////////// 
///////////////////////////////////////////////// 
if($nb_enregistrement > 0) 
   { 
//Boucle d'affichage des liens qui affiche le titre est envoie l'id 
for($i=0;$i<$nb_enregsitrement;$i++) 
         { 
         $affichage = mysql_fetch_array($req); 
?> 
<p class="Texte"><a href="milieu2.php?id=<? echo $affichage[0]; ?>"><font color="black"><? echo $affichage['milieu_professionnel']; ?> <br></font></a></p> 
<? 
    }//end for 
} //end if 
else 
{ 
echo "il n'y a aucun renseignement correspondant à votre requète"; 
} 
mysql_close($db);
rien ne s'affiche alors qu'il y a des informations dans ma base.

Posté : 12 juin 2006, 10:18
par guilt92
faute de frappe dans le code :

for($i=0;$i<$nb_enregistrement;$i++)

Posté : 12 juin 2006, 10:22
par béka
non mais j'ai remplacé ta boucle for par une boucle while et ca marche bien
alors je vais laisser comme ca, merci