Operacje na sesji

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

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

}

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:

unset($_SESSION['koszyk'][$_POST['usun']])

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.

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ę.

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 !!

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

Jak jednak chcesz buttony, to można np tak

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 ?