Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: koszyk
Forum PHP.pl > Forum > PHP
lalas
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
wassago
BBcode !!!
BzikOS
Może to Ci pomoże http://forum.php.pl/viewtopic.php?t=5734
lalas
dzieki stary:) jak tylko dostane sie jutro do serwera to sprawdze to
mam nadzieje ze to pomoze


pozdrawiam
Alex
geminek
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)
lalas
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
BzikOS
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
kliszaq
zobacz http://forum.php.pl/viewtopic.php?t=5734
lalas
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
lalas
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.....
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.