Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]koszyczek
Forum PHP.pl > Forum > Przedszkole
mirik
Witam

Chciałbym się skonsultować z doświadczonymi PHP pisarzami. Otóż muszę napisać koszyk na zakupy i zastanawiam się jak to zrobić. Przejrzałem kilka wpisów ale wszystkie dotyczą problemów a nie jak napisać.

Myślę, żeby zrobić normalny koszyk w bazie danych mysql, tylko problemem wydaje mi się szybkie zapełnienie bazy. Otóż jeden koszyk by był tworzony przy każdorazowym wejściu na stronę (możliwość kupowania ma mieć nie tylko zarejestrowana osoba). Przy 100 wejściach dziennie daje mi to 2800 wpisów w bazie miesięcznie. Nie wiem czy w tym momencie to jest spory problem i czy dobry, gdyż nigdy nie zełniałem tak bazy smile.gif. Myślałem ,aby dać crona ,żeby co miesiąc czyścił bazę, ale może istnieje prostsze rozwiązanie? Z góry dzięki za pomoc.
zegarek84
w bazie ustaw tigger'a który będzie usuwał przedawnienia - np. po godzinie nieaktywności po co ma istnieć wpis koszyka?? - osobno wpisy dokonanego zamówienia...
Pilsener
Zrób tak, jak ja robię przy wyszukiwarce - użytkownik wpisuje kryteria i dostaje porcjowany wynik wyszukiwania, przewija sobie stronę a kryteria są pobierane z bazy i powiązane ze stroną id, adres ma postać: index.php?go=szukaj&id=123. Oczywiście nie pozwalam na zapychanie bazy i przechowuje tylko 100 ostatnich kryteriów wyszukiwania - Ty możesz zrobić podobnie ze swoim koszykiem.

Edit: nie trzeba żadnego triggera ani skomplikowanych akrobacji, nowy rekord nadpisuje najstarszy rekord i tyle - dane zawsze w miarę aktualne bez jakiegoś zachodu.
mirik
"Zrób tak, jak ja robię przy wyszukiwarce - użytkownik wpisuje kryteria i dostaje porcjowany wynik wyszukiwania, przewija sobie stronę a kryteria są pobierane z bazy i powiązane ze stroną id, adres ma postać: index.php?go=szukaj&id=123. Oczywiście nie pozwalam na zapychanie bazy i przechowuje tylko 100 ostatnich kryteriów wyszukiwania - Ty możesz zrobić podobnie ze swoim koszykiem.

Edit: nie trzeba żadnego triggera ani skomplikowanych akrobacji, nowy rekord nadpisuje najstarszy rekord i tyle - dane zawsze w miarę aktualne bez jakiegoś zachodu."

Szczerze nie bardzo rozumiem jak to przekonwerować na mój koszyk (może jeszcze za newbe jestem smile.gif ), jeśli mógłbym trochę bardziej zobrazować.

"w bazie ustaw tigger'a który będzie usuwał przedawnienia - np. po godzinie nieaktywności po co ma istnieć wpis koszyka?? - osobno wpisy dokonanego zamówienia..."

Tigger - pierwsze szczerze słyszę, nie mam żadnego doświadczenia mógłbym może jakoś wytłumaczyć mi to albo źródło do polskiego przykładu?

dzięki
mirik
W jaki sposób nakazać bazę, żeby tworzyła tylko 100 wpisów po przekroczeniu czego zaczeła je nadpisywać od 1 i tak w kółko?
Cysiaczek
Źle rozumujesz smile.gif
Dla bazy danych koszyk nie istnieje. Istnieje tylko tabela zawierająca w najprostszej możliwej wersji 3 kolumny:

1. ID użytkownika (względnie identyfikator sesji, jeśli do koszyka może coś włożyć użytkownik niezarejestrowany)
2. ID produktu
3. Ilość

Gdy użytkownik klika "dodaj do koszyka", w tej tabeli pojawia się nowy rekord. Gdy wyświetlasz koszyk, pobierasz rekordy powiązane z tym użytkownikiem po to, aby uzyskać identyfikatory produktów i pobrać z tabeli produktów nazwy, ceny itd.
Gdy użytkownik składa zamówienie, kasujesz wszystkie rekordy powiązane z tym użytkownikiem z tabeli koszyk.

Zawsze masz zatem tylko tyle rekordów, ile jest różnych produktów w koszykach różnych użytkowników. Może się zdarzyć, że ktoś doda 10 000 produktów do koszyka, ale to już musisz jakiś sensowny limit ustalić programowo, w php.

Pozdrawiam.
mirik
Nie no to jest zbyt dużo roboty, potrzebuję coś szybkiego i łatwe, koszyk na sesji można spokojnie zrobić ?

Przy okazji pomocy

  1. body>
  2. <form action="kupowanie.php" method="post">
  3. PRODUKT 1 <input name="produkt" type="submit" value="+"/>
  4. <br /> <input name="kasuj" type="submit" value="-"/>
  5.  
  6. </form>
  7.  
  8. <?php
  9.  
  10. $p1 = $_POST['produkt'];
  11. $p2 = $_POST['kasuj'];
  12.  
  13.  
  14.  
  15. if (empty($_SESSION['zam'])) {
  16. $_SESSION['zam'] = "";
  17. }
  18.  
  19. if(isset($p1)) {
  20. $smiech=2;
  21. $_SESSION['p1'] = "Produkt 1 szt 1";
  22. $_SESSION['zam']=$_SESSION['p1'];
  23. }
  24. else if (isset($p1) && ($chuj==2)) {
  25. $_SESSION['p1'] = "Produkt 1 szt 2";
  26. $_SESSION['zam']=$_SESSION['p1'];
  27. }
  28.  
  29.  
  30. echo''.$_SESSION['zam'].'';
  31. echo"$smiech";
  32.  
  33. if (isset($p2)) {
  34. $_SESSION['zam'] = "";
  35. }
  36.  
  37. ?>


Już białej gorączki dostaję, chcę zapetlić przycisk tak, że po kolejnym dodaniu produktu 1 do kosza wyświetlało mi 2 sztuki... a on cały czas wyświetla 1 niewiem czemu sciana.gif sciana.gif sciana.gif sciana.gif
mirik
  1. <?php
  2. else if (isset($p1) && ($c***==2)) {
  3. ?>


powinno być

  1. <?php
  2. else if (isset($p1) && ($smiech==2)) {
  3. ?>


Przepraszam przeoczyłem to przy cenzurze, ale to ze złości 362D
Pilsener
Cytat
Gdy użytkownik składa zamówienie, kasujesz wszystkie rekordy powiązane z tym użytkownikiem z tabeli koszyk.
- zgadza się, ale ja akurat zamówienia dodaję do oddzielnej tabeli, a te w tabeli koszyk trzymam pewien czas i przydaje się to też do różnych satystyk czy jak są jakieś problemy z koszykami/zamówieniami to łatwiej wyjaśnić - z kasowaniem mi się nie śpieszy, nigdy nie wiadomo, do czego to się może przydać, ten tysiąc rekordów mniej czy więcej mnie nie zbawi a i obciążenie bazy jest mniejsze.

Cytat
to jest zbyt dużo roboty, potrzebuję coś szybkiego i łatwe
- nie przesadzaj, na sesji możesz czy plikach tymczasowych, ale moim zdaniem to wcale nie jest mniej pracy. I ile tych produktów upchasz w tej sesji? Z tego co pamiętam, to sesja ma ograniczoną pojemność...
q3d
  1. <?php
  2. if(isset($p1)) {
  3. $smiech=2;
  4. $_SESSION['p1'] = "Produkt 1 szt 1";
  5. $_SESSION['zam']=$_SESSION['p1'];
  6. }
  7. else if (isset($p1) && ($chuj==2)) {
  8. $_SESSION['p1'] = "Produkt 1 szt 2";
  9. $_SESSION['zam']=$_SESSION['p1'];
  10. }
  11. ?>


możne o to Ci chodzi:
  1. <?php
  2. if (isset($p1) && (!isset($_SESSION['pl']))) {
  3.    $_SESSION['pl'] = 1;
  4. } else if (isset($p1)) {
  5.    $_SESSION['pl']++;
  6. } else if (isset($p2)) {
  7.    --$_SESSION['pl'];
  8. }
  9. ?>



Ja bym ten kod zrozumiał następująco: JEŻELI ISTNIEJE p1 to: wykonaj_to (i to ci robi, alternatywa jest pomijana), w przeciwnym wypadku JEŻELI ISTNIEJE p1...
Po ludzku mówiąc albo rybki albo...
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.