11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)
  • Q:
    Bijdrager
    Pivni Pes

    [PHP] Prijzen uit de DB maal xx% [opgelost]

    Ik wil graag een bepaalde percentage van bijvoorbeeld 50% via PHP bovenop de prijs wat in mijn DB staat tellen.
    Op deze manier print ik de prijs op mijn pagina.
    <p id=”prijs2″><?=$record[’blanco72′]</p>

    Wat ik me heb laten vertellen [size=9:87bdcc1b3f](door iemand Java applicaties schrijft)[/size:87bdcc1b3f] dat als ik 1* 50 er bij zet zoals hieronder, dat het mogelijk werkt.
    <p id=”prijs2″><?=$record[’blanco72′] 1* 50 ?></p>

    Dit werkt dus niet, zit mijn kennis er nu helemaal naast, of komt dit dat de prijzen in de DB ee komma bevatten ipv. een punt?

    Bijdrager
    HerQ

    Het lijkt mij dat je het bedrag in de database opslaat als float of iets dergelijks en niet als een string. Je zou gewoon zo moeten doen:
    [code:1:a35ad76185]<p id="prijs2">€<?=($record[’blanco72’] * 1.5)?></p>[/code:1:a35ad76185]

    Lijkt me ook logisch, tenminste, ik neem aan dat je weet hoe je, als zijnde ‘programmeur’, van een percentage naar een factor moet?

    Bijdrager
    Pivni Pes

    Ik ben geen programmeur, maar een kennis werkt veel met Java.
    In mijn startpost schrijf ik 1*50, dat was fout van mij.
    Hij heeft ook gezegd dat het * 1.50 moest zijn, zoals je al aan gaf.
    het punt is dat het wel werkt, 2,33 wordt ook 4,50, dus dat is goed.
    Wat niet goed gaat is dat de prijs 4.5 wordt ipv. 4,50
    Iets wat 0,60 kost * 50% komt uit op 0,90, dit wordt weergegeven als 0

    Bijdrager
    jimeh

    €<?php echo $record[‘blanco72’] * 1,5; ?>

    Bijdrager
    HerQ

    @jimeh: Dat is hetzelfde en op zich de betere oplossing ja, maar shorthands kan natuurlijk wel, al ben ik het met je eens dat het beter zo kan:) 1,5 moet natuurlijk wel in de engelse notatie, dus 1.5. Komma’s en getallen gaan niet samen:)

    [code:1:7e7bc4a17d]<p id="prijs2">€<?=number_format($record[’blanco72’] * 1.5, 2, ‘,’, ‘.’)?></p>[/code:1:7e7bc4a17d]

    EDIT: Ik heb even getest in TextMate en naar het blijkt wordt een string alleen goed gecast naar een float volgens de standaard notatie, een komma als decimal separator werkt dus niet en zal de decimalen niet goed casten. Het volgende werkt dus wel, maar beter zet je het bedrag als getal in de DB, niet als string!

    [code:1:7e7bc4a17d]<p id="prijs2">€<?=number_format(str_replace(’,’, ‘.’, $record[’blanco72’]) * 1.5, 2, ‘,’, ‘.’)?></p>[/code:1:7e7bc4a17d]

    Bijdrager
    Pivni Pes

    In MySQL staat bij “Drinkglas “Michelangelo” Artikelnr. 502582″
    – In kolom “blanco72” staat 2,33
    – In kolom “blanco120” staat 2,27
    – In kolom “blanco240” staat 2,17

    De PHP op mijn pagina heb ik nu als volg:
    [code:1:c1a9545b5b]<p id="prijs2">€<?=number_format($record[’blanco72’] * 1.5, 2, ‘,’, ‘.’)?></p>
    <p id="prijs2">€<?=number_format($record[’blanco120’] * 1.5, 2, ‘,’, ‘.’)?></p>
    <p id="prijs2">€<?=number_format($record[’blanco240’] * 1.5, 2, ‘,’, ‘.’)?></p>
    [/code:1:c1a9545b5b]
    De output op de pagina is bij alle 3 de staffels 4,50

    [edit]
    Sorry, ik had je edit nog niet gezien, ik ga het direct testen
    [/edit]

    Bijdrager
    Pivni Pes

    Dit werkt perfect, hij telt er precies de percentage boven op wat ik wil:D
    Super bedankt voor de snelle hulp:wink:

    Ik heb een Excel document die ik ook gebruikt als bron voor Indesign, hierin moet ik gebruik maken van komma’s.
    Aangezien dat ik ditzelfde bestand ook voor de MySQL DB wil gebruiken, staan daar ook komma’s ipv. punten.
    Pas nu realiseer ik dat dit een probleem kan zijn, gelukkig is het op deze manier netjes opgelost.

    Bijdrager
    palahala
    ”Pivni

    Ik heb een Excel document die ik ook gebruikt als bron voor Indesign, hierin moet ik gebruik maken van komma’s.

    Dat van die komma’s heeft dan denk ik alléén te maken met je instellingen bij System Preferences, International. Als je die verandert dan zul je komma’s vanzelf in punten zien veranderen (en dan zal Excel ook alleen maar die punten accepteren). Als je die gegevens uit Excel in de database gaat zetten, dan zou ik inderdaad “number” gebruiken, en niet “varchar”. Dan kun je ipv.
    [code:1:97e8282112]select blanco72 from my_table[/code:1:97e8282112] ook [code:1:97e8282112]select 1.5*blanco72 from my_table[/code:1:97e8282112] doen, of [code:1:97e8282112]update my_table set blanco72 = 1.5*blanco72[/code:1:97e8282112]

    Bijdrager
    sturb
    Pivni

    gelukkig is het op deze manier netjes opgelost.

    Opgelost jah, netjes….. mwah…
    Zorg er nou gewoon voor dat de kolom types van je database goed zijn. Dan krijg je die problemen met .-en en ,’s niet.

    Je slaat nu floats op als varchar, dat is gedoemd om te mislukken, dan wel gedoemd om fouten mee te maken!

    Bijdrager
    Pivni Pes

    Maar wat moet er dan fout gaan?
    Ik hoef alleen maar gegevens uit de DB te halen, niet opslaan.

    Ik moet de Excel documenten ook voor een folder of catalogus gebruiken.

    ”Wikipedia”

    In de wiskunde wordt de punt in het Nederlands gebruikt bij grote getallen, om elk drietal van cijfers van elkaar te scheiden. Bijvoorbeeld als volgt:

    1.000.000
    1.234,56

    De komma wordt in het laatste voorbeeld als decimaalteken gebruikt. In de Engelstalige notatie wordt de punt juist gebruikt als decimaalteken en schrijft men 1,234.56.

    Bijdrager
    sturb

    Ik weet niet hoe groot je dbase is maar er zijn performance issues als je string’s gaat behandelen als een float.
    Als je die meteen in de dbase opslaat als float heb je meteen een check en zal er altijd een . als decimal gebruikt worden. Met als gevolg dat aan de andere kant, de php en html kant er altijd eenzelfde soort interpunctie gebruikt wordt.

    Daarnaast heeft Mr. MySQL niet voor niks floats, integers en strings (en natuurlijk nog de bit, date-time etc etc) kolom types gemaakt.
    Het is net zoals het transformeren van een database opzet naar haar eerste normaal vorm “good practice” om de juiste kolom type te gebruiken voor de content van dat veld.
    Je gaat toch ook niet een “2009-03-23” in een varchar() veld opslaan? Daar gebruik je toch ook de date-time voor?

    Aan de andere kant als het nu werkt dan zou ik het zo laten. Ik zou het toch even in mijn achterhoofd houden.

11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.