Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Inkrementacja wartości ilość
Generic
post 28.08.2018, 08:39:20
Post #1





Grupa: Zarejestrowani
Postów: 224
Pomógł: 0
Dołączył: 31.10.2012

Ostrzeżenie: (10%)
X----


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. }
Go to the top of the page
+Quote Post
nospor
post 28.08.2018, 09:38:52
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Generic
post 28.08.2018, 09:51:10
Post #3





Grupa: Zarejestrowani
Postów: 224
Pomógł: 0
Dołączył: 31.10.2012

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
nospor
post 28.08.2018, 09:53:51
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 28.08.2018, 10:04:32
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Zobacz sobie przykład koszyka.


--------------------
Go to the top of the page
+Quote Post
Generic
post 28.08.2018, 11:45:59
Post #6





Grupa: Zarejestrowani
Postów: 224
Pomógł: 0
Dołączył: 31.10.2012

Ostrzeżenie: (10%)
X----


$_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. }


Ten post edytował Generic 28.08.2018, 11:46:13
Go to the top of the page
+Quote Post
Pyton_000
post 28.08.2018, 11:52:33
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


var_dump($_SESSION['koszyk']);
Go to the top of the page
+Quote Post
nospor
post 28.08.2018, 11:54:24
Post #8





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Generic
post 28.08.2018, 12:27:08
Post #9





Grupa: Zarejestrowani
Postów: 224
Pomógł: 0
Dołączył: 31.10.2012

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
leonpro778
post 28.08.2018, 12:39:30
Post #10





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


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']);
Go to the top of the page
+Quote Post
Generic
post 28.08.2018, 13:08:45
Post #11





Grupa: Zarejestrowani
Postów: 224
Pomógł: 0
Dołączył: 31.10.2012

Ostrzeżenie: (10%)
X----


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.  


Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 21:20