"Koszyk" w PHP

octonapewno

Użytkownik
Dołączył
Maj 22, 2008
Posty
110
napisałem taką ładna funkcję, która miała dodawać rzeczy do koszyka, ale niestety nie działa:

Kod:
$name_items = $_SESSION['przedmiot'];
    $_SESSION['koszyk'] = Array();
    $i = 0;

function additems($numb_items, $name_items){
    $cart = $_SESSION['koszyk'];
    $cart[$i] = $name_items;
    $numb_items++;
    $i++;    
    }
możecie wytłumaczyć co jest w tym źle? I jak to mniej więcej powinno wyglądać?

PS. do Admina tego forum, tutaj chyba zegarek nie działa bo ja post dodałem 17:01 a nie 15:01 to tak tylko teraz zauważyłem.
 
Ostatnia edycja:

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
zauważ że $i++; nie modyfikuje zmiennej $i zadeklarowanej poza funkcją, tak samo $numb_items nie jest przekazywanie przez referencje, więc ta modyfikacja też nic nie zmienia
teraz jak to zrobić żeby działało?
nie wystarczy przypadkiem $_SESSION['koszyk'][]=$name_items; ? a count($_SESSION['koszyk']) zwróci liczbę jak byś jej potrzebował?
 

octonapewno

Użytkownik
Dołączył
Maj 22, 2008
Posty
110
czyli moja funkcja powinna wyglądać tak:

PHP:
function additems($name_items){
    $cart = $_SESSION['koszyk'];
    $cart[] = $name_items;
    $ilosc = count($cart);
     }

czy coś źle zrozumiałem?
 

hxv

Były Moderator
Dołączył
Sierpień 9, 2006
Posty
797
Jeśli przypiszesz do zmiennej $cart tablicę $_SESSION['koszyk'] to po dodaniu elementu do $cart zmiana nie wpłynie na tablice w sesji.
PHP:
$_SESSION['koszyk'][] = $name_items; //dodajemy kolejny element do tablicy w sesji
Poza tym nie ma sensu przypisywania do zmiennej $ilosc widocznej tylko w funkcji jakiejkolwiek wartości jeśli wartość ta nie jest nigdzie używana. Jeśli chcesz, żeby zmienna była widoczna w całym kodzie uzyj global
PHP:
global $ilosc;
Najlepszym rozwiązaniem byłoby po prostu wywołanie count($_SESSION['koszyk']); za każdym razem, gdy będzie to potrzebne.
 
Ostatnia edycja:

octonapewno

Użytkownik
Dołączył
Maj 22, 2008
Posty
110
dzięki hxv, ale miałbym jeszcze jedną prośbę, ponieważ wszystko to co poprawiłem działa ładnie, i moja funkcja dodająca wygląda tak:
PHP:
function additems($name_items){
    if (!empty($name_items)){
        $_SESSION['koszyk'][] = $name_items;
        } else {
            echo "Nie dodałeś niczego!";
        }
    }
a usuwająca z koszyka:
PHP:
function delitem($name_items){
    for ($i = 0; $i <= count($_SESSION['koszyk']); $i++){
        
        if ($_SESSION['koszyk'][$i] == $name_items) {
            unset($_SESSION['koszyk'][$i]);
            }    
    }
    }
i mam z nimi taki problem, polega on na tym że funkcja dodająca, gdy koszyk jest pusty i dodaję pierwszą rzecz do niego, to moja funkcja dodaje dwa miejsca, pierwsze puste a na drugim rzecz która dodałem, natomiast gdy mam dodanych 15 przedmiotów w wózku i chce 5 usunąć, to moja funkcja usuwa 5 ale na np. 3 miejscach usuniętych, zostawia np. 2 wolne miejsca, tzn. są zajęte miejsca, ale przez "spacje", wytłumaczę może graficznie:

[]<-pusta tablica, [(puste), [przedmiot]] < moja tablica po dodaniu jednego przedmiotu <--- to jest pierwsza rzecz z którą mam problem,

[[przedmiot1],[przedmiot2], [przedmiot3]] < tablica z 3 przedmiotami [(puste),(puste)] < tablica po usunięciu 3 przedmiotów <--- to druga rzecz o która mi chodzi
 
Do góry Bottom