Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z funkcją usuwającą lub wyświetlającą zawartość koszyka.
Forum PHP.pl > Forum > Przedszkole
tonapewno
funkcja wyświetlająca 2:
  1. function showitem2()
  2. {
  3. $ilosc = count($_SESSION['koszyk']);
  4. if ($_SESSION['koszyk'] === NULL)
  5. {
  6. echo "Koszyk być pusty";
  7. } else {
  8. while(list($key, $val) = each($_SESSION['koszyk']))
  9. {
  10. echo $val."<br />";
  11. echo '<a href=?function=del&items='.$val.'>Usun</a><br />';
  12. }
  13. }
  14. }

funkcja wyświetlająca 1:
  1. function showitem(){
  2. $ilosc = count($_SESSION['koszyk']);
  3. if (($_SESSION['koszyk'] === NULL) OR ($_SESSION['koszyk'] === 0)){
  4. echo "Koszyk jest pusty!";
  5. } else {
  6. for ($i = 0; $i < $ilosc; $i++)
  7. {
  8. echo $_SESSION['koszyk'][$i]."<br />";
  9. echo '<a href=?function=del&items='.$_SESSION['koszyk'][$i].'>Usun</a><br />';
  10. }
  11. echo $ilosc;
  12. }
  13. }

funkcja usuwająca:
  1. function delitem($item)
  2. {
  3. $cart = $_SESSION['koszyk'];
  4. $sum = count($_SESSION['koszyk']);
  5.  
  6. if (in_array($item, $cart))
  7. {
  8. for ($i = 0; $i < $sum; $i++)
  9. {
  10. if ($_SESSION['koszyk'][$i] == $item)
  11. {
  12. unset($_SESSION['koszyk'][$i]);
  13. echo "Usunięto ".$item;
  14. }
  15. }
  16. } else {
  17. echo "Nie ma ".$item." w koszyku!";
  18. }
  19. }


problem jest taki: gdy mam tablice ($_SESSION['koszyk']) z kilkoma rzeczami w koszyku, np. ziemniak, ogorek, salata, kapusta, arbuz, rzodkiewka to w momencie gdy chce usunąć wszystkie pojedynczo(mam też funkcję opróżniającą cały koszyk, ale nie w tym rzecz) to niestety pojawia się problem, bo nie wszystkie elementy dają się usunąć. Przedstawię to graficznie może będzie lepiej zrozumiałe:
[] pusta tablica
[ziemniak, ogorek, salata, kapusta, arbuz, rzodkiewka] tablica po wyświetleniu jej oboma funkcjami (showitem(), showitem2())po dodaniu kilku elementow,
[ , , ] tablica po usunięciu elementów i wyświetleniu jej za pomocą showitem(),
[ogorek, kapusta, rzodkiewka] tablica po usunięciu elementów i wyświetleniu jej za pomocą showitem2(),

mniej więcej to się przedstawia tak. Możecie pomóc? Byłbym wdzięczny.
_olo_1984
może zobrazuję to w jeszcze innej funkcji wyświetlającej:
  1. function showitem3()
  2. {
  3. if( sizeof( $_SESSION['koszyk'] ) )
  4. {
  5. foreach( $_SESSION['koszyk'] as $key => $value )
  6. {
  7. echo 'ID: '.$key.', NAME: '.$value.', <a href=?function=del&items='.$key.'>Usun</a><br />';
  8. }
  9. }
  10. else
  11. {
  12. echo 'Koszyk jest pusty';
  13. }
  14. }


Jeżeli usuwasz z tablicy po kluczu, który tutaj jest typu int 0..n, no to w funkcji showitem() masz błąd logiczny, powiedzmy masz tablice array('ogorek','marchewka','pomidor','ziemniak'), wywalisz pomidora, zosstanie Ci 3 elementy, ale nie w kolejności 0,1,2 tylko 0,1,3 - więc pętla for nie pokazuje tego, co chciałbyś. Zmienna $i będzie przyjmować wartości 0,1,2 a nie 0,1,3. Rozumiesz mniej więcej ?
Pozdr
tonapewno
rozumiem błąd, dzięki wielkie za wyjaśnienie miałbym prośbę abyś pomógł mi stworzyć funkcje delitem(), bo unset($_SESSION['koszyk'][$item]) nie działa.
_olo_1984
funkcja unset działa, jednak znów ten sam błąd, co w funkcji showitem(). Poprzedni przykład funkcji, który podałem, wyświetlał także link do usunięcia pozycji koszyka, w którym identyfikatorem był klucz ID. Więc tego się będę trzymał, i w najprostszej postaci funkcja usuwająca pozycję będzie miała postać:
  1. function delitem($item)
  2. {
  3. if ( sizeof( $_SESSION['koszyk'] ) AND array_key_exists( $item, $_SESSION['koszyk'] ) )
  4. {
  5. unset($_SESSION['koszyk'][$item]);
  6. echo 'Usunięto pozycję ID:'.$item;
  7. }
  8. else
  9. {
  10. echo 'Nie ma pozycji o ID:'.$item.' w koszyku!';
  11. }
  12. }


można zrobić usuwanie po nazwie, w tedy sprawdzi się in_array(), ale to moim zdaniem gorszy pomysł, oraz bardzo ogranicza. Pozycja w tablicy równie dobrze może być także tablicą (nazwa, ilość, cena ...). Cóż, mam nadzieję że pomogłem, a przynajmniej naprowadziłem na rozwiązanie. Pozdr.
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.