Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1106 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Besoin d'aide sur une boucle "if else if else"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besoin d'aide sur une boucle "if else if else"

n°2044919
Antoine T
Posté le 29-12-2010 à 10:02:20  profilanswer
 

Bonjour,
 
J'essaye de passer une BD Access sur SQL avec une interface PHP. Cette BD est très complexe, et je progresse petit à petit. Pourtant, le résultat que j'obtiens sur une boucle if, else if, else est assez bizarre, et je patine depuis quelques temps pour m'en dépatouiller. Je sollicite donc votre aide pour un p'tit coup de pouce. Voilà la partie qui pose problème :
 

Code :
  1. $req = mysql_query($req_search,$db_link) or die(mysql_error());
  2. $nb_stage = mysql_num_rows($req);
  3. $_SESSION['j']=1;
  4. if($nb_stage=4){
  5.     while($row = mysql_fetch_array($req)){
  6.       include("aff_stage.php" );
  7.       $_SESSION['j']++;
  8.   }
  9. }
  10. else if($nb_stage=3){
  11.     while($row = mysql_fetch_array($req)){
  12.       include("aff_stage.php" );
  13.       $_SESSION['j']++;
  14.   }
  15. }
  16. else if($nb_stage=2){
  17.     while($row = mysql_fetch_array($req)){
  18.       include("aff_stage.php" );
  19.       $_SESSION['j']++;
  20.   }
  21. }
  22. else if($nb_stage=1){
  23.   $row = mysql_fetch_array($req);
  24.     include("aff_stage.php" );
  25. }
  26. else{
  27.   echo "Aucun stage pour ce stagiaire";
  28. }


 
Les trois premières boucles fonctionnent bien, si j'ai 4 stages, 3 stages ou 2 stages, l'affichage des stages fonctionnent. Les deux dernières boucles ne fonctionnent pas si 1 stage ou aucun stage. Je n'ai même pas l'include de aff_stage.php, et encore moins un message d'erreur.
 
Voilà le code de aff_stage.php si ça vous ait utile.  
 

Code :
  1. <?php
  2. $stage = $_SESSION['j'];
  3. echo "stage : $stage";
  4. ?>
  5. <?php
  6. echo '
  7.   <TABLE>
  8.     <TR BGCOLOR="#AAAAAA">
  9.       <TD>Lieux :</TD>
  10.       <TD>'.$row["lieux"].'</TD>
  11.     </tr>
  12.  
  13.     <TR BGCOLOR="#AAAAAA">
  14.       <TD>Dispositif :</TD>
  15.       <TD>'.$row["disp"].'</TD>
  16.     </TR>
  17.   </TABLE>
  18.   ';
  19. ?>


 
Franchement, je tourne en rond, et je ne trouve aucune solution...  
 
Merci de votre aide !

mood
Publicité
Posté le 29-12-2010 à 10:02:20  profilanswer
 

n°2044920
flo850
moi je
Posté le 29-12-2010 à 10:09:30  profilanswer
 

'opérateur de comparaison est == en php , pas =

n°2044925
Antoine T
Posté le 29-12-2010 à 10:33:18  profilanswer
 

Merci, ça fonctionne à présent pour le cas "aucun stage", mais si un stagiaire a effectué un seul stage, ça m'affiche aussi "aucun stage". Autrement dit, les lignes 23 à 26 ne fonctionnent pas :(
 
EDIT : j'ai rien dit, ça fonctionne aussi !


Message édité par Antoine T le 29-12-2010 à 10:34:55
n°2044926
flo850
moi je
Posté le 29-12-2010 à 10:39:13  profilanswer
 

Pourquoi tu fais des if else dans tous les sens ?  
ils font tous la même chose
 
Un simple :  

Code :
  1. $req = mysql_query($req_search,$db_link) or die(mysql_error());
  2. $nb_stage = mysql_num_rows($req);
  3. $_SESSION['j']=1;
  4. if($nb_stage> 0 ){
  5.    while($row = mysql_fetch_array($req)){
  6.      include("aff_stage.php" );
  7.      $_SESSION['j']++;
  8.  }
  9. }else{
  10.  echo "Aucun stage pour ce stagiaire";
  11. $_SESSION['j']  = 0;
  12. }


Ensuite, ton affstage.php qui fait appel a des variables définies ailleurs, c'est saaaâaaaale.
 
 
fait une fonction afficheUnStage($nom_stage,$lieux,$dispositif) par exemple

n°2044928
Antoine T
Posté le 29-12-2010 à 10:52:22  profilanswer
 

J'avoue que j'ai du mal avec les fonctions :( Ca serait du genre :
 

Code :
  1. function afficheUnStage($nom_stage,$lieux,$dispositif){
  2. echo '
  3.    <TABLE>
  4.      <TR BGCOLOR="#AAAAAA">
  5.        <TD>Lieux :</TD>
  6.        <TD>$lieux</TD>
  7.      </tr>
  8.  
  9.      <TR BGCOLOR="#AAAAAA">
  10.        <TD>Dispositif :</TD>
  11.        <TD>$disp</TD>
  12.      </TR>
  13.    </TABLE>
  14.    ';
  15. }


 
Désolé si la question parait bête...

n°2044936
flo850
moi je
Posté le 29-12-2010 à 11:43:44  profilanswer
 

oui , c'est ça ( attention aunom des variables, $dispositif et $disp, $lieux ,...)

n°2044938
Antoine T
Posté le 29-12-2010 à 11:50:19  profilanswer
 

Ok, encore une question bête (mais il parait qu'il n'y a pas de question bête) :  
- je cale ma fonction dans un fichier fonctions.php
- dans aff_stage.php, je fais donc un include sur fonctions.php
- et j'ai juste à marquer la fonction afficheUnStage()?
 
j'ai pas encore franchi le cap, je ne programme pas en POO, juste en fonctionnel. Merci pour ta patience et ton aide !

n°2044960
flo850
moi je
Posté le 29-12-2010 à 13:08:46  profilanswer
 

tu n'inclues plus aff_stage, mais juste fonction.php ( une seule fois)
quand tu as besoin de l'utiliser tu l'appelle avec les paramètres qui vont bien,genre :  
 
afficheUnStage($row['nom_stage'],$row['lieux'],$row['dispositif'])

n°2044964
antac
..
Posté le 29-12-2010 à 13:36:59  profilanswer
 

à la place des if else à la chaîne, renseigne toi sur "Switch" en php
 
http://php.net/manual/fr/control-structures.switch.php
 

Code :
  1. <?php
  2. if ($i == 0) {
  3.     echo "i égal 0";
  4. } elseif ($i == 1) {
  5.     echo "i égal 1";
  6. } elseif ($i == 2) {
  7.     echo "i égal 2";
  8. }
  9. switch ($i) {
  10.     case 0:
  11.         echo "i égal 0";
  12.         break;
  13.     case 1:
  14.         echo "i égal 1";
  15.         break;
  16.     case 2:
  17.         echo "i égal 2";
  18.         break;
  19. }
  20. ?>

n°2044977
Antoine T
Posté le 29-12-2010 à 14:54:14  profilanswer
 

@antac
J'utilise déjà le switch pour tester les différents boutons d'un formulaire  
(exemple case enregistrer
                 case mise à jour
                 case annuler)
 
Mais y a t'il un réel intérêt à utiliser switch plutôt que if else? Car en terme de lignes, ça se vaut, en lisibilité aussi, du moins je trouve.
 
@flo850
Ok, je vais tester de suite ! Merci.

mood
Publicité
Posté le 29-12-2010 à 14:54:14  profilanswer
 

n°2044980
smaragdus
whores, drugs & J.S. Bach
Posté le 29-12-2010 à 15:04:57  profilanswer
 

Le switch est nettement plus lisible plutôt que 3 km de if else if imbriqués.

 

A la relecture , on comprend que la décision est restreint à ce bloc de code et il est visuellement facile de checker les cas différents. Et en plus, c'est plus simple à modifier


Message édité par smaragdus le 29-12-2010 à 15:06:07
n°2045130
antac
..
Posté le 30-12-2010 à 13:38:02  profilanswer
 

En fait, je l'aurai fait comme ça moi

Code :
  1. $req = mysql_query($req_search,$db_link) or die(mysql_error());
  2. $nb_stage = mysql_num_rows($req);
  3. $_SESSION['j']=1;
  4. if (($nb_stage>=1) && ($nb_stage<=4))
  5. {
  6.   while($row = mysql_fetch_array($req))
  7.   {
  8. include("aff_stage.php" );
  9. if ($nb_stage!=1)
  10.  $_SESSION['j']++; 
  11.   }
  12. }
  13. else
  14. echo "Aucun stage pour ce stagiaire";


Message édité par antac le 30-12-2010 à 13:38:27
n°2045142
Antoine T
Posté le 30-12-2010 à 14:07:53  profilanswer
 

Ca fonctionne à merveille ! Et c'est très lisible, merci antac.

n°2045329
Dj YeLL
$question = $to_be || !$to_be;
Posté le 31-12-2010 à 11:07:57  profilanswer
 

Et le jour où tu as un $nb_stage qui vaut 5 ?


---------------
Gamertag: CoteBlack YeLL
n°2045344
Antoine T
Posté le 31-12-2010 à 11:43:14  profilanswer
 

Ca ne devrait à priori pas arriver, un même stagiaire fait généralement 1 ou deux stages, dans des rares cas 3 stages, et je n'ai encore jamais vu 4 stages. Si jamais cela devait arriver, il me suffit de changer cette valeur
 

Code :
  1. if (($nb_stage>=1) && ($nb_stage<=4))

n°2045345
Dj YeLL
$question = $to_be || !$to_be;
Posté le 31-12-2010 à 11:45:52  profilanswer
 

Non mais c'était une question rhétorique hein :o

 

Tout ça pour dire qu'il faut juste remplacer cette ligne par

Code :
  1. if($nb_stage > 0)

comme l'a dit flo850 ;)

 

Ca ne coûte rien, et ça t'évitera de devoir débugguer (toi ou ton successeur) le jour où quelqu'un fait 5 stages :o


Message édité par Dj YeLL le 31-12-2010 à 11:46:02

---------------
Gamertag: CoteBlack YeLL
n°2045387
Antoine T
Posté le 31-12-2010 à 14:47:11  profilanswer
 

Entendu ! C'est vrai qu'il faut tout de suite prendre ces bonnes habitudes. Et c'est encore plus simple à la lecture. J'essaye en ce moment de simplifier au max mon code, car j'étais arrivé à une véritable usine à gaz... Merci pour l'astuce !

n°2045396
antac
..
Posté le 31-12-2010 à 15:17:13  profilanswer
 

C'est sur, je donnais une simple retranscription de ton if/else/if...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Besoin d'aide sur une boucle "if else if else"

 

Sujets relatifs
Aide !!Besoin aide pour optimiser BD avec PhpMyadmin
Batch : Compteur dans une boucle forBesoin d'aide en assembleur.
Besoin d'aide - Tableau HTML CSSAide pour corewar machine virtuelle
aide pour intelligence artificielle du jeu puissance4 en matlab 
Plus de sujets relatifs à : Besoin d'aide sur une boucle "if else if else"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR