condition if

Mammouth du PHP | 536 Messages

12 juin 2006, 09:49

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);
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

12 juin 2006, 09:50

Tite erreur dans ton if :
if($affichage==false)

Mammouth du PHP | 536 Messages

12 juin 2006, 09:58

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.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 1353 Messages

12 juin 2006, 10:04

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.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 353 Messages

12 juin 2006, 10:05

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);

Mammouth du PHP | 536 Messages

12 juin 2006, 10:07

pour répondre à guilt92, en fait, j'aurais du fair le if et dans le if mettre le while ? je suis clair mon aussi?
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 1353 Messages

12 juin 2006, 10:14

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() :)
Modifié en dernier par guilt92 le 12 juin 2006, 10:17, modifié 1 fois.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 536 Messages

12 juin 2006, 10:16

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.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 1353 Messages

12 juin 2006, 10:18

faute de frappe dans le code :

for($i=0;$i<$nb_enregistrement;$i++)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 536 Messages

12 juin 2006, 10:22

non mais j'ai remplacé ta boucle for par une boucle while et ca marche bien
alors je vais laisser comme ca, merci
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!