A propos de la fonction NumberFormatter::formatCurrency() et de 2 champs du même nom dans 2 table Mysql différentes ???

Eléphant du PHP | 137 Messages

29 juin 2015, 14:01

Bonjour à tous.
J'ai de gros soucis.
D'abord je vous présente le code process.php et detail.php qui me fatiguent beaucoup car je n'arrive pas à corriger les erreurs les concernant:

******************* DEBUT CODE FICHIER process.php ********************

Code : Tout sélectionner

<?php function transaction() { $id = $_POST['user_id']; $acc_no = $_POST['acc_no']; $type = $_POST['type']; $amt = str_number($_POST['amt']); $cmt = $_POST['desc']; $dot = $_POST['dot']; $sql = "SELECT balance FROM tbl_accounts WHERE user_id = $id AND acc_no = $acc_no AND status = 'ACTIVE'"; $result = dbQuery($sql); if (dbNumRows($result) == 1) { extract(dbFetchAssoc($result)); if($type == "debit") { //check if amt is more then $balance if($balance < $amt) { header('Location: index.php?msg=' . urlencode('Account balance is less, fail to transfer fund.')); exit; } } $total = $type == "credit" ? ($balance + $amt) : ($balance - $amt); if($total <= 0) { //return here... } $sql = "UPDATE tbl_accounts SET balance = $total WHERE user_id = $id AND acc_no = $acc_no"; dbQuery($sql); } ?>
******************* FIN CODE FICHIER process.php ********************

1 - Sachant pour afficher $1 (montant de la variable $amt - 1 Dollar) au format "NumberFormatter::formatCurrency()" du code ISO 4217 dans la devise USD ($ Dollars americain), je dois normalement faire ceci:
<?php
$amt = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $amt->formatCurrency(1, 'USD');
?>
Alors, mon souhait est que la variable $amt du code process.php ci-dessus soit au format "NumberFormatter::formatCurrency()" et que le montant ($amt) soit envoyé à ce même format ce qui permettra au Champs balance des 2 tables "tbl_accounts" et "tbl_cardinfos" de s'afficher à ce format dans la base de données.

Comment donc réussir à modifier $amt au format "NumberFormatter::formatCurrency()" dans le code Process.php ci-dessus pour que ce format agisse sur les champs "balance" de chacune des 2 tables "tbl_accounts" et "tbl_cardinfos" ???

******************* DEBUT CODE FICHIER detail.php ********************

Code : Tout sélectionner

<?php if (!defined('WEB_ROOT')) { exit; } if (isset($_GET['accId']) && $_GET['accId'] > 0) { $accId = $_GET['accId']; } else { header('Location: index.php'); } $sql = "SELECT u.id, u.fname, u.lname, u.bdate, u.is_active, u.email, u.phone, u.pics, a.acc_no, a.type, a.balance, ad.address, ad.city, ad.state, ad.zipcode FROM tbl_users u, tbl_accounts a, tbl_address ad WHERE u.id = a.user_id AND ad.user_id = u.id AND a.id = $accId"; $result = mysql_query($sql) or die('Cannot get product. ' . mysql_error()); $row = mysql_fetch_assoc($result); extract($row); $atype = ""; if($type == "CA"){$atype = "Checking Account";} else if($type == "SA") {$atype = "Saving Account";} else if($type == "FDA") {$atype = "Fixed deposit Account";} ?> <p align="center" id="mainHead">User Details</p> <form action="process.php?action=transaction" method="post" id="frmTransaction"> <table width="100%" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable"> <tr> <td width="150" class="label">Transaction Type</td> <td colspan="2" class="content"> <select name="type" id="type"> <option value="#"> -- select transaction type --</option> <option value="credit">Credit Fund</option> <option value="debit">Debit Fund</option> </select> </td> </tr> <tr> <td width="150" class="label">Amount</td> <td colspan="2" class="content"><input type="text" name="amt" id="amt" size="10" /> </td> </tr> </table> <p align="center"> &nbsp;&nbsp; <input name="btnBack" type="button" id="btnBack" value=" Back " onClick="window.history.back();" > &nbsp;&nbsp; <input name="btnTxType" type="button" id="btnTxType" value=" Proceed Transaction "> </p> </form>
******************* FIN CODE FICHIER detail.php ********************

2 - Quand on sélectionne l'option "Debit Fund" sur la page detail.php juste ci-dessus, le montant ($amt) à débiter ne débite pas du tout et en faite il n'y a aucune action sur la balance de l'utilisateur concerné lorsqu'on écrit un montant dans le Formulaire "amount" correspondant à la variable $amt et que l'on clique par la suite sur le bouton "Proceed Transaction", ça ne diminue pas le montant à débiter alors que l'option "Credit Fund" qui permet d'ajouter des fonds sur la balance de l'utilisateur sélectionné marche très bien.

Comment corriger cet erreur là à partir du code Process.php qui est la page d'action du formulaire de detail.php pour enfin réussir à bien faire fonctionner l'option "Debit Fund" pour qu'elle fonctionne très bien comme l'autre "Credit Fund" qui fonctionne déjà très bien ???

3 - Sur le code Process.php ci-dessus, on remarque la variable $sql qui sélectionne le champs "balance" correspondant à $balance dans la table "tbl_accounts" seulement.
Alors comme je viens de créer une nouvelle table "tbl_cardinfos" qui a également le même champs "Balance" que la table "tbl_accounts" et auquel je souhaiterais appliquer les même options juste ci-dessus ("Credit Fund" et "Debit Fund"), j'aimerais savoir comment demander à $sql (situé dans le code process.php ci-dessus) de sélectionner chaque champs "Balance" de chacune des 2 tables "tbl_cardinfos" et "tbl_accounts" ???

Merci de mieux m'expliquer pas à pas s'il vous plaît.

Eléphanteau du PHP | 23 Messages

29 juin 2015, 20:47

on va mieux résoudre tout ça étape par étape donc pour le moment je vais juste répondre au sujet du point 1

déjà le but d'une base de données est juste de stocker des données donc le format ne devrait pas être enregistré dans la base mais seulement appliqué lors de la présentation des données

Eléphant du PHP | 137 Messages

29 juin 2015, 22:08

on va mieux résoudre tout ça étape par étape donc pour le moment je vais juste répondre au sujet du point 1

déjà le but d'une base de données est juste de stocker des données donc le format ne devrait pas être enregistré dans la base mais seulement appliqué lors de la présentation des données
OK grand merci d'avance cher Mathieu269 et je suis vraiment en grand attente des 2 dernières interrogations s'il vous plaît si quelqu'un pourrait bien m'aider.

ViPHP
xTG
ViPHP | 7331 Messages

30 juin 2015, 13:08

2/ Dans ta fonction transaction() tu as une ligne :
if($type == "debit") {
Mais pas de else, donc rien pour le crédit. ;)

3/ Comment comptes-tu les différencier ? Car si tu appliques la même opération sur ces deux champs c'est forcément que tu en as un de trop. ;)

Eléphant du PHP | 137 Messages

30 juin 2015, 13:38

Ok merci à vous je pense que le 2 est régler.
Mais comment trouver la réponse à mon inquiétude N°3 :
3 - Sur le code Process.php ci-dessus, on remarque la variable $sql qui sélectionne le champs "balance" correspondant à $balance dans la table "tbl_accounts" seulement.
Alors comme je viens de créer une nouvelle table "tbl_cardinfos" qui a également le même champs "Balance" que la table "tbl_accounts" et auquel je souhaiterais appliquer les même options juste ci-dessus ("Credit Fund" et "Debit Fund"), j'aimerais savoir comment demander à $sql (situé dans le code process.php ci-dessus) de sélectionner chaque champs "Balance" de chacune des 2 tables "tbl_cardinfos" et "tbl_accounts" ???

Eléphanteau du PHP | 23 Messages

30 juin 2015, 14:19

xTG te demandait si les 2 colonnes "balance" ne sont pas des doublons, c'est à dire est-ce qu'elles contiennent des informations différentes ?

si tu as vraiment besoin de ces 2 colonnes, il n'y a pas de problème si elles ont le même nom. dans une requête SELECT tu peux leur donner des noms différents comme cela :

Code : Tout sélectionner

SELECT a.balance AS balanceAccount, c.balance AS balanceCard ...
et ensuite dans le code PHP tu utiliseras "balanceAccount" et "balanceCard"

ViPHP
xTG
ViPHP | 7331 Messages

30 juin 2015, 15:22

il n'y a pas de problème si elles ont le même nom
Mais par contre il y a un souci de conception.
Il est inutile de stocker deux fois la même information dans une base de données relationnelle. :twisted:

Si l'on parle d'une valeur temporaire et d'une valeur finale il nous faudra plus d'informations.

Si l'on parle d'une sauvegarde alors cette valeur ne devrait pas être dans la même base de données. Car en cas de problème cela ne sert à rien on perdrait les données et les sauvegardes.

Donc il nous faudrait plus d'informations sur ce que tu souhaites faire chegmarco. :)

Eléphant du PHP | 137 Messages

30 juin 2015, 15:52

il n'y a pas de problème si elles ont le même nom
Mais par contre il y a un souci de conception.
Il est inutile de stocker deux fois la même information dans une base de données relationnelle. :twisted:

Si l'on parle d'une valeur temporaire et d'une valeur finale il nous faudra plus d'informations.

Si l'on parle d'une sauvegarde alors cette valeur ne devrait pas être dans la même base de données. Car en cas de problème cela ne sert à rien on perdrait les données et les sauvegardes.

Donc il nous faudrait plus d'informations sur ce que tu souhaites faire chegmarco. :)
Pour être plus explicite je dirai que:
J'ai 2 tables tbl_accounts et tbl_cardinfos qui contiennent chacune des champs id, user_id, acc_no et balance.
Alors je veux qu'à partir de la Page Process.php, que chaque fois que je vais Débiter ou Créditer la balance de l'utilisateur à partir de la Page Detail.php, il faudra que la valeur de la balance créditée ou débitée soit exactement pareil dans les 2 tables MYSQL. Par exemple si la valeur du champs "Balance" de tbl_accounts est 200 alors celle du champs "Balance" de tbl_cardinfos doit être aussi exactement égale à 200.

Autrement dire, que je veux que la valeur du champs:
- id de la table tbl_accounts soit exactement = à id de la table tbl_cardinfos;
- user_id de la table tbl_accounts soit exactement = à user_id de la table tbl_cardinfos;
- acc_no de la table tbl_accounts soit exactement = à acc_no de la table tbl_cardinfos;
- balance de la table tbl_accounts soit exactement = à balance de la table tbl_cardinfos;


Merci donc je m'aider en m'expliquant encore mieux.

Eléphant du PHP | 137 Messages

30 juin 2015, 21:16

Ok bon finalement, j'ai trové une solution, celle de mettre tous les autres champs de la Table tbl_cardinfos dans la Table tbl_accounts. Je pense que cela m'a permis de synchroniser le champs "Balance" des 2 Tables.
Merci à tous.

ViPHP
xTG
ViPHP | 7331 Messages

01 juil. 2015, 10:29

Tu peux toujours garder une table tbl_cardinfos, pour qu'un compte puisse avoir plusieurs cartes, mais qui ne doit garder que les informations de la carte.
Car la balance ne dépend pas de la carte mais représente l'état du compte.

Eléphant du PHP | 137 Messages

01 juil. 2015, 11:41

Tu peux toujours garder une table tbl_cardinfos, pour qu'un compte puisse avoir plusieurs cartes, mais qui ne doit garder que les informations de la carte.
Car la balance ne dépend pas de la carte mais représente l'état du compte.
Ok grand merci xTG.