dreasMedlem sedan jan. 2004140 inlägg Hej!
Har fått lite hjälp med en PHP kod till ett kassasystem.
Det är uppbyggt så att jag har två arrayer, ena med själva produkten ($add_fool) och den andra med det antal man väljer ($add_qty).
Nu skulle jag vilja räkna ihop detta, dvs. ta ut priset av aktuell produkt från databasen och multiplicera det med antalet som finns i arrayen.
Hur skulle en sådan kod se ut? Använder mig sig av en for loop?
Är lite ny på PHP, har tidigare kört ASP men nån gång måste man väl byta upp sig? ;) Men tänk "idioti förklaring"
/Andreas
SnakesMedlem sedan okt. 2004392 inlägg Själv förstod jag inte en del. Hur ser det ut? Hos min kundvagn ser det ut så här:
Array (
1534 =>Array(quantity=>2),
3462 =>Array(quantity=>6),
)
Priset hämtar jag från databasen med en funktion. Så här räknar jag ihop det:
$count = 0;
if($_SESSION['cart']) {
foreach ($_SESSION['cart'] as $item => $p){
$row = item($item);
$count2 = $row[price] * $_SESSION['cart'][$item]['quantity'];
$count = $count + $count2;
}
}
echo $count;
Script snutten ovanför hämtar sina värden från $_SESSION['cart'] och kollar igenom alla varor. för varje vara så hämtar den priset från den och gångrar med antalet som står på quantity
Jag vet att du inte har samma sak... men hur har du... förklara lite mer är du snäll.
aasahMedlem sedan mars 20034 471 inlägg Re: Räkna i arrayer
dreas skrev:
Hej!
Har fått lite hjälp med en PHP kod till ett kassasystem.
Det är uppbyggt så att jag har två arrayer, ena med själva produkten ($add_fool) och den andra med det antal man väljer ($add_qty).
Nu skulle jag vilja räkna ihop detta, dvs. ta ut priset av aktuell produkt från databasen och multiplicera det med antalet som finns i arrayen.
Hur skulle en sådan kod se ut? Använder mig sig av en for loop?
Är lite ny på PHP, har tidigare kört ASP men nån gång måste man väl byta upp sig? ;) Men tänk "idioti förklaring"...
Vad ligger i $add_fool? Produktid? :q Ser det ut så här:
$add_fool = (345, 78890, 94)
$add_qty = (1, 6, 9)
Med betydelsen: 1 st av nr 345, 6 st av nr 78890 och 9 st av nr 94???
Om det inte stämmer, förtydliga tack!
Om det stämmer:
$totPris = 0;
foreach ($add_fool as $ix => $pid) {
$antal = $add_qty[$ix];
//OM du har MySQL, se nedan
$query = "SELECT styckpris FROM Tabell WHERE ProdID = $pid";
$res = mysql_query($query) or die();
$row = mysql_fetch_array($res);
$totPris += $antal * $row[0];
}
Dock beror det på om det är just MySQL du har och hur din databasstruktur ser ut...
Fast varför lagrar du inte infon i EN array itället och låter fool ge kvantiteten? :q Enligt ovan:
$best = (345 => 1, 78890 => 6, 94 => 9)
Så innehåller $best all info.
<skoj> Varför döpa en variabel till fool? Hur många vill lägga till en dåre? :o ;) </skoj>
dreasMedlem sedan jan. 2004140 inlägg Tack för er hjälp!
Kanske förklarade lite otydligt, men det var som aasah utgick ifrån. I add_fool ligger en unik beteckning, precis som du förklarar. Jag använde mig av ditt exempel, aasah, och försökte nästa in din kod så gott jag kunde i en redan befintlig for-loop. Så här ser resultatet ut:
<?php
$sum = 0;
for ($i=0; $i<sizeof($add_fool); $i++) {
$query = "SELECT model, gender, size, colour, price FROM Products WHERE name='$add_fool[$i]'";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
$line = mysql_fetch_array($result);
$sum += $add_qty[$i] * $line[5];
print ($line[0]);?> <?php print ($line[1]); ?> <?php print ($line[2]); ?> <?php print ($line[3]); ?> <?php print ($line[4]); ?>
<a href="store_addCart.php?remove=<?php echo $add_fool[$i] ?>">Ta bort</a><br>
<?php } ?>
<br>
Pris totalt: <?php print ($sum) ?>:- <br>
Jag får inget felmeddelande, men det verkar ändå inte fungera. Det som står är "Pris totalt: 0 :-", oavsett hur mkt jag lägger till.
Kör på MySql, och under "Price" verkar ett alternativ som heter "Standard" vara satt till just 0. Har testat att ändra denna siffra, men resultatet är densamma - jag får 0:- som tot. pris.
Tacksam för vidare hjälp
/Andreas
aasahMedlem sedan mars 20034 471 inlägg Åh! Två saker:
* Dels räknas en index i din $line från 0, vilket gör att price motsvarar line[4] - inte 5. Eftersom du anropar ett obefintligt index sätter PHP "snällt" :l detta till 0 åt dig. Därmed får du alltid 0 i din multiplikation. Ändra detta index så funkar det troligtvis.
* Din for-slinga är inte 100%-ig. Under förutsättning att du är HELT säker på att allting ligger på position 0, 1, 2, ... utan överhoppade index i intervallet så funkar den. Men PHP kan mycket väl ha hur konstiga index somhelst (jämför min $best i förra svaret ovan). Konstruktionen
foreach är garanterad att gå igenom exakt de index som är satta, i den ordning de förekommer i i arrayen. Därför är det säkrare att använda foreach.
dreasMedlem sedan jan. 2004140 inlägg Grymt!!
Tack så mycket för hjälpen. Ska titta närmare på det där med foreach.
Tack! :)
/Andreas