Hoi,

Ik ben bezig met een webshop voor iemand. Een winkelwagen is hetgeen waar ik niet helemaal uitkom. En dan bedoel ik alleen het deel voor het updaten van het aantal. Ik heb een vakje en een knop voor het 'submitten' van het aantal wat je wilt veranderen. 2D array ziet er zo uit:

<?php
$itemArray = array($productByID[0]["ID"] => array (
'Naam' => $productByID[0]["Naam"],
'Prijs_nieuw' => $productByID[0]["Prijs_nieuw"],
'Aantal' => 1,
'ProductID' => $productByID[0]["ID"],
'Afbeelding' => 'images/Producten/'.$productByID[0]["ID"].'_0.png',
'Afmetingen' => $productByID[0]["Lengte"]. ' x ' .$productByID[0]["Breedte"]. ' x ' .$productByID[0]["Hoogte"] . ' CM',
'Kleuren' => $productByID[0]["Kleuren"],
));
?>

In het overzicht heb ik een form gemaakt waarin het aantal aan te passen is:

<?php
<form method="POST" action="Winkelwagen.php" name="update_aantal">
<input type="image" name="submit_aantal" src="images/Update.png"/>
<input type="text" name="Aantal" value="<?php echo $item['Aantal']?>" size="3" max="99" required><a href='winkelwagen.php?action=remove&id=<?php echo $item["ProductID"]; ?>'><img src='Images/Delete.png'/></a>
<input type="hidden" name="ProductID" value="<?= $item['ProductID']; ?>">
</form>
?>

En zodra je dus op het knopje "update" klikt, de submit knop, dan heb ik laten doorverwijzen naar een fuctie:

<?php
function Update_cart()
{
echo "Hoi";
$prod_id = $_POST["ProductID"];
foreach ($_SESSION["cart_item"] as $prod_id => $v)
{
if ($productByID[0]["ID"] == $prod_id)
{
$_SESSION["cart_item"][$prod_id]["Aantal"] = $_POST["Aantal"];
}
}
}
if(isset($_POST['update_aantal']))
{
Update_cart();
}
?>

<?php
print_r($_SESSION["cart_item"]):


Array
(
[0] => Array
(
[Naam] => Productnaam_6
[Prijs_nieuw] => 2.00
[Aantal] => 4
[ProductID] => 6
[Afbeelding] => images/Producten/6_0.png
[Afmetingen] => 9.99 x 9.99 x 9.99 CM
[Kleuren] => Grijs
)
)
?>

Ik wil dus de diktedrukte aantallen aanpassen dmv de functie. maar de functie word niet aangeroepen (hoi komt niet in beeld) plus de update werkt ook niet. Wat doe ik verkeerd?

Om het eindeloze foreach-en door $_SESSION['cart_item] te voorkomen:

Als je bij het opslaan van product met id="AA123" nu eens niet

$_SESSION['cart_item'][0] vult maar $_SESSION['cart_item']['AA123']?

Dan kun je rechtstreeks testen of $_SESSION['cart_item']['AA123'] bestaat
en $_SESSION['cart_item']['AA123']['Aantal'] ophogen.

Daarmee voorkom je gelijktijdig ook dat je meermaals hetzelfde artikel in je winkelmandje hebt zitten.
Mja dat zei ik dus al.

Daarnaast zie ik ook niet waarom je alle data in de sessie mikt. Dit is afleidbare informatie. Tenzij dit een ontwerpbeslissing is? Magento maakt volgens mij wel een volledige "kopie" van alle informatie van een aankoop, dus dat is een momentopname met alle op dat moment geldende prijzen et cetera. Maar dit lijkt mij pas relevant als er daadwerkelijk iets aangeschaft wordt. Dus dat hoef je niet allemaal in je sessie te zetten.

Een sessie is geen rijdend archief. Op het moment dat je waarden gaat kopiëren creëer je ook een potentieel "probleem": je gaat op twee plaatsen dezelfde informatie bijhouden. Die informatie kan na verloop van tijd uit de pas gaan lopen. Het lijkt mij beter om één bron te hebben voor je data. Als je productinformatie nodig hebt trek deze dan gewoon uit de database op grond van het product id...

Enkel een mapping id -> aantal is wat mij betreft afdoende, zoals ik al eerder aangaf.

Reageren