Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Inkrementacja wartości ilość

Napisany przez: Generic 28.08.2018, 08:39:20

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

Napisany przez: nospor 28.08.2018, 09: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.

Napisany przez: Generic 28.08.2018, 09:51:10

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?

Napisany przez: nospor 28.08.2018, 09:53:51

Nie wiem co w tym widzisz mniej kombinowania.... nadal musisz sprawdzic czy jest w koszyku juz czy nie.

Napisany przez: viking 28.08.2018, 10:04:32

Zobacz sobie https://prophp.pl/article/29/obsluga_sesji_w_php_oraz_zadan_xhr_na_przykladzie_koszyka_produktow.

Napisany przez: Generic 28.08.2018, 11:45:59

$_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(http://www.php.net/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. }

Napisany przez: Pyton_000 28.08.2018, 11:52:33

var_dump($_SESSION['koszyk']);

Napisany przez: nospor 28.08.2018, 11:54:24

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.

Napisany przez: Generic 28.08.2018, 12:27:08

Cytat(nospor @ 28.08.2018, 12:54:24 ) *
No i kolejna sprawa
http://php.net/manual/en/function.array-search.php



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.

Napisany przez: leonpro778 28.08.2018, 12:39:30

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']);

Napisany przez: Generic 28.08.2018, 13:08:45

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


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(http://www.php.net/isset($_POST['dodaj_do_koszyka']))
  2. {
  3. if(http://www.php.net/in_array('Nazwa produktu', $_SESSION['koszyk']))
  4. {
  5. //zwieksz tylko ilosc do istniejacego juz produktu
  6. }
  7. else
  8. {
  9. // dodaj nowy produkt
  10. http://www.php.net/array_push();
  11. }
  12. }
  13.  



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)