Alleen bijbehorende valuta weergeven in td

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

08/10/2017 21:23:04
Quote Anchor link
Hallo allemaal,

Voor elk medicijn kan er een USD- of een IQD-valuta ingevoerd en opgeslagen worden. Elk valuta heeft een eigen kolom nl, purchasepriceDi of purchasepriceDo.
En nu probeer ik het valuta voor elk medicijn weer te geven in een tabel/td.
En hiervoor gebruik ik onderstaande code.
Maar jullie raden het al; nu worden beide valuta's weergegeven in een tabel/td voor alle medicijnen i.p.v. enkel wat bij een medicijn hoort.

Alvast bedankt voor jullie suggesties.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$currencyDi
= $row['purchasepriceDi'];
$currencyDo = $row['purchasepriceDo'];
        if(!empty($currencyDi) OR ($currencyDo)){
            echo number_format($currencyDi);
            setlocale(LC_MONETARY,"en_US");
            echo money_format("%i", $currencyDo);
            }



?>
Gewijzigd op 08/10/2017 21:52:29 door Mohamed nvt
 
PHP hulp

PHP hulp

29/03/2024 13:13:22
 
Ben van Velzen

Ben van Velzen

08/10/2017 22:43:17
Quote Anchor link
Ik snap niet helemaal waarom je je beperkt tot deze valuta. Zo werkt de medicijnahandel niet. Ook niet in Irak. Medicijnen worden verhandeld in hun bronvaluta. Afhankelijk uit welk land een medicijn afkomstig is kan dit dus andere valuta zijn.

Tip: leer eerst eens wat over wat software voor apotheken doet en waarom het doet wat het doet. En begin dan opnieuw, want het gaat echt van kwaad tot erger.
 
Mohamed nvt

Mohamed nvt

09/10/2017 08:52:43
Quote Anchor link
Omdat alleen deze valuta's van belang zijn voor degene die de applicatie zullen gebruiken.
En deze gebruikers zijn lokale apothekeres, en kopen hun medicijnen van een importeur/"lokale" tussenhandelaar en er zal betaald worden alleen in USD of in IQD.

En, eigenlijk moet je deze applicatie heel eenvoudig zien en niet als een gewone apotheek software, die zware eisen en functies heeft ;-)
Gewijzigd op 09/10/2017 09:17:38 door Mohamed nvt
 
Ivo P

Ivo P

09/10/2017 10:34:43
Quote Anchor link
Als currencydi niet leeg is
OF
als currencydo een waarde bevat
DAN....

dus als een van de de 2 een waarde bevat, of beide dan...

En DAN:
print je ook inderdaad beide waarden.

Mogelijk mis je ergens een ELSE in je code?
En daarbij is de hele voorwaarde ook wat vaag.

btw:
is het nu handig om beide valuta in een aparte kolom te plaatsen?
Het lijkt mij verstandiger om het bedrag in 1 kolom te zetten, en daarnaast een kolom die aangeeft of het om USD of IQD gaat.
Dan kun je namelijk heel eenvoudig omschakelen als er een 3e currency bij komt. Nu kun je wel roepen dat het er 2 zijn en altijd 2 blijven, maar de praktijk altijd anders. Kost je nu mogelijk een middag extra om te snappen hoe je het op die manier doet, maar mochten ze ineens toch op het idee komen om Euro's, Yens of Sjekels nodig te hebben, dan moet jij je hele applicatie opnieuw bouwen. (of je bent in 15 minuten klaar door currency en weergave formaat op te nemen)
 
Mohamed nvt

Mohamed nvt

09/10/2017 14:13:27
Quote Anchor link
Hallo Ivo,

Dus als ik het goed begrijp, dan moet ik het op de volgende manier aanpakken:

1. In de medicines tabel 1x kolom aanmaken voor de waarde van verschillende valuta
1. Een aparte tabel aanmaken voor verschillende valuta met als kolomen; id, name
3. In de medicines tabel een foreign key opnemen die linkt naar valuta tabel
4. Het invoer formulier wijzigen als volgt; huidige input fields voor valuta verwijderen. een dropdown lijst die weergeeft uit welke valuta een gebruiker kan kiezen. Naast dit een input field beschikbaar maken voor het invoeren van de waarde van valute?
5. Tijdens het weergeven van welk valuta bij elk medicijn hoort, controleren welk id van valuta hoort bij een medicijn?

Zijn deze gedachtegang correct?
 
Ivo P

Ivo P

09/10/2017 14:21:21
Quote Anchor link
ja.

en dan kun je in die nieuwe tabel ook iets opnemen over het gewenste formaat van weergeven (decimaal tekens, aantal cijfers achter de komma etc)
 
Thomas van den Heuvel

Thomas van den Heuvel

09/10/2017 14:33:08
Quote Anchor link
Door het huidige ontwerp van je database moet je nu ook noodgedwongen een rare spagaat maken in je code. Wanneer je je database beter structureert zal dit ook een positief effect hebben op de code die hiermee moet werken.
 
Mohamed nvt

Mohamed nvt

09/10/2017 15:09:35
Quote Anchor link
Ivo P op 09/10/2017 14:21:21:
ja.

en dan kun je in die nieuwe tabel ook iets opnemen over het gewenste formaat van weergeven (decimaal tekens, aantal cijfers achter de komma etc)


Tnx!
Dat doe ik toch in de medicines tabel door een kolom aan te maken voor de waarde van een valuta met bijbehorende type voor kolom? En tijdens het weergeven van een valuta gebruik ik dan number_format om het valuta netjes/correct weer te geven?

Of bedoel je dat ik een extra kolom moet aanmaken in het valuta tabel voor decimaal tekens, aantal cijfers? Maar betekent dit dat ik number_format straks niet nodig heb?
 
Ivo P

Ivo P

09/10/2017 15:27:56
Quote Anchor link
number_format() gebruik je dan zeker wel, maar de parameters die je nodig hebt (decimaal teken, aantal cijfers) haal je uit die tabel
 
Mohamed nvt

Mohamed nvt

09/10/2017 15:40:24
Quote Anchor link
Ivo P op 09/10/2017 15:27:56:
number_format() gebruik je dan zeker wel, maar de parameters die je nodig hebt (decimaal teken, aantal cijfers) haal je uit die tabel


Sorry, het is niet duidelijk voor me. Heb je misschien een voorbeeld/tutorial voor me?
Gewijzigd op 09/10/2017 15:42:35 door Mohamed nvt
 
Ivo P

Ivo P

09/10/2017 16:14:07
Quote Anchor link
in de table valuta
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
id  name  symbol decsep thousep decimals  
 1   USD    $       '.'   ','        2
 2   IQD           ','   ','        3
 3   GBP           '.'   ','        2


als je dan een query uitvoert, met een join naar deze tabel

dan krijg je bijvoorbeeld je resultaat in $row als een array.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?= number_format($row['amount'], $row['decimals'], $row['decsep'], $row['thousep']); ?>


---
al is even de vraag of het number format nu afhankelijk is van de currency of van de taal van de lezer.

Als ik schrijf dat iets $4,95 kost, dan is dat voor heel Nederland duidelijk.
Maar een hoop Amerikanen zullen € 4.467,95 er weer raar vinden uitzien. En dat is dus afhankelijk van de lezer, niet van de valuta.

--
check ook eens http://php.net/numberformatter
 
Mohamed nvt

Mohamed nvt

09/10/2017 19:47:39
Quote Anchor link
Bedankt voor het voorbeeld.
Wanneer ik in een tabel opneem de komma's en scheidingstekens dan hoeft straks de gebruiker enkel cijfers in te vullen zonder komma's en scheidingsteken, is dat de bedoeling?
Of moet ik een valuta later zelf deze komma's en scheidingstekens toe te voegen?
Ik ben nu een beetje in de war, want hoe weet ik straks wat een gebruiker bedoelt wanneer hij een getal invoert? Is het een duizend of een miljoen?

Is het niet handig dat straks een gebruiker gewoon een getal invoert en dat ik later met number_format het netjes weergeef, zonder een aparte kolom op te nemen voor komma's en scheidingstekens? Overigens, er is een groot verschil tussen het invoeren van een USD of een IQD. Bijv voor een USD-valuta worden enkel gehele getallen ingevoerd, en dus er wordt niet gewerkt met centen. Een voorbeeld van een UDS-valuta is 1150 en voor IQD zou bijv 1250.

Hopelijk is het duidelijk met wat ik wil realiseren.
 
Adoptive Solution

Adoptive Solution

09/10/2017 20:28:13
 
Mohamed nvt

Mohamed nvt

10/10/2017 19:27:32
Quote Anchor link
Hallo Ivo,

Hierbij een update.
1. Ik heb een tabel aangemaakt, genaamd currency met de volgende kolommen: id, name en symbols
2. Extra kolom opgenomen in medicines tabel en deze genaamd currency_id
3. Foreign key constructie opgezet tussen medicines tabel en currency tablel.
4. In het invoer formulier heb ik nu een dynamisch dropdown lijst, waaruit gekozen kan worden tusssen USD & IQD

Resultaat: http://hawarco.co/img/printscreen_1.png ;-)

En momenteel kan ik de volgende dingen reeds doen:
1. Tijdens het invoeren van een medicijn kan een purchase price ingevoerd worden tussen IQD & USD
2. Het weergeven van een medicijn en bijbehorende purhase price.

Hoewel ik reeds blij ben met bovenstaande, loop ik toch tegen 2 onderstaande problemen:
1. Ik wil een purchaseprice niet verplicht maken, al lijkt me dat niet logisch, maar doe ik dat aan de hand van een FK - set null? en dat FK-kolom in medicines null op YES zetten?
2. Ik wil voor alle IQD-valuta een eigen number_format geven en voor USD precies hetzelfde, maar hoe pak ik dit aan?
Momenteel gebruik ik de volgende regel voor het weergeven van een medicijn en de number_format is eigenlijk bedoeld voor IQD, maar ik moet eigenlijk nog een number_format hebben voor USD.
Moet ik soms een IF statement gebruiken, die aan de hand van een id van currency controleert welke valuta hoort bij welk medicijn?

Alvast bedankt voor het meedenken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['symbols']. ' ' .$row['name']. ' ' . number_format($row['purchaseprice']);?>


Toevoeging op 10/10/2017 20:51:26:

Update:

Ik denk dat ik het tweede probleem heb opgelost.
Ik controleer nl of het currency_id, welke hoort bij een medicine overeenkomt het id van een valuta en dan laat ik de functie number_format en/of money_format zijn werk doen ;-)
En volgens mij werkt het wel goed.

Blijft er nog het eerste probleem over. Overigens, het is wel toegestaan dat een FK een null waarde mag hebben...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if ($row['currency_id'] == 4){
            echo number_format($row['purchaseprice']). ' ' .$row['name']. ' '.$row['symbols'];
        } elseif ($row['currency_id'] == 3) {
            setlocale(LC_MONETARY,"en_US");
            echo money_format("%i", $row['purchaseprice']);
        }
Gewijzigd op 10/10/2017 19:28:08 door Mohamed nvt
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.