Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]koszyczek
-mirik-
post
Post #1





Goście







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 (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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...
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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.

Ten post edytował Pilsener 30.10.2008, 14:44:36
Go to the top of the page
+Quote Post
-mirik-
post
Post #4





Goście







"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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
-mirik-
post
Post #5





Goście







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?
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Źle rozumujesz (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
-mirik-
post
Post #7





Goście







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 (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)
Go to the top of the page
+Quote Post
-mirik-
post
Post #8





Goście







  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
Go to the top of the page
+Quote Post
Pilsener
post
Post #9





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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ść...
Go to the top of the page
+Quote Post
q3d
post
Post #10





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

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


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

Ten post edytował q3d 31.10.2008, 18:13:03
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 05:42