Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Inkrementacja wartości ilość
Forum PHP.pl > Forum > Przedszkole
Generic
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.

  1. if(empty($_SESSION['koszyk']))
  2. {
  3. $_SESSION['koszyk'] = array();
  4. }
  5. foreach($_SESSION['koszyk'] as $zawartosc_koszyka)
  6. {
  7. $zawartosc_koszyka;
  8. }
  9.  
  10. if(isset($_POST['dodaj_do_koszyka']))
  11. {
  12. if($_SESSION['nazwa_produktu'] == $zawartosc_koszyka['nazwa_produktu'])
  13. {
  14. $zawartosc_koszyka['ilosc'] += $_POST['ilosc'];
  15. echo $zawartosc_koszyka['ilosc'];
  16. }
  17. else
  18. {
  19. array_push($_SESSION['koszyk'], array('nazwa_produktu'=> $_SESSION['nazwa_produktu'], 'cena' => $_SESSION['cena'], 'ilosc' => $_POST['ilosc']));
  20. }
  21. }
  22.  
  23. foreach($_SESSION['koszyk'] as $zawartosc_koszyka)
  24. {
  25. echo $zawartosc_koszyka['nazwa_produktu'];
  26. echo $zawartosc_koszyka['ilosc'];
  27. }
nospor
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.
Generic
Cytat(nospor @ 28.08.2018, 10:38:52 ) *
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.



a mógłbym po prostu zeby nie kombinowac pobrac produkt który wybrał klient odszukujac go w bazie i jesli stnieje to dodac go do koszyka, a pozniej jesli juz bedzie w koszyku to dodawac tylko jego ilosc?
nospor
Nie wiem co w tym widzisz mniej kombinowania.... nadal musisz sprawdzic czy jest w koszyku juz czy nie.
viking
Zobacz sobie przykład koszyka.
Generic
$_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.

  1. if(empty($_SESSION['koszyk]))
  2. {
  3. $_SESSION['koszyk'] = array();
  4. }
  5.  
  6.  
  7.  
  8. $key = array_search('kwiaty', $_SESSION['koszyk']);
  9.  
  10. if($key != NULL)
  11. {
  12. echo 'znalazlem produkt';
  13. }
  14. else
  15. {
  16. echo 'nie znalazlem produktu';
  17. }
Pyton_000
var_dump($_SESSION['koszyk']);
nospor
No i kolejna sprawa
http://php.net/manual/en/function.array-search.php
Cytat
Return Values ¶

Returns the key for needle if it is found in the array, FALSE otherwise.

If needle is found in haystack more than once, the first matching key is returned. To return the keys for all matching values, use array_keys() with the optional search_value parameter instead.


Warning

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
Generic
Cytat(nospor @ 28.08.2018, 12:54:24 ) *



próbowałem nawet użyć in_array tak jak tutaj to jest opisane http://php.net/manual/en/function.in-array.php i też zwraca mi że nic nie znaleziono. albo mam zle skonfigurowane php albo nie mam pojecia co jest nie tak.
leonpro778
Cytat(Generic @ 28.08.2018, 13:27:08 ) *
próbowałem nawet użyć in_array tak jak tutaj to jest opisane http://php.net/manual/en/function.in-array.php i też zwraca mi że nic nie znaleziono. albo mam zle skonfigurowane php albo nie mam pojecia co jest nie tak.

Tak jak podano Tobie wyżej, var_dump($_SESSION['koszyk']);
Generic
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.

  1. <?php
  2.  
  3. // Tworzy tablice w ktorej beda dodawane produkty
  4.  
  5. if(empty($_SESSION['koszyk']))
  6. {
  7. $_SESSION['koszyk'] = array();
  8. }
  9.  
  10. //Dodaje produkt po kliknieciu w dodaj do koszyka
  11.  
  12. if(isset($_POST['dodaj_do_koszyka']))
  13. {
  14. array_push($_SESSION['koszyk'], array('nazwa'=> $_SESSION['nazwa'], 'cena' => $_SESSION['cena'], 'ilosc' => $_POST['ilosc']));
  15. }
  16.  
  17. // Wyswietla dodane produkty
  18. foreach($_SESSION['koszyk'] as $wybrane_produkty)
  19. {
  20. echo $wybrane_produkty['nazwa'];
  21. echo $wybrane_produkty['ilosc'];
  22. }
  23. ?>


niektore rzeczy takie jak nazwa pobieram z sesyjnej bo nie mam ich w formularzu a zostalo to juz wczesniej pobrane na potrzeby wyswietlenie tytulu produktu np w miniaturce.

Wpadłem na pomysł zeby przeszukac tablice jednak zwraca mi ze nie znalazlo wartosci.

  1. if(isset($_POST['dodaj_do_koszyka']))
  2. {
  3. if(in_array('Nazwa produktu', $_SESSION['koszyk']))
  4. {
  5. //zwieksz tylko ilosc do istniejacego juz produktu
  6. }
  7. else
  8. {
  9. // dodaj nowy produkt
  10. }
  11. }
  12.  


To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.