2010-12-16 263 views
3

Je fais un programme de finances personnelles en PHP et je suis coincé sur ce qui devrait être une tâche facile à réaliser - équilibrer le compte.Solde du chéquier PHP

Les transactions sont stockées dans MySQL, chacune a un type - 1 pour le retrait, 2 pour le dépôt. Ci-dessous est mon PHP pour équilibrer le compte, ne pas obtenir n'importe où près du montant correct.

//Get the starting balance 
$getStartingBalance = $db->query("SELECT amount FROM startingBalance WHERE id = 1"); 
$startingBalance = $getStartingBalance->fetch(); 
$startingBalance = $startingBalance['amount']; 
//Balance transactions 
    $getAllTransactions = $db->query("SELECT * FROM transactions ORDER BY date"); 
    while ($balanceEntry = $getAllTransactions->fetch()) { 
     $balanceEntryType = $balanceEntry['type']; 
     $balanceEntryAmount = $balanceEntry['amount']; 
     if ($balanceEntryType == "1") { 
      $accountBalance = $startingBalance - $balanceEntryAmount; 
     } else if ($balanceEntryType == "2") { 
      $accountBalance = $startingBalance + $balanceEntryAmount; 
     } 
    } 

Des idées? Merci

+0

Quel est le problème? – Ben

Répondre

2

$accountBalance = $startingBalance - $balanceEntryAmount;

Cela signifie que chaque fois que vous frappez cette ligne vous configurez le solde actuel du solde initial moins le montant d'entrée. Vous voulez sans doute céder, avant votre boucle while:

# or just rename $startingBalance to $accountBalance 
$accountBalance = $startingBalance; 

puis dans votre boucle while

$accountBalance = $accountBalance - $balanceEntryAmount; 

Bien sûr, vous auriez à fixer l'autre branche de votre condition, aussi.

La prochaine fois que vous rencontrerez une erreur, essayez d'afficher la valeur actuelle de chaque calcul dans un fichier journal - vous l'auriez compris très rapidement. Plutôt que de stocker une colonne "type de transaction", pourquoi ne pas simplement stocker une valeur de transaction signée?

+0

Ugh! Bien sûr! C'est ce qui arrive quand vous programmez rapidement. Merci :) – NightMICU

2

  • positif si elle est un dépôt
  • négative si elle est un retrait

De cette façon, vous pouvez obtenir le solde du compte avec une simple requête SQL.

SELECT SUM(amount) FROM transactions;

+0

Pas une mauvaise idée! C'est en fait un projet que j'ai commencé par ennui pour savoir où allait mon argent. Enfin décidé d'ajouter des dépôts, ce fut la solution la plus rapide avec des centaines d'entrées. Merci pour le conseil :) – NightMICU

+0

Eh bien, ce code * et le code des autres projets sur lesquels vous travaillez * pourraient être grandement simplifiés avec un peu de connaissances SQL. – jordanstephens

+0

Actuellement, j'utilise ce SQL exact pour les totaux par catégorie et mois ailleurs dans le programme. Je ne savais pas comment implémenter ce peu de SQL pour quelque chose comme ça. Merci encore :) – NightMICU