Avatar billede techboy992 Praktikant
01. november 2012 - 08:41 Der er 11 kommentarer og
1 løsning

Math calculating in PHP take to much

Det understaaende script opdaterer total brugt credits i min database., Men det tager for meget i total.

credit cost = 1.00 credit
Naar jeg har 10 clicks 10 * 1 = 10, det goer den fint nok
Men naar den skal opdatere totalen tgaer den 45 credits i stedet for 10.

//Update Credit used

$result = mysql_query ("SELECT * FROM campains where campain='".$campain."'");
while ($row = mysql_fetch_array($result))
{
// get total clicks
$clicks= $row["clicks"];
//get click cost
$costcredits= $row["creditcosts"];
//get awaible balance
$credits1= $row["credits"];
//get creditsused
$used = $row["creditsused"];
  }
//calculate the cost
$cost=($clicks*$costcredits);
//Take the cost from balance
$credits = ($credits1-$used);

mysql_query("UPDATE campains SET creditsused  =$cost  WHERE campain ='".$campain."'");
mysql_query("UPDATE campains SET credits  =$credits  WHERE campain ='".$campain."'");

Fra start foelgende values var i Database tabellen:
credits     clicks     creditcosts     creditsused
1000.00          0        1.00            0.00


nuvaerende data i database tabellen efter 10 Kliks:
credits     clicks     creditcosts     creditsused
955.00          10.00        1            10.00

Som du ser tager den 45 i stedt for 10, hvorfor og hvordan kan jeg faa det korrekt.
Avatar billede erikjacobsen Ekspert
01. november 2012 - 09:09 #1
Så vidt jeg kan se trækker du følgende fra credits

1. klik: 0 (klik)*1 (cost)
2. klik: 1*1
3. klik: 2*1
...
10. klik: 9: 10*1


Og 1+2+3+4+5+6+7+8+9 = 45
Avatar billede erikjacobsen Ekspert
01. november 2012 - 09:10 #2
Så skal
  10. klik: 9: 10*1
lige rettes til
  10. klik: 9*1
Avatar billede techboy992 Praktikant
01. november 2012 - 09:19 #3
naar der er 10 kliks goer den det jo rigtigt nok skriver 10 i databasen.

saa minus totalen fra de brugte credits

1000.00 - 10.00 = 990.00

Men den laver det som om der er brugt 45 kliks men skriver stadig 10 i brugte credits
Udregning af brugte goer den rigtig nok
Skriver jo 10 i usedcredits


            total  - brugt
$credits = ($credits1-$used);

men nar jeg - de brugte fra totalen saa goer den et eller andet forkert.
Avatar billede erikjacobsen Ekspert
01. november 2012 - 09:22 #4
Den gør det du be'r den om.

Eksempel: Når der allerede er 8 kliks i rækken så bliver creditsused 1 større. Men du trækker 8 fra credits.
Avatar billede bauerdata Nybegynder
01. november 2012 - 11:18 #5
Forstår ikke feltet clicks.
skal det ikke nulstilles efter hver kørsel ?
mysql_query("UPDATE campains SET clicks  = 0  WHERE campain ='".$campain."'");
Du vil ellers trække samtlige klik fra hver gang du kører dette job.
Avatar billede techboy992 Praktikant
01. november 2012 - 12:54 #6
SKal den da ikke den henter jo fra databasen naar den udregner

hvis du kigger saa er det det totale antal klik * hvad et klik koster den opdaterer i brugte credits for den henter de totale credits derefter traekker de totale brugte clicks fra som ogsaa hentes i data basen efter der er opdateret. det eneste der gaar galt er naar jeg vil traekke de brugte kliks fra den saldoen paa kontoen.

henter de totale antal kliks i databasen:
$clicks= $row["clicks"];

Finder ud af havd et klik koster:
$costcredits= $row["creditcosts"];

Henter saldoen:
$credits1= $row["credits"];

Henter totale den totale kost
$used = $row["creditsused"];

Udregner de total brugte kliks
$cost=($clicks*$costcredits);

Indsaetter de total kliks i databasen
mysql_query("UPDATE campains SET creditsused  =$cost  WHERE campain ='".$campain."'");

<------Her sker fejlem---------->
Traekker de totale kliks fra saldoen paa kontoen:
$credits = ($credits1-$used);

Indsaetter ny saldo paa kontoen:
mysql_query("UPDATE campains SET credits  =$credits  WHERE campain ='".$campain."'");

<------------------------------->
Avatar billede techboy992 Praktikant
01. november 2012 - 13:20 #7
henter de totale antal kliks i databasen:
$clicks= $row["clicks"];

Finder ud af havd et klik koster fra databasen:
$costcredits= $row["creditcosts"];

Henter saldoen fra databasen:
$credits1= $row["credits"];

Henter totale den totale pris for alle kliks fra databasen
$used = $row["creditsused"];

Udregner den totale pris
--------Kliks * ---Pris-----
$cost=($clicks*$costcredits);


Indsaetter den nye totale pris i databasen:
mysql_query("UPDATE campains SET creditsused  =$cost  WHERE campain ='".$campain."'");

<------Her sker fejlem---------->
Traekker den totale pris fra saldoen paa kontoen:
------------ Saldo - den totale pris fra databasen: --------
$credits = ($credits1-$used);

Indsaetter ny saldo paa kontoen:
mysql_query("UPDATE campains SET credits  =$credits  WHERE campain ='".$campain."'");

<------------------------------->
Avatar billede erikjacobsen Ekspert
01. november 2012 - 13:22 #8
Du trækker brugte klik fra mere end een gang - derfor uoverensstemmelsen.
Avatar billede olebole Juniormester
01. november 2012 - 13:37 #9
<ole>

Når du ikke nulstiller feltet 'clicks' ved hver opdatering, går det galt. Prøv det ... alle er enige om, at fejlen er, du tæller klikkene flere gange  *o)

/mvh
</bole>
Avatar billede erikjacobsen Ekspert
01. november 2012 - 13:57 #10
Hvis nu jeg skal være konstruktiv, så lad være med at ændre credits i tabellen. Du kan nøjes med at tælle kliks op. I en SELECT sætning kan du så lave en lille beregning, der siger hvor meget de er tilbage.
Avatar billede techboy992 Praktikant
01. november 2012 - 14:37 #11
ja kliks skal nulstilles til 1 hvergang, hvis 0 saa bliver resultat 0 :) og samme for credits_used 1 i begge saa koerte det

:)
Avatar billede techboy992 Praktikant
14. december 2012 - 16:10 #12
ja kliks skal nulstilles til 1 hvergang, hvis 0 saa bliver resultat 0 :) og samme for credits_used 1 i begge saa koerte det

:)
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