Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z funkcją usuwającą lub wyświetlającą zawartość koszyka.
tonapewno
post 6.08.2010, 13:23:15
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 5.11.2009

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


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.

Ten post edytował tonapewno 6.08.2010, 13:24:32
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
_olo_1984
post 6.08.2010, 15:34:19
Post #2





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


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


--------------------
awake
Go to the top of the page
+Quote Post
tonapewno
post 6.08.2010, 16:16:00
Post #3





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 5.11.2009

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


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.
Go to the top of the page
+Quote Post
_olo_1984
post 6.08.2010, 17:29:12
Post #4





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


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.


--------------------
awake
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: 24.07.2025 - 21:51