![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 123 Pomógł: 0 Dołączył: 16.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
mam maly problem i nie wiem czy uda mi sie to wyjasnic,
zrobilem sklep i na windzie wszystko dziala - na serwerze musialem tylko podmienic zmienne na $koszyk= $_GET['koszyk']; itp. i wlasciwie tez wszystko dziala tylko ze nie zapamietuje mi artykulow dodanych do koszyka co wybiore produkt z listy pokazuje mi go jako wybrany, ale jak dodaje nastepny to pojawia sie nowy a znika stary - przesle podspodem kod z koszyka moze cos przeoczylem - probowalem juz wszystkich sposobow i nic z tego wyczytalem jeszcze, ze jeśli włączona jest opcja track_vars a register_globals jest wyłączona, tylko pozycje należące do zmiennej asocjacyjnej $HTTP_SESSION_VARS mogą być zarejestrowane jako zmienne sesyjne - admin mi powiedzial, ze wlasnie takie ma ustawenia i tak tez zrobilem : KOSZYK.php: [php:1:251b6a6121]<?php <? $HTTP_SESSION_VARS['koszyk']= $_GET['koszyk']; $HTTP_SESSION_VARS['dodaj']= $_GET['dodaj']; //$HTTP_SESSION_VARS['usun']= $_GET['usun']; $HTTP_SESSION_VARS['id']= $_GET['id']; $HTTP_SESSION_VARS['cena']= $_GET['cena']; $HTTP_SESSION_VARS['ilosc']= $_GET['ilosc']; $HTTP_SESSION_VARS['stan']= $_GET['stan']; class koszyk { var $tab; var $ceny; var $suma; function dodaj($id, $cena, $ilosc) { $this->tab[$id]+=$ilosc; } function usun($id, $cna, $ilosc) { if($this->tab[$id] > $ilosc) { $this->tab[$id] -= $ilosc; } else unset($this->tab[$id]); } function stan() { return $this->tab; } } ?> zawartosc koszyka includuje tak: <?php include("koszyk.php"); session_start(); if (!$HTTP_SESSION_VARS['koszyk']) $HTTP_SESSION_VARS['koszyk'] = new koszyk; if ($HTTP_SESSION_VARS['dodaj']) $HTTP_SESSION_VARS['koszyk']->dodaj($HTTP_SESSION_VARS['dodaj'], $HTTP_SESSION_VARS['cena'], $HTTP_SESSION_VARS['ilosc']); if ($HTTP_SESSION_VARS['usun']) $HTTP_SESSION_VARS['koszyk']->usun($HTTP_SESSION_VARS['usun'], $HTTP_SESSION_VARS['cena'], $HTTP_SESSION_VARS['ilosc']); ?> ?>[/php:1:251b6a6121] tutaj podaje zawartosc sesji: koszyk|O:6:"koszyk":3:{s:3:"tab";a:1:{i:75;i:1;}s:4:"ceny";N;s:4:"suma";N;}dodaj|s:2:"75";usun|N;id|N;cena|s:6:"599,99";ilosc|s:1:"1";stan|a:1:{i:75;i:1;} przyznam, ze niepodoba mi sie to, ze jet tam rowniez deklaracja usun - moze on dodaje i zaraz potem usuwa? please!!! pomozcie |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 701 Pomógł: 0 Dołączył: 26.06.2002 Skąd: Londyn Ostrzeżenie: (0%) ![]() ![]() |
BBcode !!!
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 660 Pomógł: 0 Dołączył: 28.08.2002 Skąd: Starachowice Ostrzeżenie: (0%) ![]() ![]() |
Może to Ci pomoże http://forum.php.pl/viewtopic.php?t=5734
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 123 Pomógł: 0 Dołączył: 16.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
dzieki stary:) jak tylko dostane sie jutro do serwera to sprawdze to
mam nadzieje ze to pomoze pozdrawiam Alex |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 16.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
Tak właściwie to ja się nie znam, ale może dlatego tak się dzieje, że za każdym razem rozpoczynacz nową sesję?
![]() 8) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 123 Pomógł: 0 Dołączył: 16.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
no coz........ :cry:
chyba nie dziala - mozecie to latwo sprawdzic podaje prosty przyklad: PLIK1.php <?php $HTTP_SESSION_VARS['koszyk']= $_GET['koszyk']; $HTTP_SESSION_VARS['dodaj']= $_GET['dodaj']; $HTTP_SESSION_VARS['usun']= $_GET['usun']; $HTTP_SESSION_VARS['id']= $_GET['id']; $HTTP_SESSION_VARS['cena']= $_GET['cena']; $HTTP_SESSION_VARS['ilosc']= $_GET['ilosc']; class koszyk { var $zawartosc; function dodaj($element, $ilosc) { $this->zawartosc[$element] += $ilosc; } function usun($element, $ilosc) { if ($this->zawartosc[$element] > $ilosc) $this->zawartosc[$element] -= $ilosc; else unset($this->zawartosc[$element]); } function stan() { return $this->zawartosc; } } ?> PLIK2.php <?php include("plik1.php"); session_start(); if (!$HTTP_SESSION_VARS['koszyk']) $HTTP_SESSION_VARS['koszyk'] = (isset($HTTP_SESSION_VARS['koszyk'])) ? unserialize($HTTP_SESSION_VARS['koszyk']) : new koszyk(); $HTTP_SESSION_VARS['koszyk'] = new koszyk; if ($HTTP_SESSION_VARS['dodaj']) $HTTP_SESSION_VARS['koszyk']->dodaj($HTTP_SESSION_VARS['dodaj'], 10); if ($HTTP_SESSION_VARS['usun']) $HTTP_SESSION_VARS['koszyk']->usun($HTTP_SESSION_VARS['usun'], 10); $HTTP_SESSION_VARS['stan'] = $HTTP_SESSION_VARS['koszyk']->stan(); if ($HTTP_SESSION_VARS['stan']) while (list($key, $value) = each($HTTP_SESSION_VARS['stan'])) echo "$key $value<br>"; $HTTP_SESSION_VARS['koszyk'] = serialize($HTTP_SESSION_VARS['koszyk']); ?> co ltwiejsze nie przechodze do innego pliku, caly czas wywoluje plik2.php i co odswiezam strone to nie dopisuje mi kolejnej 10tki i nowego towaru tez nie dopisuje - czy dobrze zrozumialem zasade dzialania serialize i unserialize? Alex |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 660 Pomógł: 0 Dołączył: 28.08.2002 Skąd: Starachowice Ostrzeżenie: (0%) ![]() ![]() |
To co mi się rzuciło w oczy:
1. Po co wrzucasz wszystko do sesji? Wystarczy zserializowany koszyk. 2. Czy Ty naprawdę to wszystko przekazujesz get'em? No a to $_GET['koszyk'] - to już dla mnie prawdziwa zagadka. 3. W plik2.php najpierw includujesz plik1.php (w którym masz odwołania do zmiennych sesyjnych), a dopiero potem startujesz sesje... powinno być odwrotnie, aczkolwiek patrz pkt 1. 4. [php:1:2ca60b968f]<?php if (!$HTTP_SESSION_VARS['koszyk']) $HTTP_SESSION_VARS['koszyk'] = (isset($HTTP_SESSION_VARS['koszyk'])) ? unserialize($HTTP_SESSION_VARS['koszyk']) : new koszyk(); $HTTP_SESSION_VARS['koszyk'] = new koszyk; ?>[/php:1:2ca60b968f] Bez sensu. Proponuję przeczytaj jeszcze raz post, o którym mówiłem Ci wcześniej. Wystarczy przecież: [php:1:2ca60b968f]<?php $HTTP_SESSION_VARS['koszyk'] = (isset($HTTP_SESSION_VARS['koszyk'])) ? unserialize($HTTP_SESSION_VARS['koszyk']) : new koszyk(); ?>[/php:1:2ca60b968f] 5. Powyższy kod spowoduje unserializację (? hmm) koszyka ze zmiennej sesyjnej, więc od tej chwili odwołujesz się do obiektu koszyk, a nie do zzserializowanego obiektu w sesji. Czyli zamiast: [php:1:2ca60b968f]<?php if ($HTTP_SESSION_VARS['dodaj']) $HTTP_SESSION_VARS['koszyk']->dodaj($HTTP_SESSION_VARS['dodaj'], 10); ?>[/php:1:2ca60b968f] powinno być (juz z uwzględnieniem poprawek, którego opisałem w poprzednich punktach): [php:1:2ca60b968f]<?php if ($_GET['dodaj']) $koszyk->dodaj($_GET['dodaj'], 10); ?>[/php:1:2ca60b968f] 6. Używaj BBCODE, bo nadwyrężasz cierpliwość moderatorów, tzn. opiekunów ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 11.09.2003 Skąd: Giżycko/Wawa Ostrzeżenie: (0%) ![]() ![]() |
-------------------- WWJD?
GG 4004548 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 123 Pomógł: 0 Dołączył: 16.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
ten $_GET['koszyk'] stosuje poniewaz admin zablokowal zmienne globalne i bez tej deklaracji kompletnie zadnych zmiennych nie przekazuje mi do innych plikow. jak nie zrobie tego GETA to koszyknic nie pokazuje
"W plik2.php najpierw includujesz plik1.php, a dopiero potem startujesz sesje... powinno być odwrotnie" ok zrobilem tak i wywala mi blad: Fatal error: Cannot instantiate non-existent class: koszyk in /home/users/deirdre/test3/plik2.php on line 13 cos mi sie wydaje ze jesli ma kod wykonc jakies dzialanie na koszyku to najpierw trzeba go includowac a potem dzialac - czy sie myle? a ta linia: if ($_GET['dodaj']) $koszyk->dodaj($_GET['dodaj'], 10); zwraca mi blad: Fatal error: Call to a member function on a non-object in /home/users/deirdre/test3/plik2.php on line 21 przerabiajac ten $koszyk na $HTTP_SESSION_VARS['koszyk'] dziala ale nie dopisuje nowych danych do koszyka hmmm.... holera - naprawde nie mam pojecia moglbys przedstawic kod z pliku Twojego? na ktorym Ci dziala - moze cos jest popier... z tym serwerem na ktorym to robie? pozdrawiam |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 123 Pomógł: 0 Dołączył: 16.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
jeszcze jedna ciekawa uwaga
mozesz to sprawdzic? http://ekonom.univ.gda.pl/php_manual/langu...ization.php.htm czy ten przyklad skryptu Ci chodzi - u mnie np. wywala: Warning: Bad arguments to implode() in /home/users/deirdre/test3/page2.php on line 5 Fatal error: Call to a member function on a non-object in /home/users/deirdre/test3/page2.php on line 9 zaczynam sie zastanawiac cy napewno wszystkie pakiety do phpa sa zainstalowane na tym serwerze na ktorym to testuje, gdzies mi sie obily na necie informacje o pakietach odpowiedzialnych za zachowanie sesji......hmm..... |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 14:52 |