Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> koszyk
lalas
post 16.09.2003, 14:23:55
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
Go to the top of the page
+Quote Post
wassago
post 16.09.2003, 14:34:08
Post #2





Grupa: Przyjaciele php.pl
Postów: 701
Pomógł: 0
Dołączył: 26.06.2002
Skąd: Londyn

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


BBcode !!!


--------------------
Go to the top of the page
+Quote Post
BzikOS
post 16.09.2003, 15:01:57
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
Go to the top of the page
+Quote Post
lalas
post 16.09.2003, 15:11:34
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
Go to the top of the page
+Quote Post
geminek
post 16.09.2003, 16:37:46
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ę?questionmark.gif
8)
Go to the top of the page
+Quote Post
lalas
post 17.09.2003, 14:23:09
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
Go to the top of the page
+Quote Post
BzikOS
post 17.09.2003, 17:42:38
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 snitch.gif
Go to the top of the page
+Quote Post
kliszaq
post 17.09.2003, 20:44:50
Post #8





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 11.09.2003
Skąd: Giżycko/Wawa

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


zobacz http://forum.php.pl/viewtopic.php?t=5734


--------------------
WWJD?
GG 4004548
Go to the top of the page
+Quote Post
lalas
post 18.09.2003, 14:09:38
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
Go to the top of the page
+Quote Post
lalas
post 18.09.2003, 14:48:06
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.....
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: 20.06.2025 - 14:52