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

PHP & Base de données Discussion :

Affichage de ma requête MySql


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Affichage de ma requête MySql
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <?php
    try{
        $bdd=new PDO('mysql:host=localhost;dbname=pcg;charset=utf8', 'root','');
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// afficher les erreurs php
    }catch(Exception $e){
        die('Erreur :' . $e->getMessage());
    }
     
    if(!empty($_POST)){
        echo'<script>window.location.href("grandlivre.php")</script>';
    }
    ?>
     
    <!DOCTYPE html>
    <html lang="fr">
     
    <head>
        <meta charset="utf-8">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="../css/bootstrap.css">
        <link rel="stylesheet" href="../css/style.css">
        <link rel="stylesheet" href="../css/carousel.css">
        <title>Comptabilité</title>
        <script src="../js/jquery.js"></script>
        <script src="../js/bootstrap.min.js"></script>
    </head>
     
    <body>
        <div id="grandlivre">
            <div class="container">
                <div class="row">
                    <div class="col-sm-12">
                        <h1 style="font-size:25px;text-align:center;color:black;">Grand livre</h1>
                        <table>
                            <thead>
                                <tr>
                                    <th class="journal">Journal</th>
                                    <th class="dateecritures">Date</th>
                                    <th class="libelle">Libellé écritures</th>
                                    <th class="debit">Débit</th>
                                    <th class="credit">Crédit</th>
                                    <th class="solde">Solde</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php
                                $comptePrecedent = 0;
                                //Sélection des numéros et noms de compte dans le plan comptable
                                $response = $bdd->query('SELECT * FROM plancomptable');
                                $plancomptable = $response->fetchAll();
                                $response->closeCursor();
     
                                //Sélection des écritures comptables correspondant au numéro de compte
                                $responses = $bdd->query('SELECT * FROM ecriturescomptables E INNER JOIN plancomptable B ON E.numerocompte = B.compte ORDER BY E.numerocompte, E.date_operation');
                                $ecritures = $responses->fetchAll();
                                setlocale(LC_ALL, ['fr_FR.UTF8','fra', 'french']);
                                $responses->closeCursor();
     
                                    foreach( $ecritures as $ecriture ) {
                                        if( $comptePrecedent != $ecriture['compte'] ) {
                                            $dateoperation = new DateTime($ecriture['date_operation']);
                                            $debit = $ecriture['debit'];
                                            $credit = $ecriture['credit'];
                                            echo '<tr class="titrecompte"><th colspan="6">'.htmlspecialchars($ecriture['compte']).'. '.htmlspecialchars($ecriture['libelle_plan']).'</th></tr>'; 
                                        if($debit < 0){
                                            echo '<tr><td>'.htmlspecialchars($ecriture['journal']).'</td><td>'.utf8_encode(strftime('%d %B %Y', $dateoperation->format('U'))).'</td><td>'.htmlspecialchars($ecriture['libelle_comptable']).'</td><td>'.''.'</td><td>'.number_format($credit, 2, ',', ' ').'</td></tr>';
                                          }else {
                                             echo '<tr><td>'.htmlspecialchars($ecriture['journal']).'</td><td>'.utf8_encode(strftime('%d %B %Y', $dateoperation->format('U'))).'</td><td>'.htmlspecialchars($ecriture['libelle_comptable']).'</td><td>'.number_format($debit, 2, ',', ' ').'</td><td>'.''.'</td></tr>';
                                        }
                                        //Calcul des totaux débit et crédit et solde respectif
                                        $response1=$bdd->query('SELECT SUM(debit) AS totaldebiteur, SUM(credit) AS totalcrediteur FROM ecriturescomptables WHERE numerocompte = '.$ecriture['compte'].' GROUP BY numerocompte');
                                        $totaux=$response1->fetchAll();
                                        if (!empty($totaux)){
                                            foreach($totaux as $total){
                                                $compte = $ecriture['compte'];
                                                $libelle_plan = $ecriture['libelle_plan'];
                                                $totaldebiteur = $total['totaldebiteur'];
                                                $totalcrediteur = $total['totalcrediteur'];
                                                $soldedebiteur = $totaldebiteur - $totalcrediteur;
                                                $soldecrediteur = $totalcrediteur - $totaldebiteur;
     
                                                if($totaldebiteur > $totalcrediteur){
                                                    echo '<tr><td>'.'</td><td>'.'</td><td class="totaux">'.'Solde débiteur'.'</td><td class="totaux">'.number_format($totaldebiteur, 2, ',', ' ').'</td><td class="totaux">'.number_format($totalcrediteur, 2, ',', ' ').'</td><td class="totaux">'.number_format($soldedebiteur, 2, ',', ' ').'</td></tr>';
                                                }else {
                                                    echo '<tr><td>'.'</td><td>'.'</td><td class="totaux">'.'Solde créditeur'.'</td><td class="totaux">'.number_format($totaldebiteur, 2, ',', ' ').'</td><td class="totaux">'.number_format($totalcrediteur, 2, ',', ' ').'</td><td class="totaux">'.number_format($soldecrediteur, 2, ',', ' ').'</td></tr>';
                                                }
                                            }
                                        }
                                            // Insertion et Mise à jour solde
                                            $insertionMAJsoldes = $bdd->prepare('INSERT INTO balance (compte, libelle_plan, soldedebiteur, soldecrediteur) VALUES ( :compte, :libelle_plan, :soldedebiteur, :soldecrediteur ) ON DUPLICATE KEY UPDATE compte = :compte, libelle_plan = :libelle_plan, soldedebiteur = :soldedebiteur, soldecrediteur = :soldecrediteur;');
                                            $insertionMAJsoldes->execute( array(
                                                'compte' => $compte,
                                                'libelle_plan' => $libelle_plan,
                                                'soldedebiteur' => $soldedebiteur,
                                                'soldecrediteur' => $soldecrediteur
                                            ));
                                            $insertionMAJsoldes->closeCursor();
                                        }
                                $comptePrecedent = $ecriture['compte'];
                                }
                                ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
     
        <script type="application/javascript" src="../js/jquery-3.4.1.min.js"></script>
        <script src="../js/script.js"></script>
    </body>
     
    </html>


    Bonjour,

    Dans la partie "Sélection des écritures comptables correspondant au numéro de compte", ma requête Sql fonctionne parfaitement. Mon problème se situe dans l'affichage de résultats de ma requête à partir du foreach. Cela m'affiche qu'un seul résultat et non tous les résultats souhaités.

    Merci d'avance.

  2. #2
    Modérateur

    salut,

    plusieurs points :
    qu'est ce que tu penses faire avec ces lignes :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    if(!empty($_POST)){
        echo'<script>window.location.href("grandlivre.php")</script>';
    }

    pouquoi utiliser utf8_encode() partout ?
    Ton charset est utf-8, si tes scripts sont encodés en utf-8 sans BOM et que la connexion à la base de données est bien sur utf-8 (ce qui est le cas), tout ce que tu manipules sera en utf-8 sans avoir rien à faire.

    Quelle version de PHP ?
    # Dans la Création, tout est permis mais tout n'est pas utile...

  3. #3
    Invité
    Invité(e)
    Salut,

    Le echo n'est pas utile dans ce fichier, je suis d'accord.

    Mais, le reste de ta réponse ne m'est d'aucune utilité, car cela ne répond pas à ma problématique.

  4. #4
    Modérateur

    ah ouais ! tu ne t'es pas posé la question du pourquoi de mes questions ?
    Bon bah ce n'est pas grave, je voulais juste reprendre ton code intégralement et beaucoup plus proprement mais tant pis, ça sera pour une autre fois.

    PS : tu ne semble pas savoir comment doit être faite une redirection, mais pour ce que j'en dis...
    # Dans la Création, tout est permis mais tout n'est pas utile...

  5. #5
    Invité
    Invité(e)
    Je n'ai pas le souvenir d'avoir demandé une aide quelconque pour un code propre, mais de m'aider à régler ma problématique, c'est tout. J'ai l'impression que tu ne m'as pas compris.

  6. #6
    Modérateur

    bah si tu avais écris ton code plus proprement, tu aurais vu de suite que la totalité de ton code de rendu n'est exécuté qu'à la condition vérifiée : if( $comptePrecedent != $ecriture['compte'] ) {. Donc à chaque fois que cette condition n'est pas vérifiée, rien ne s'affiche (c'est-à-dire presque tout le temps)

    Ecrire un pavé de cet acabit, c'est prendre des risques. Il vaut mieux diviser tout ça en blocs distincts avec par exemple des closures
    # Dans la Création, tout est permis mais tout n'est pas utile...

  7. #7
    Invité
    Invité(e)
    Même en le supprimant, cela ne change rien. Pour moi, le problème se situe

  8. #8
    Rédacteur/Modérateur

    Bonjour,

    code des lignes 101-102 mal placé.

    Cela "répond à ta problématique".
    Mais je n'en dirais pas plus, compte tenu du ton employé...
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  9. #9
    Invité
    Invité(e)
    Visiblement, on ne peut pas dire les choses en face. Pour moi, ce forum m'empêche de m'exprimer librement et j'ai le sentiment d'être rabaissé et dénigré. Pour ces raisons, je me désinscris et publierai un avis très négatif sur ce site.

  10. #10
    Rédacteur/Modérateur

    1- Essaie de dire "merci", pour commencer, à ceux qui prennent la peine de te répondre, et tu verras que les choses peuvent être différentes.

    2- ASTUCE : si tu veux qu'on ne s'occupe QUE de ta problématique, ne montre QUE le code nécessaire et suffisant.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images