Avatar billede anddk Praktikant
02. juli 2006 - 10:13 Der er 18 kommentarer og
1 løsning

str_replace bliver periodisk ikke udført

Har en webshop hvor jeg skal ændre den måde beløbet står på. (komma og punktum) Mit problem er at det har virket noget tid men periodisk bliver ændringen ikke udført og beløber kommer over forkert.

Er der nogen der kan hjælpe mig. Måske det er en opsætningen af PHP'en ?? Selve koden er her:

<?if($saAdress["order_type"]=="Kreditkort")
{
$nTotalSumNet = str_replace(",", ".", $nTotalSumNet);
$nTotalSumNet = $nTotalSumNet*100;           
echo "<form action='xxxxx &amount=$nTotalSumNet' method='post'>";
}
Avatar billede iss Novice
02. juli 2006 - 10:19 #1
Det er en god ide at du kun ved udskrivning laver . om til , og lader dine beløb være floats.
Avatar billede anddk Praktikant
02. juli 2006 - 10:49 #2
Okay, det forstår jeg ikke helt. Ved ikke hvad du mener med floats.

Du mener at jeg kun skal lave det om når jeg skal sende det ? Det skal laves om når jeg sender via en form til min betalingskortudbyder. Det har lavet om på den måde formatet skal være.
Avatar billede iss Novice
02. juli 2006 - 11:01 #3
Jeg ville have alle beløb i PHP/db i float (en type som man på dansk nok ville kalde kommatal)

Så ville jeg have en funktion til at udskrive til kr og en til øre:
function EchoDKKR ($f) {
  echo number_format($f, 2, ',', '.');
}

function EchoDKOre ($f) {
  echo 100*number_format($f, 0, '', '');
}

Evt kig på money_format().
Avatar billede erikjacobsen Ekspert
02. juli 2006 - 14:00 #4
Jeg ville derimod opbevare alt som ører i heltalsformat, og så ved udskrift lade det komme som "kroner komma ører"
Avatar billede anddk Praktikant
02. juli 2006 - 20:15 #5
Jeg er ikke lige så hård til dette, så i må lige bære over med mig og mine spørgsmål ;-)

Hele siden er opbyttet og det skal der ikke laves om på, tallet skal kun laves om når jeg sender det til formen.
Avatar billede erikjacobsen Ekspert
02. juli 2006 - 20:31 #6
Det er så i orden - man glemmer sommetider bare bøvlet med kommatal, når man nu ikke behøv's.

Hvor kommer $nTotalSumNet fra ?
Avatar billede anddk Praktikant
02. juli 2006 - 21:19 #7
Det er summen som køre hele vejen igemmen shoppen.

Måske en af jer vil rette den ene side for mig, selvføgelig med lidt betaling ?

Jeg har selv lavet den anden kode og er ikke lige så skrap til det og det er lidt surt at det ikke virkere hele tiden.
Avatar billede erikjacobsen Ekspert
02. juli 2006 - 21:55 #8
Vis du blot siden her - så kommer der nok een og kigger på den.

Der er ikke tale om at str_replace ikke virker hver gang. Det gør den selvfølgelig. Derfor må der være noget andet galt.
Avatar billede anddk Praktikant
03. juli 2006 - 06:34 #9
OK, her kommer min kode så:

<?
$VID = session_id();
// **** Start ****
// Head of the template
switch ($svTemplatePart) {
case "start":
?>
<!-- <?php echo $cfgTplPath ?>/receipt_table.tpl (start) -->
    <table border="0" width="100%" cellpadding=3 cellspacing=0 bordercolor="#000000" align="center">
  <tr>
      <td colspan="6" class=topic>Kvittering</td>
  </tr>
  <tr>
      <td colspan="6" class="bodytext">
      Din bestilling og adresse info.
     
      </td>
  </tr>
 
  <tr>
      <td class="topic">Vare</td>
      <td class="topic">Antal</td> 
      <td class="topic" align="right" colspan="2">Pris</td>
      <td class="topic" align="right" colspan="2">Total</td>
  </tr>

<?php
// **** Loop ****
// Loop every product
break;
case "loop":
?>
  <tr>
      <td class="bodytext" valign="top" wrap>
        <b><? echo $svName ?></b>
      </td>
      <td class="bodytext" valign="top">
      <? echo $nQuantity ?>
      </td> 
      <td class="bodytext" valign="top" align="right" nowrap>
        <div class="bodytext"><b>DKK.:</b></div>
      </td>   
      <td class="bodytext" valign="top" align="right">
        <div class="bodytext"><b><?=$nTaxPrice?></b><br>(DKK.<? echo $nPrice ?>)</div>
      </td>
      <td class="bodytext" valign="top" align="right" nowrap>
        <div class="bodytext"><b>DKK.:</b></div>
      </td>   
      <td class="bodytext" valign="top" align="right">
        <div class="bodytext"><b><?=$nSumTaxPrice?></b><br>(DKK.<? echo $nSumPrice ?>)</div>
      </td>
 
  </tr>
 
<?php
// **** Versandkosten ****
// Shipping costs
break;
case "shipcost": 
?>
  <tr>
      <td class="bodytext" valign="top" align="right" colspan="4">
      <b>Forsendelsesomk.</b>
      </td>
      <td class="bodytext" valign="top" align="right" nowrap>
        <div class=bodytext><b>DKK.:</b></div>
      </td>   
     
      <td class="bodytext" align="right" valign="top">
      <div class="bodytext"><b><? echo $saShipCost ?></b></div>
      </td>
  </tr>
     
  <tr>
      <td class="bodytext" valign="top" align="right" colspan="4">
      <b>Vægt.</b>
      </td>
      <td class="bodytext" valign="top" align="right" nowrap>
        <div class=bodytext></div>
      </td>   
     
      <td class="bodytext" align="right" valign="top">
      <div class="bodytext"><? echo $svWeight ?> kg.</div>
      </td>
  </tr>
 
<?php
// **** End ****
// End of the template
break;
case "end": 
?>
  <tr>
      <td colspan="6"><hr noshade></td>
  </tr>
  <tr>
      <td class="bodytext" valign="top" align="right" colspan="4">
      <b>eksp. gebyr.</b>
      </td>
      <td class="bodytext" valign="top" align="right" nowrap>
        <div class=bodytext><b>DKK.:</b></div>
      </td>   
     
      <td class="bodytext" align="right" valign="top">
      <div class="bodytext"><b><? echo $nShippingCosts2 ?></b></div>
      </td>
  </tr>
  <?
  if($saShipCost4!="0")
  {
  ?>
  <tr>
      <td class="bodytext" valign="top" align="right" colspan="4">
      <b>Kreditkort gebyr</b>
      </td>
      <td class="bodytext" valign="top" align="right" nowrap>
        <div class=bodytext><b>DKK.:</b></div>
      </td>   
      <td class="bodytext" align="right" valign="top">
      <div class="bodytext"><b><? echo FormatPrice($saShipCost4) ?></b></div>
      </td>
  </tr>
  <?}?>
  <?
  if($saShipCost3!="0")
  {
  ?>
  <tr>
      <td class="bodytext" valign="top" align="right" colspan="4">
      <b>Efterkravs gebyr.</b>
      </td>
      <td class="bodytext" valign="top" align="right" nowrap>
        <div class=bodytext><b>DKK.:</b></div>
      </td>   
     
      <td class="bodytext" align="right" valign="top">
      <div class="bodytext"><b><? echo FormatPrice($saShipCost3) ?></b></div>
      </td>
  </tr>
  <?}?>
  <tr>
      <td class="bodytext" valign="top" align="right" colspan="4" class="content">
      <b>Total-Brutto:</b>
      </td>

      <td class="bodytext" valign="top" align="right" nowrap>
        <div class=bodytext><b>DKK.:</b></div>
        <div class=bodytext>&euro;:</div>
      </td>   
      <td class="bodytext" align="right">
        <div class="bodytext"><b><? echo $nTotalSumNet ?></b></div>
        <div class="bodytext"><? echo $nFoCuTotalSumNet ?></div>
      </td>
      <td class="bodytext">&nbsp;</td>
  </tr>

  <tr><td colspan="6">
      <hr noshade color="#000000">
  </tr>
</table>
<table border="0" width="100%" cellpadding=3 cellspacing=0 align="center">
  <tr>
      <td colspan="2" class=topic>Bestillings- og leveringsadresse</td>
  </tr>
  <tr>
      <td class="bodytext" valign="top" align="right" width="20%">Bestillingsadresse:</td>
      <td class="bodytext" valign="top" align="left" width="80%">
        <?php echo $saAdress["company"] ?><br>
        <?php echo $saAdress["salutation"] ?>
        <?php echo $saAdress["firstname"] ?>
        <?php echo $saAdress["surname"] ?>
        <br>
        <?php echo $saAdress["street"] ?>
        <br>
        <?php echo $saAdress["zipcode"] ?>
        <?php echo $saAdress["city"] ?>
      </td>
  </tr>
  <tr>
        <td class="bodytext" valign="top" align="right">Leveringsadresse:</td>
        <td class="bodytext" valign="top" align="left">
            <?php echo $saAdress["da_company"] ?><br>
            <?php echo $saAdress["da_salutation"] ?>
            <?php echo $saAdress["da_firstname"] ?>
            <?php echo $saAdress["da_surname"] ?>
            <br>
            <?php echo $saAdress["da_street"] ?>
            <br>
            <?php echo $saAdress["da_zipcode"] ?>
            <?php echo $saAdress["da_city"] ?>
      </td>
  </tr>
  <tr>
      <td class="bodytext" valign="top" align="right">Betalingsform:</td>
      <td class="bodytext" valign="top" align="left">
        <?php echo $saAdress["order_type"] ?>
      </td>
  </tr>
  <tr>
      <td class="bodytext" colspan="1" align="left">&nbsp;
      </td>
      <td class="bodytext" colspan="1" align="right">
        Afslut bestillingen
        <?if($saAdress["order_type"]=="Kreditkort")
        {
$nTotalSumNet = str_replace(",", ".", $nTotalSumNet);
$nTotalSumNet = $nTotalSumNet*100;       

            echo "<form action='https://www.freepay.dk/ui/pages/external/relay.aspx/3333701/?nCustomerID=$nCustomerID&VID=$VID&orderid=$saOrderNumber&amount=$nTotalSumNet&erhverv=true' method='post'>";
        }
        else
        {?>
        <form action="<? echo $cfgFileOrderExecErhverv ?>" method="POST">
        <?}?>
        <input type="hidden" name="VID" value="<? echo $VID ?>">
        <input type="hidden" name="nCustomerID" value="<? echo $nCustomerID ?>">     
        <input type="image" name="btnOrderExec" src="<?php echo $cfgTplPath ?>/images/order_now.gif" alt="Afslut bestillingen">
        </form>
      </td>
  </tr>
</table>
<?php
// **** Switch End ****
break; } ?>
Avatar billede erikjacobsen Ekspert
03. juli 2006 - 09:09 #10
I den kode bruger du $nTotalSumNet, men hvor kommer den fra. Hvis den ikke indeholder det forventede kan det tænkes at $nTotalSumNet*100 giver noget galt. Kan du give eksempler på hvad det vil sige at den kommer forkert over?
Avatar billede anddk Praktikant
03. juli 2006 - 19:11 #11
Nåja, det har jeg jo slet ikke tænkt på.

Har et tal der heder "104.6." Efter omregning og det er jo forkert og derfor kan betalingen ikke gemmenføres.

Prøver lige om jeg kan finde ud af hvor $nTotalSumNet kommer fra.
Avatar billede anddk Praktikant
03. juli 2006 - 21:42 #12
Den ligger 3 forskellige steder i en inc fil.

$nTotalSumNet            = FormatPrice($nSumTaxPrice2+$saShipCost+$nShippingCosts);       

$nTotalSumNet            = FormatPrice($nSumTaxPrice2+$saShipCost+$nShippingCosts2+$saShipCost3+$saShipCost4);


// Totals
$saTotalSum = GetTotalSum ($saOrderSum,"");
// Formatting stuff
$nSubSumNet              = FormatPrice($saTotalSum["subsum_net"]);
$nTotalTaxPartNet        = FormatPrice($saTotalSum["taxpart_net"]);
$nTotalSumNet
Avatar billede erikjacobsen Ekspert
04. juli 2006 - 10:36 #13
Ja, det er svært at overskue, når vi kun kan se stumper. Det som FormatPrice laver, ku' osse være suspekt.

Helt generelt ser det ud til at du blander tekst-repræsentationen og "regne"-repræsentationen af tallene. Man bør altid bruge den interne, "regne"-agtige, måde til tal, indtil lige 2 nanosekunder før man skal vise det til brugeren. Så tager man og laver det om til et eller andet læsbart, fx: 2.000.222,59
Avatar billede anddk Praktikant
05. juli 2006 - 18:11 #14
Ja, det er svært at finde ud af. Det hjælper jo heller ikke at jeg ikke selv forså hvad der forgår. (har ikke selv lavet det)

Er ved at teste noget jeg kom på efter du skrev det med at taller måske ikke var som forventet. Inden beregningen bliver udført bliver der langt 2 til. (dankort gebyr) Dette tal var ude decimaler og stod uden "". Nu har jeg rettet det til "2,00" og prøver hvordan det køre.

Skriver lige hvordan det går.
Avatar billede anddk Praktikant
09. juli 2006 - 17:31 #15
Nå, det ser ud til at det køre med den ændring.

Du skal have mange tak for hjælpen, poster du et svar så jeg kan lukke ? Det var jo dig der ledte mig på sporet.
Avatar billede erikjacobsen Ekspert
09. juli 2006 - 21:05 #16
Lyder godt at det virker, men jeg samler slet ikke på point, tak.
Avatar billede anddk Praktikant
10. juli 2006 - 06:31 #17
Okay ;-) Men vi skal jo have spørgsmålet lukket.
Avatar billede iss Novice
10. juli 2006 - 08:33 #18
Så lav et svar selv...
Avatar billede anddk Praktikant
10. juli 2006 - 21:16 #19
:-) ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester