[PHP] Koszyk w sklepie internetowym

0

Witam
Od kilku miesięcy tworzę sklepy internetowe. Do przechowywania artykułów w koszyku używam sesji. Zmienna w sesji posiada kolejne ID produktów, oddzielone przecinkiem. Chciałym zaznaczyć że wszystkie produkty zapisane są w bazie mysql.
Zastanawiam się nad tymczasowymi tabelami w mysql. Chciałym się dowiedzieć czy ktoś tego używa ?
Szukam też alternatywnych rozwiązań, czy ktoś ma jakieś pomysły ?
Czy ktoś mógłby sie podzielić doświadczeniami ?

Z góry dziękuję
Darek

0

Mozesz użyć sesji:

<?php
session_start();
mysql_connect('host', 'user', 'pass');
$db=mysql_select_db('towary');
$_SESSION['id'][]=$_POST['id'];
$_SESSION['ile']++;
$c=mysql_query("SELECT * FROM towary WHERE id={$_SESSION['id']}", $db);
while($towar=mysql_fetch_array($c)){
$_SESSION['nazwa'][]=$towar['nazwa'];
$_SESSION['netto'][]=$towar['cena'];
$_SESSION['vat'][]=$towar['vat'];
$_SESSION['brutto'][]=$towar['netto'] * (1 + ($towar['vat']/100));
}
// Wyświetlenie wszystkich towarów:
$ile=$_SESSION['ile'];
$i=0;
echo '<table><tr><td>ID</td><td>Nazwa</td><td>Cena 
netto</td><td>VAT</td><td>Cena brutto</td></tr>';
while($i<$ile){
$i++;
echo '<tr><td>'.$_SESSION['id'][$i].'</td><td>'
.$_SESSION['nazwa'][$i].'</td><td>'.$_SESSION['netto'].
'</td><td>'.$_SESSION['vat'].'%</td><td>'.
$_SESSION['brutto'].'</td></tr>';
$n = $n + $_SESSION['netto'][$i];
$b = $b + $_SESSION['brutto'][$i];
$netto=sprintf("%.2f", $n);
$brutto=sprintf("%.2f", $b);
}
echo '<br>Razem netto: '.$netto.'<br>
Razem brutto: '.$brutto;
mysql_close($db);
?>
0
Zawadzki14 napisał(a)

używam sesji.

Infor_mat_ik napisał(a)

Mozesz użyć sesji:

chyba sie nie zrozumieliśmy.. ;)

0

Zawadzki14, przy pisaniu sklepu internetowego musisz bardzo uwazac, zreszta jak przy pisaniu kazdego systemu platniczego ;P

Np.
Kod zaproponowany przez Infor_mat_ik (z tego co widze, bo nie implemetowalem go :]) dziala na pierwszy rzut oka dobrze...
Ale przy finansach diabel tkwi w szczegolach... czyli groszach [diabel]

Mamy dwa artykuly w koszyku:
jeden za 0,66 netto
drogi za 0,44 netto
oba maja 22% VAT

brutto kosztuja (przy wyswietleniu przez strone)
0,81 - pierwszy
0,54 - drogi
czyli razem mam do zaplaty 1,35 zlotych ;)
hmmm, a na stronie pokaze 1,34 :]

Nie chce radzic nikomu jak ma robic, tylko sygnalizuje problem i chce zebyscie byli ostrozni, bo moze znalezc sie "upierdliwy" klient sklepu ktory sie do tego przyczepi i jesli nie rozwiazecie jakos tego (a rozwiazan jest kilka) to bedzie mial racje :-/

0

wiem o tym błedach , ale raczej nikt sie nie skupia na groszach ;) chyba że robi milionowe zakupy.

mam takie pytanie: na czym polegają tebele tymczasowe w mysql ?

0

Witam.

Z tego co stosowalem tabele tymczasowe (pare razy) to w mysql'u nie byly mi specjalnie przydatne, glownie z tego wzgledu, ze mozna uzyc danej tablicy tylko raz w danym zapytaniu. Oczywiscie jak sie nie da inaczej to tak tez moze byc. Ale ja pare razy musialem uzyc kilku tabel o praktycznie takich samych polach, glownie dlatego, ze zapytanie musialo uzyc jej 2 razy.
Jesli zapytanie nie musi sie odwolywac to w sumie przydatne - nie wiem tylko jak z wydajnoscia bo nie testowalem, ale jesli mamy tworzyc jedna tabele w bazie na stale tylko po to, zeby jej uzyc w 2 na 100 funkcji to jasne, ze bardziej oplaca sie tymczasowe.

pozdrawiam
johny

0

w ogóle robienie tego w mysqlu jest chyba bez sensu, php ma tyle samo roboty a może więcej jak z sesjami, które i tak chyba otwierasz, tylko że w mysqlu jeszcze odpowiedź idzie od serwera do serwera, jedyne co to bym proponował nie oddzielać ID przecinkami tylko dawać jako kolejne indexy tablicy, zapamiętywanie ceny itd dodanego artykułu też jest trochę nie tego, bo jeśli powiedzmy sesja by trwała bardzo długo to by w końcu mógł coś kupić drożej czy taniej, czy w ogóle co innego, albo wykupili w czasie dokonywania zakupów a user dalej ma dane z "cache" ... chociaż to by niby przyspieszyło ... no nie wiem
chociaż nie oddzielanie ids przecinkami też nie lepsze bo modyfikować wybór łatwiej ale do zapytania też trzeba w końcu zrobić implode

nikt się nie skupia na groszach jeśli ten grosz jest na jego korzyść, jak nie to nawet nie wiesz jak się skupiają ...
ale oprócz tego że widzę że skrypt nie zadziała bo ma przynajmniej 4 błędy to traktując go jako pseudokod nie widzę dlaczego by miał pokazać 1,34 ?? // aha, już widzę, nie przypatrywałem się temu kawałkowi kodu

0

Widze że sesje są niezastąpione ;))
Zainteresowałem się tymi tabelami tymczasowymi bo myślałem że będzie łatwo na nich operować (zapytania jak do zwykłych tabel w mysql). ale skoro raz tylko można stworzyć zapytanie to duży minus

a propoS groszy:
zamiast round to:

<?
// ceil() Zaokrągla ułamki w górę -  jest to minus dla klientów bo zapłacą więcej ;)
echo ceil(1.5); // 2

// floor() Zaokrągla ułamki w dół - a tu plus dla klientów bo zapłącą mniej. proste
echo floor(1.5); // 1
?>

Temat możemy zakończyć bo juz wiem wszystko co chciałem wiedzieć
dzieki wszystkim
pzdr

0
Zawadzki14 napisał(a)

Widze że sesje są niezastąpione ;))
ale skoro raz tylko można stworzyć zapytanie to duży minus

Mala uwaga: zapytan moze byc duzo, tylko konkretna tabela w konkretnym zapytaniu moze wystapic tylko raz. Ale to tez duzy minus.

pozdrawiam
johny

1 użytkowników online, w tym zalogowanych: 0, gości: 1