Operacje na sesji


(northwest) #1

Witam,

mam taki kod:

session_start(); 

if(!isset($_SESSION['koszyk'])) //jezeli sesja po raz pierwszy otwarta

    {

        $_SESSION['koszyk']=array();   

    }

    if(!isset($_SESSION['idd']))

    {

        $_SESSION['idd']=0; 

    }

    if(isset($_POST['nazwa'])) //zapis

    {

        $_SESSION['koszyk'][$_SESSION['idd']]=$_POST['nazwa']."|".$_POST['ilosc']."|";

        $_SESSION['idd']++; 

    }


	if(isset($_SESSION['idd'])){	 

		foreach($_SESSION['koszyk'] as $value) {

			$wynik = explode("|", $value);

			echo"$wynik[0] i $wynik[1] 
";

		}

	}
  • nazwa:
  • ilosc:

  • [/code]

Mam taki problem, chciałbym zrobić jakąś blokadę dublujących postów (tak żeby zmienne ilosc i nazwa nie mogły powtarzać się sesji).

Wiecie może jak to zrobić?

Northwest


(ra-v) #2
if( array_search($_POST['nazwa']."|".$_POST['ilosc']."|", $_SESSION['koszyk'][$_SESSION['idd']]) !== false ){

   // duplikat, blokada

}

else{

   // dodaj

}

albo inaczej

if( array_search($_POST['nazwa']."|".$_POST['ilosc']."|", $_SESSION['koszyk'][$_SESSION['idd']]) === false ){

 // dodaj

}

(northwest) #3

już testuje... dzięki :))

pa.

  • Usuń
    }[/code]

Mam jeszcze takie pytanie, załóżmy że dorobiłem sobie taki formularz jak wyżej i chciałbym po wysłaniu usunąć z sesji daną wartość/rekord (na podstawie zmiennej usuń).

Wiecie może jak to zrobić? :slight_smile:


(Sitemaster) #4
unset($_SESSION['koszyk'][$_POST['usun']])

(Dominik Podgorski) #5

Witam ! :slight_smile:

Przesyłam do sesji dodatkowo cenę.

if(isset($_GET['nazwa'])) //zapis

    {

        $_SESSION['koszyk'][$_SESSION['idd']]=$_GET['nazwa']."|".$_GET['kategoria']."|".$_GET['cena']."|";

        $_SESSION['idd']++;

    }

   }

Jeśli mam kilka produktów czy istnieje możliwość obliczenie łącznej ceny za te produkty ?? i tutaj wywala mi błąd o treści : Warning: array_search() expects parameter 2 to be array, null given in C:\xampp\htdocs\sklep_internetowy\koszyk.php on line 43

43if( array_search($_GET['nazwa']."|".$_GET['ilosc']."|", $_SESSION['koszyk'][$_SESSION['idd']]) !== false ){

44 // duplikat, blokada

45}

46else{

 47 // dodaj

48}

Proszę o pomoc.


(Sitemaster) #6

dziwnie to trochę robisz.

-po co ci to $_SESSION['idd'] ? to samo bys uzyskał np. przez uzycie array_push do dodawania elementów tablicy.

Łatwiej jest tu operować całkowicie na tablicach np.:

najpierw jw. sprawdzasz czy jest koszyk

dodawanie do koszyka ze sprawdzeniem czy dubel

wypisanie zawartości koszyka

by sprawdzić czy konkretny towar jest w koszyku

albo > if(isset($_SESSION['koszyk]['towar'])) echo 'ten towar znajduje się już w koszyku'; else echo 'brak tego towaru w Twoim koszyku';

sumowanie koszyka

przykładowa struktura wynikowa tablicy/koszyka:

łatwo tym operować, w przypadku dubla przy dodawaniu możesz zwiększyć ilość tego produktu itd.

Oczywiście założyłem tu, że nazwa towaru jest unikatowa, nic jednak nie stoi na przeszkodzie, by w innym wypadku głównym kluczem identyfikującym produkt uczynić jakiś inny unikalny id a nazwę przesunąć do podtablicy z cena i ilością.

-wtedy dubla sprawdzasz porównując ten właśnie uid a nie nazwę.


(Dominik Podgorski) #7

Przerobiłem nieznacznie ten kod :

<?php session_start();

//session_destroy();

if(!isset($_SESSION['koszyk'])) $_SESSION['koszyk']=array(); //sprawdzam czy jest koszyk



echo 'Twoje wybrane produkty: '.'
';


if(isset($_GET['idgra'])){

$tmp=array('nazwa'=>$_GET['nazwa'],'kategoria'=>$_GET['kategoria'],'platforma'=>$_GET['platforma'],'cena'=>$_GET['cena'], );



if(array_key_exists($_GET['idgra'], $_SESSION['koszyk'])) echo 'Istnieje już w koszyku gra o podanym id'.'
';

else $_SESSION['koszyk'][$_GET['idgra']]=$tmp;

}


foreach ($_SESSION['koszyk'] as $sub => $key)

 echo 'identyfikator gry: '.$sub.', nazwa: '.$key['nazwa'].' kategoria: '.$key['kategoria'].', platforma: '.$key['platforma'].' cena: '.$key['cena'].'
';



$suma=0;

foreach ($_SESSION['koszyk'] as $sub => $key) $suma+=$key['cena'];

echo 'Łączna suma do zapłaty: '.$suma;

?>

teraz kilka pytań mam.. 1. Czy istnieje możliwość usunięcia poszczególnych produktów.tzn. prześlę sobie kilka gier i jedną chciałbym usunąć bo się rozmyśliłem :slight_smile:

foreach ($_SESSION['koszyk'] as $sub => $key)

 echo 'identyfikator gry: '.$sub.', nazwa: '.$key['nazwa'].' kategoria: '.$key['kategoria'].', platforma: '.$key['platforma'].' cena: '.$key['cena'].'
';

Chciałbym ustawić sobie tutaj przycisk który by to robił ale nie wiem w ogóle jak się za to zabrać :frowning:

Tak czy owak dzięki za dotychczasową pomoc !!


(Sitemaster) #8

łatwiej by było dać linka do usunięcia albo checkboxy

Jak jednak chcesz buttony, to można np tak


(Dominik Podgorski) #9

Usuwanie już jest opanowane. Dodałem również do strony opcję rejestracji i logowania.

Przechowuję w bazie danych takie dane o użytkowniku:

Logowanie polega na podaniu nazwa_uzytkownika i hasla. Nie mogą istnieć dwa takie same loginy. nazwa_uzytkownika przechowuje sobie w sesji i jest ona dostępna wszędzie.

Do czego zmierzam. Chciałbym teraz zamówić to co mam w koszyku. Po naciśnięciu przycisku chciałbym zapisać to co mam w koszyku w tabeli zamówienia. Oczywiście sprawdzałbym czy użytkownik jest zalogowany (to potrafię zrobić ) czy w koszyku jest jakiś produkt (to też umiem) .

Tabela zamówienia:

idzamowienia

nazwa_uzytkownika

idgra

suma

data_zamowienia

Dobrze to sobie wymyśliłem czy może istnieje jakiś inny łatwiejszy sposób zrobienia tego. Bo jak np. zapisać dane do tabeli jeśli jest kilka produktów w koszyku ?