Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problemy z koszykiem i sesją z PHPSESSID
sebap123
post 19.12.2010, 12:36:51
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Napisałem ostatnio funkcję, która ma w zamyśle tworzyć w tabeli o nazwie carts nowy koszyk z podanym cartid i cart, który będzie jakby przegródką w koszyku, czyli zawartość cart w pewnym momencie zostaje przypisana do cartid w tabeli i cart zostaje wyczyszczony, żeby znowu zbierać dane. Powiedzmy, że wstępnie coś mi się udało napisać, jednak mam mały problem. Aktualnie funkcja tworząca cartid i podległe mu cart wygląda tak:
roley()
  1. function roley(){
  2. $cart_id=md5(rand(1,300));
  3. $rol=mysql_query("INSERT INTO carts (cartid)
  4. VALUE ('".$cart_id."')");
  5. $_SESSION['cart_id']=$cart_id;
  6. $_SESSION['cart']="";
  7. }


a na początku pliku gdzie można dodawać produkty (nazwijmy go sklepik.php) jest taka komenda:
  1. roley();


No i wszystko ładnie działa, jednak nie w 100% aż tak dobrze. Problemem jest tutaj to, że gdy użytkownik odświeży stronę to jest tworzony nowy koszyk i nowa sesja. Dlatego pomyślałem nad jakimś zabezpieczeniem. No i wpadłem na coś takiego:
roley()
  1. function roley($sesja){
  2. $cart_id=$sesja;
  3. $test=mysql_query("SELECT FROM carts (cartid,productid)
  4. VALUE ('".$cart_id."','""')");
  5. if(!mysql_fetch_array($test)==1){
  6. $rol=mysql_query("INSERT INTO carts (cartid)
  7. VALUE ('".$cart_id."')");
  8. $_SESSION['cart_id']=$cart_id;
  9. $_SESSION['cart']="";
  10. }
  11. }


a wywołanie:
  1. roley($_COOKIE['PHPSESSID']);


Tutaj jednak znowu są problemy. Pierwszy, że nie chce mi teraz nic ruszyć. Po prostu biały ekran, a po drugie to rozwiązanie nie jest jednak dobre, bo wierszy z cartid tym samym będzie więcej, bo każdy ma obsługiwać jednego carta dlatego tez zabezpieczenie to, że równe 1 mi nie pasuje.

Bardzo proszę was o pomoc, bo tutaj już za bardzo się zakręciłem w analizowaniu i potrzebne mi jakieś świeże spojrzenie. A może w ogóle jakiś inny sposób macie na takie przekazywania.
Go to the top of the page
+Quote Post
Quadina
post 19.12.2010, 13:32:40
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


W pierwszej wersji po prostu dodaj sobie w pierwszej linijce funkcji;
  1. if(isset($_SESSION['cart']))return;

Wtedy po odświeżeniu nie będzie się tworzyć nowy koszyk na podstawie warunku: czy już jest koszyk zapisany w sesji?

Wydaje mi się to odpowiedzią na Twoje pytanie.

W drugiej wersji wykonujesz zapytanie do SQL które nie ma sensu. Miało byc chyba:
  1. SELECT cartid,productid FROM carts WHERE cartid = "$cart_id";

Dodaj też sobie do swojego md5 time(), bo sam rand(0,300) ma ogromną powtarzalność.

Ten post edytował Quadina 19.12.2010, 13:35:03


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
Rid
post 19.12.2010, 17:52:07
Post #3





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Jeśli nie chcesz aby sesja ci ginęła użyj także cookies
  1. setcookie('cart_id',$cart_id,time()+(60));

gdzie 60 to czas życia ciasteczka mierzona w sekundach.
Natomiast w drugim dokumencie:
  1. echo 'to jest moja sesja:' .$_SESSION['cart_id']=$_COOKIE['cart_id'];

Mimo ,że zamkniesz przeglądarkę ,lub odświeżysz, cookies będzie nadal podtrzymywać sesje przez 60 sekund -naturalnie możesz ustawić inny czas życia twojego ciasteczka.

Ten post edytował Rid 19.12.2010, 17:54:14
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: 26.06.2025 - 19:27