@maly_swd zwroc uwage ze on wysyla oddzielnego forma dla kazdego produktu a nie wszystkie produkty w jednym formie
@slawek Twoj kod jest fatalny.
Skoro kluczem w $_SESSION["cart_item"] jest reference to:
1) Nie ma sensu bys latal po calej tablicy i sprawdzal kazdy elelement, skoro mozesz od razu zrobic:
$_SESSION["cart_item"]['szukanyrefence']
2) Skoro kluczem jest UNIKALNY reference to nie ma prawa sie nic dublowac bo jak zrobisz w tablicy
$tab[1] = 'jeden';
$tab[1] = 'dwa';
to drugie 1 nadpisze ci pierwsze i nie ma mowy o duplikatach
Tak wiec cos krecisz, albo nagle ci refence zmienia na inne.
Popraw ten kod, uporzadkuj bo teraz to jest, przepraszam, wielki burdel - pomimo ze kodu duzo nie ma.
Masz niepoprawna strukture html, np. <tr><form><td>
Zajrzyj do dokumentacji html i zobacz jak wyglada poprawna tabela, HINT: miedzy TR a TD nie ma prawa nic innego byc.
edit:
ten kod z akcji ADD a nie UPDATE wyglada ze moze robic to co mowisz
if(in_array($productByCode[0]["reference"],$_SESSION["cart_item"])) { foreach($_SESSION["cart_item"] as $k => $v) {
if($productByCode[0]["reference"] == $k)
$_SESSION["cart_item"][$k]["quantity"] = $_POST["quantity"];
}
} else {
$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray); }
Tylko ze to jest ADD a nie UPDATE jak pisales wczesniej. Do rzeczy:
to
if(in_array($productByCode[0]["reference"],$_SESSION["cart_item"])) {
nigdy nie jest prawdziwe bo szukasz reference na liscie tablic a nie liscie referencji wiec wchodzi co do ELSE czyli do
$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
a array_merge gdy tablice maja indexy numeryczne to poprostu numeruje wszystko od nowa wiec tak, to ci moze dublowac i zmieniac totalnie wszystko wiec nic dziwnego ze potem nie jest w stanie kasowac jak indesky sie pozmienialy.
Dobrze by bylo jakbys pisal opis problemu troche bardziej porzadnie na przyszlosc bo opisales ze podczas UPDATE ci sie duplikuje a tu raczej podczas ADD jest duplikacja