Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] usowanie zmiennej z tablicy
Forum PHP.pl > Forum > Przedszkole
XP'ek
Witam

Mam taki problem, tworze koszyk zakupow na sesjach i gdy usuwam jeden produkt z koszyka usowa mi wszystkie pod nim, czemu tak sie dzieje?

oto kod:

  1. <?php
  2.  
  3.  
  4.  
  5. if(isset($_POST['basked_add']) && $_POST['basked_add'] == 1)
  6. {
  7. $product = Array('name' => 'jakis protukt', 'nr' => '2', 'sp' => '120', 'price' => '32.99');
  8. $_SESSION['basked'][] = $product;
  9. }
  10.  
  11.  
  12. if(isset($_POST['basked_reset']) && $_POST['basked_reset'] == 1)
  13. {
  14. unset($_SESSION['basked']);
  15. }
  16.  
  17.  
  18. if(isset($_POST['basked_delete']))
  19. {
  20. $nr = $_POST['basked_delete'];
  21. unset($_SESSION['basked'][$nr]);
  22. }
  23.  
  24.  
  25.  
  26. $i=0;
  27. $r=0;
  28. $p=0;
  29.  
  30. while(isset($_SESSION['basked'][$i]))
  31. {
  32. ".$_SESSION['basked'][$i]['name']."*
  33. ".$_SESSION['basked'][$i]['nr']."*
  34. ".$_SESSION['basked'][$i]['sp']."*
  35. ".number_format($_SESSION['basked'][$i]['price'], 2)."zł<br />
  36. <form action='' method='POST'>
  37. <input type='hidden' name='basked_delete' value='".$i."'>
  38. <input type='submit' value='usuń'>
  39. </form>";
  40.  
  41. $p=$p+$_SESSION['basked'][$i]['price'];
  42. $i++;
  43. }
  44.  
  45.  
  46. print "Suma: ".number_format($p, 2)."zł<br />
  47. W koszyku masz ".($i)." produktów";
  48.  
  49.  
  50.  
  51. print "<form action='' method='POST'>
  52. <input type='hidden' name='basked_reset' value='1'>
  53. <input type='submit' value='Wyczyść koszyk'>
  54. </form>
  55.  
  56. <form action='' method='POST'>
  57. <input type='hidden' name='basked_add' value='1'>
  58. <input type='submit' value='dodaj'>
  59. </form>";
  60.  
  61. ?>


prosze sie nie przestraszyc to dopiero wersja w trakcie pracy
nospor
nie: usowam
a: usuwam

bbcode nie: CODE
bbcode a: PHP

  1. if(isset($_POST['basked_delete']))
  2. {
  3. $nr = $_POST['basked_delete'];
  4. echo 'przed, nr:'.$nr;
  5. print_r($_SESSION['basked']);
  6. unset($_SESSION['basked'][$nr]);
  7. echo 'po';
  8. print_r($_SESSION['basked']);
  9.  
  10. }
XP'ek
nie rozumiem..

Co ma mi pokazac twoj kod, wydrukowal mi jedynie tablice
nospor
Twoj kod ma np. wydrukowac:
"przed, nr"
oraz całą resztę. Wklej więc dokladnie co wydrukował.
XP'ek
Skasowałem tablice nr 1 czyli drugi produkt i kurcze widze ze tablica nie przesunela sie, jak moglbym to latwo obejsc?


nr: 1

Array ( [0] => Array ( [name] => jakis protukt [nr] => 2 [sp] => 120 [price] => 32.99 ) [1] => Array ( [name] => jakis protukt [nr] => 2 [sp] => 120 [price] => 32.99 ) [2] => Array ( [name] => jakis protukt [nr] => 2 [sp] => 120 [price] => 32.99 ) [3] => Array ( [name] => jakis protukt [nr] => 2 [sp] => 120 [price] => 32.99 ) )

Array ( [0] => Array ( [name] => jakis protukt [nr] => 2 [sp] => 120 [price] => 32.99 ) [2] => Array ( [name] => jakis protukt [nr] => 2 [sp] => 120 [price] => 32.99 ) [3] => Array ( [name] => jakis protukt [nr] => 2 [sp] => 120 [price] => 32.99 ) )
everth
Wiesz gdzie prawdopodobnie leży błąd? W użyciu dwóch formularzy na stronie. Patrz linia 53-56 i zastanów się dlaczego, jak wysyłasz formularzem 'dodaj' to jednocześnie aktywujesz kod php między liniami 13-16.
nospor
Czyli jednak nie kasowalo ci nastepnych. Skad wiec ten wniosek zmysliles?
Cytat
t i kurcze widze ze tablica nie przesunela sie
Normalne. Indeksy nie są przeliczane.
Po co wogóle potrzebna ci ciągłość numeracji? Kod co tu pokazales moglby się bez tego spokoknie obejsc
Ale jesli się nadal uperasz na to to uzyj array_values()

Cytat
jak wysyłasz formularzem 'dodaj' to jednocześnie aktywujesz kod php między liniami 13-16.
Tja.... zrob sobie dwa formularze testowe, wyslij jeden i sprawdź ile formularzy się wysłało... potem wróc i zedytuj posta winksmiley.jpg
XP'ek
ale to przeciez sa dwa osobne formularze i kazdy zwraca inna zmienna POST takze nie moze aktywowac innej funkcji

nospor:
;p nie zmyslilem poprostu nie wydrukowalem tablicy a jak usunelem ze srodka nie wyswietlalo mi nastepnych i przyszlo mi do glowy ze skasowaly sie winksmiley.jpg


jak móglbym wyswietlic wszystkie elementy bez ciaglosci tablicy?
nospor
Cytat
p nie zmyslilem poprostu nie wydrukowalem dablicy a jak usunelem ze srodka nie wyswietlalo mi nastepnych i przyszlo mi do glowy ze skasowaly sie
Następnym razem niech ci nic nie przychodzi a po prostu sprawdź. Jako przedstawiciel początkujących programistów, odpowiedz mi proszę na pytanie:
Czemu wy nigdy nie sprawdzacie tylko uważacie że wasze kody są doskonałe? Przecież dopiero zaczynacie, więc powinniście podchodzić bardzo podejrzanie do tego co piszecie, a wy wręcz odwrotnie. Why?

Cytat
a jak usunelem ze srodka nie wyswietlalo mi nastepnych
Nic dziwnego, zamiast zrobic foreach to ty robisz cos takiego:
while(isset($_SESSION['basked'][$i]))
totalny bezsens. A potem płaczesz ze masz dziure w numeracji.

Cytat
jak móglbym wyswietlic wszystkie elementy bez ciaglosci tablicy?
FOREACH - zanim zaczniesz programować to weź zapoznaj sie z podstawami języka.

ps : przenosze
XP'ek
To ze nei znalem funkcji prin_t ani nie uzywam funkcji forerach nie znaczy ze mi sie nie chce sprawdzac tydzien siedzialem nad jedna funkcja a nie pisalem na forum wiec chyba warto zaoszczedzic czasami czas i napisac na forum. A po za tym zaloze sie ze czasami nawet tobie najprostsze rzeczy sprawiaja problem winksmiley.jpg pzdr
nospor
Cytat
A po za tym zaloze sie ze czasami nawet tobie najprostsze rzeczy sprawiaja problem
Nie odpowiedziałeś na moje pytanie tongue.gif
Nie, jak zaczynam programować coś nowego, to siadam w pierwszy lepszy kurs by poznać podstawy. Jak zaczynam używać jakiś rzeczy w danym języku, to poznaję podstawy o tej rzeczy. W Twoim przypadku jeśli bawisz się tablicami, to masz zajrzej do manuala, gdzie opisane są tablice i masz to przestudiować. Znajdziesz tam bardzo wiele pozytecznych informacji.

Cytat
To ze nei znalem funkcji prin_t
Patrz punkt o podstawach.

Cytat
tydzien siedzialem nad jedna funkcja a nie pisalem na forum wiec chyba warto zaoszczedzic czasami czas i napisac na forum
Chyba warto jednak oszczedzić czas i poznac podstawy niż siedzieć tydzień nad pierdułą? tongue.gif

ps: masz gratisa:
Temat: Jak poprawnie zada pytanie
wkuj na pamięć.
everth
@nospor - hm, wychodzi na to że masz rację. Dla mnie to o tyle dziwne że zawsze należało unikać tworzenia podwójnych formularzy. Gdzieś tam mi siedzi na zwojach że normalnie po submicie przeglądarka wysyła wszystkie formy jak leci. No cóż, teraz wiem że nie.

Postu nie zamierzam edytować bo i po co? Człowiek się wygłupił to niech cierpi tongue.gif
XP'ek
wiesz czasami podstawy potrafia wyfrunac gdy sie ich nie uzywa tongue.gif sciana.gif
nospor
Cytat
Dla mnie to o tyle dziwne że zawsze należało unikać tworzenia podwójnych formularzy.
Nie wolno zagnieżdzać formularzy. A rownoleglych formularzy można tworzyc do bólu - oczywiscie jesli jest to potrzebne smile.gif

Cytat
wiesz czasami podstawy potrafia wyfrunac gdy sie ich nie uzywa
To należy wówczas je odświeżyć.
everth
Właśnie sprawdzałem skąd mi się to mogło wziąć i chyba masz rację - z zagnieżdżania formularzy i ew. konfliktów nazw musiało mi paść na tworzenie formularzy ogólnie. W każdym razie dzięki, bo tkwiłbym dalej w tym nieuświadomionym błędzie.
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.