Witam. Napisałem prosty skrypt, który wkłada do tablicy przedmioty, które wybrał użytkownik. Wszystko działa dobrze jednak mam problem z wartością ilość, która zawiera informacje ile sztuk danego przedmiotu wybrał użytkownik. Napisałem instrukcję if, która sprawdza czy istnieje juz w tablicy element i jeśli tak to zwiększa jego ilość o wartość przychodzącą z POST. Jednak nie działa to tak jak należy. Czy ktoś może podpowiedzieć mi co robię nie tak? Z góry dziękuje i pozdrawiam.
if(http://www.php.net/empty($_SESSION['koszyk'])) { $_SESSION['koszyk'] = http://www.php.net/array(); } foreach($_SESSION['koszyk'] as $zawartosc_koszyka) { $zawartosc_koszyka; } if(http://www.php.net/isset($_POST['dodaj_do_koszyka'])) { if($_SESSION['nazwa_produktu'] == $zawartosc_koszyka['nazwa_produktu']) { $zawartosc_koszyka['ilosc'] += $_POST['ilosc']; http://www.php.net/echo $zawartosc_koszyka['ilosc']; } else { http://www.php.net/array_push($_SESSION['koszyk'], http://www.php.net/array('nazwa_produktu'=> $_SESSION['nazwa_produktu'], 'cena' => $_SESSION['cena'], 'ilosc' => $_POST['ilosc'])); } } foreach($_SESSION['koszyk'] as $zawartosc_koszyka) { http://www.php.net/echo $zawartosc_koszyka['nazwa_produktu']; http://www.php.net/echo $zawartosc_koszyka['ilosc']; }
Twoj kod w zadnej czesci nie ma najmniejszego sensu. Pisales go totalnie na slepo bez zastanowienia sie co on robi. No to lecim:
foreach($_SESSION['koszyk'] as $zawartosc_koszyka)
{
$zawartosc_koszyka;
}
Wiesz co to robi? Nic to nie robi. Mozesz to wywalic bo niczemu nie sluzy
if($_SESSION['nazwa_produktu'] == $zawartosc_koszyka['nazwa_produktu'])
Nigdzie nie ustawiasz $_SESSION['nazwa_produktu'] wiec niby czemu teraz do tego porownujesz $zawartosc_koszyka['nazwa_produktu'] ktore notabene tez jest bledne?
$zawartosc_koszyka['ilosc'] += $_POST['ilosc'];
Zdaje sie chciales zwiekszac wartosc w sesji a nie w jakiej wyimaginowanej zmiennej?
array_push($_SESSION['koszyk'], array('nazwa_produktu'=> $_SESSION['nazwa_produktu'], 'cena' => $_SESSION['cena'], 'ilosc' => $_POST['ilosc']));
Dane do sesji zdaje sie masz wkladac z $_POST a nie z sesji...
Caly kod co tu pokazales jest do wywalenia. Nawet struktura sesji koszyka jest zwalona nie mowiac juz o jego aktualizacji.
Koszyk ma byc tablica gdzie kluczem tablicy najlepiej niech bedzie identyfikator produktu. Po tym bedziesz wiedzial czy cos jest juz w koszyku czy nie.
Nie wiem co w tym widzisz mniej kombinowania.... nadal musisz sprawdzic czy jest w koszyku juz czy nie.
Zobacz sobie https://prophp.pl/article/29/obsluga_sesji_w_php_oraz_zadan_xhr_na_przykladzie_koszyka_produktow.
$_SESSION['koszyk'] jest tablicą zawierajaca wybrane produkty. Dlaczego zwraca ze nic nie znaleziono? Tablica na pewno nie jest pusta bo printujac ja widze element ktory chce odszukac.
if(http://www.php.net/empty($_SESSION['koszyk])) { $_SESSION['koszyk'] = array(); } $key = array_search('kwiaty', $_SESSION['koszyk']); if($key != NULL) { echo 'znalazlem produkt'; } else { echo 'nie znalazlem produktu'; }
var_dump($_SESSION['koszyk']);
No i kolejna sprawa
http://php.net/manual/en/function.array-search.php
Napisałem ten kod na nowo. Wyszło mi coś takiego jak ponizej i nie mam pomysłu jak przestac dodawac do tablicy nazwe produktu ktory sie juz znajduje i zwiekszyc tylko jego ilosc. Probowalem roznym ifem jednak zaden nie dzialal.
<?php http://www.php.net/session_start(); // Tworzy tablice w ktorej beda dodawane produkty if(http://www.php.net/empty($_SESSION['koszyk'])) { $_SESSION['koszyk'] = http://www.php.net/array(); } //Dodaje produkt po kliknieciu w dodaj do koszyka if(http://www.php.net/isset($_POST['dodaj_do_koszyka'])) { http://www.php.net/array_push($_SESSION['koszyk'], http://www.php.net/array('nazwa'=> $_SESSION['nazwa'], 'cena' => $_SESSION['cena'], 'ilosc' => $_POST['ilosc'])); } // Wyswietla dodane produkty foreach($_SESSION['koszyk'] as $wybrane_produkty) { http://www.php.net/echo $wybrane_produkty['nazwa']; http://www.php.net/echo $wybrane_produkty['ilosc']; } ?>
if(http://www.php.net/isset($_POST['dodaj_do_koszyka'])) { if(http://www.php.net/in_array('Nazwa produktu', $_SESSION['koszyk'])) { //zwieksz tylko ilosc do istniejacego juz produktu } else { // dodaj nowy produkt http://www.php.net/array_push(); } }
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)