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

PHP & Base de données Discussion :

Solde cumulé ligne par ligne [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Solde cumulé ligne par ligne
    Bonjour,

    Code PHP :
    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
    <?php
       try{
        $bdd=new PDO('mysql:host=localhost;dbname=comptebancaire;charset=utf8', 'root','');
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// afficher les erreurs php
    }catch(Exception $e){
        die('Erreur :' . $e->getMessage());
    }
     
       $response=$bdd->query('SELECT * FROM comptebancaire');
       $saisie=$response->fetchAll();
       $response->closeCursor();
       setlocale(LC_ALL, ['fr_FR.UTF8','fra', 'french']);
       if(isset($_POST['dateoperation'], $_POST['operation'], $_POST['debit'], $_POST['credit'])
        AND !empty($_POST['dateoperation'])
        AND !empty($_POST['operation'])
        AND !empty($_POST['debit'])
        AND !empty($_POST['credit'])
    	){
    	if(!isset($errors)){
            $saisie =$bdd->prepare("INSERT INTO comptebancaire (dateoperation, operation, debit, credit) VALUES (?,?,?,?)");
    		$saisie->execute(array(
    			$_POST['dateoperation'],
    			$_POST['operation'],
    			$_POST['debit'],
    			$_POST['credit']
    		));
     
    		if($saisie->rowCount()>0){//Vérifie si l'opération a bien été ajouté dans la BDD
    		    $successMsg = 'L\'opération a bien été ajoutée !';
    		}else{
    		$errorMsg[]='Suite à un problème dans la base de données, l\'opération n\'a pas pu être ajoutée !';
    	    }
    	    $response->closeCursor();
        	}
           if(!preg_match('#^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]{50}$#',$_POST['operation'])){
            $errors[] = 'Champ invalide<br>';
            }
            if(!preg_match('#^[0-9]{1,10}([.,][0-9]{1,2})?$#', $_POST['debit'])){
                $errors[] = "Champ invalide";
            }
            if(!preg_match('#^[0-9]{1,3}([.,][0-9]{1,2})?$#', $_POST['credit'])){
                $errors[] = "Champ invalide";
            }
        }
    $response = $bdd->query('SELECT * FROM comptebancaire');
    $saisie = $response->fetchAll();
     
    $response1=$bdd->query('SELECT *, (SELECT SUM(credit-debit) FROM comptebancaire WHERE dateoperation <= ope.dateoperation) AS solde FROM comptebancaire AS ope ORDER BY dateoperation ASC, (credit-debit) DESC');
    $solde=$response1->fetch();
    $soldecumulee=$solde['solde'];
    $response1->closeCursor();
    ?>
     
    <!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>Compte bancaire</title>
        <script src="js/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </head>
     
    <body>
        <div id="listecompte">
            <div class="container">
                <div class="col-sm-12">
                    <div class="row">
                        <h1 style="font-size:25px;text-align:center;color:green;">Compte bancaire</h1>
                        <form action="index.php" method="POST">
                            <input type="date" name="dateoperation" placeholder="">
                            <input type="text" name="operation" placeholder="">
                            <input type="text" name="debit" placeholder="">
                            <input type="text" name="credit" placeholder="">
                            <input type="submit">
                        </form><br>
                        <div id="entete">
                            <table>
                                <thead>
                                    <tr>
                                        <th id="dateoperation">Date de l'opération</th>
                                        <th id="operation">Opérations</th>
                                        <th id="debit">Débit</th>
                                        <th id="credit">Crédit</th>
                                        <th id="solde">Solde</th>
                                    </tr>
                                </thead>
                                <div id="listederoulante">
                                    <?php 
                                        if(!empty($saisie)){
                                            foreach($saisie as $data){
                                                $dateoperation = new DateTime($data['dateoperation']);
                                                echo'<tr><td>'.utf8_encode(strftime('%d %B %Y', $dateoperation->format('U'))).'</td><td>'.htmlspecialchars($data['operation']).'</td><td>'.htmlspecialchars($data['debit']).'</td><td>'.htmlspecialchars($data['credit']).'</td><td>'.$soldecumulee.'</td></tr>';
                                                }
                                            }
                                    ?>
                                </div>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script type="application/javascript" src="js/jquery-3.1.1.js"></script>
        <script src="js/script.js"></script>
    </body>
     
    </html>
    Affichage :
    Nom : comptebancaire.jpg
Affichages : 1310
Taille : 244,2 Ko

    Ce que je souhaite c'est d'avoir un solde cumulé ligne par ligne.

    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Je ne suis pas sûr de moi pour la valeur de l'ancien solde mais ta ligne 50 devrait être quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $soldecumulee=$soldecumulee + credit - debit;
    Tu prends l'ancien solde et tu lui ajoutes le crédit et soustraits le débit. Au passage solde est masculin donc sans e.

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai ce message

    Notice: Undefined variable: soldecumule in C:\wamp\www\projet\compte\index.php on line 50

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Je me suis au départ mal exprimé. Il ne s'agit pas de l'ancien solde mais du solde de la ligne précédente
    Ton erreur est normale, tu dois initialiser ta variable à 0 avant la première ligne.
    En plus je viens de voir que tu fais une confusion entre le nom de la base et celui de la table. Est-ce que la base et la table ont le même nom?
    Dans ta table, tu devrais ajouter une colonne id à chaque ligne et peut-être aussi stocker directement le solde ce qui permettrait de
    • démarrer à n'importe quelle valeur et pas forcément à 0.
    • récupérer ce solde pour calculer le nouveau.

    Est-ce que dans ta table la date est bien enregistrée au format date de SQL ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <table>
       <thead>
    ...
        </thead>
        <div id="listederoulante">
    ...
    Il faut vraiment que tu respectes la structure HTML des <table> !!

    Quant à ton script (requêtes SQL), il n'y a pas de logique...
    Mets des commentaires/explications : tu comprendras peut-être ce que tu fais.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par moimp Voir le message
    Est-ce que dans ta table la date est bien enregistrée au format date de SQL ?
    Ma base et ma table ont le même nom. La date de ma table est bien au format date de SQL.
    Dernière modification par Invité ; 10/03/2019 à 10h54.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La 1ere requete ne sert à rien.
    Les 2eme et 3eme doivent fusionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $response = $bdd->query('SELECT * FROM comptebancaire ORDER BY dateoperation ASC');
    $saisie = $response->fetchAll();
     
    // ajout du solde cumulé
    $soldecumul = 0;
    foreach( $saisie as $idx => $row )
    {
       $soldecumul = $soldecumul + $row['credit'] - $row['debit'];
       $saisie[$idx]['soldecumul'] = $soldecumul;
    }
    Et dans la <table> :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '....<td>'.$data['soldecumul'].'</td></tr>';
    Dernière modification par Invité ; 10/03/2019 à 17h27.

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

Discussions similaires

  1. Gestion des solde cumulé par client
    Par Massigne dans le forum Développement
    Réponses: 6
    Dernier message: 29/11/2017, 10h57
  2. cumul ligne à ligne
    Par d.tellier dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/03/2010, 09h52
  3. [SSIS] Cumul ligne
    Par luc_chivas dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 09/04/2009, 09h19
  4. cumul ligne à ligne
    Par pierre22 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/11/2007, 13h47
  5. [MySQL] requete avec cumul mois par mois
    Par michaelbob dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/01/2006, 15h32

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