IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Boucle do while


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2013
    Messages : 73
    Par défaut Boucle do while
    Bonjour,

    J'ai un problème concernant une boucle do while.

    Je lis une table pour afficher le ou les enregistrements quand j'ai une rupture sur les mois.

    Je commence donc par lire le premier enregistrement avant le do avec initialisation du sv mois, puis je fais le test du mois, ainsi que le test sur si on a écrit le mois (cpt_mois), sinon je cumule mes enregistrements du mois.
    Jusque là tout va bien, j'affiche bien mes enreg, avec le total du mois 7, 1922.55, mais je n'affiche pas le tout dernier, celui du mois 8.

    J'ai comme enregistrements :

    15/07 caution 67 1608.90
    31/07 téléphone 67 10.00
    31/07 facture 67 303.65
    05/08 lampe 67 108.60

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    $req = "select * from cpt_banque where cpt_date between '$date_deb' and '$date_fin' 
    	and ((cpt_scat = 67 and cpt_sens = 'D') or (cpt_cat = 5 and cpt_sens = 'C' and cpt_scat in (12,13,14,15))) order by cpt_date";
    if ($ret = mysqli_query($connect, $req)) {
       $ligne = mysqli_fetch_assoc($ret);
       $sv_mois = 0;
       $cpt_mois = 0;
       do
       {
          $decoupe_date = explode('-', $ligne['cpt_date']);
          $mois = intval($decoupe_date[1]);
          if ($mois != $sv_mois)  // on a changé de mois, on recommence la lecture du mois suivant
          {
             if ($cpt_mois != 0)                           // on a déjà lu des engeristrements alors on écrit
             {
                $mois_traite = $sv_mois - 1;               // les débits et crédits de ce mois lu sont ceux du mois précédent
                if ($mois_traite < 1) $mois_traite = 12;
                $libel_mois = Titre_Mois($mois_traite);
                $ch_tmp = number_format($mt_fact,2,'.',' ');
                print("<tr><td>$libel_mois</td><td align=right width=100>$ch_tmp</td><td> </td><td> </td><td> </td></tr>");
                        ...............
             }
             $mt_fact = 0;
             $sv_mois = $mois;
          }
          $scateg = $ligne['cpt_scat'];
          switch ($scateg)
          {
            case 67:
              $mt_fact = $mt_fact + $ligne['cpt_mt'];
    	  break;
                  ..........
          }
          $cpt_mois = 1;
       }
       while($ligne = mysqli_fetch_assoc($ret));
    }
    Je suppose que je sors de la boucle do while puisque c'est le dernier enregistrement, alors comment puis je récupérer la dernière ligne du 05/08 pour qu'elle repasse dans ma boucle après le do et en faire l'affichage ?

    Merci d'avance.
    Theo

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    bah parce qu'on ne parcourt pas un jeu de données avec do while mais un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (mysqli_fetch_all($ret, MYSQLI_ASSOC) as $ligne) {
        // traitement de la ligne
    }
    Avec foreach tu as la certitude de parcourir la totalité du jeu de données sans exception

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2013
    Messages : 73
    Par défaut
    Bonjour,

    Merci j'ai pu résoudre mon problème.
    Bonne journée.
    Theo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle Do ..while
    Par parp1 dans le forum Général Python
    Réponses: 2
    Dernier message: 11/06/2006, 14h32
  2. Réponses: 13
    Dernier message: 20/03/2006, 17h26
  3. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 21h23
  4. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 16h30
  5. Appel recurssif et boucle Do...While
    Par zsoh dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2004, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo