Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] jak zrobić cache do listy rozwijanej?
skleps
post 12.04.2011, 11:57:47
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Zawartość tabeli A wyświetlam jako lista rozwijana <select>, wszystko oczywiście generowane w php.
Zawartość tej tabeli prawie że się nie zmienia więc aż się prosi o robienie jakiegoś cache, żeby nie obciążać bazy danych tym samym zapytaniem.
Zrobienie takiego cache to banał.

Problem robi się, gdy User zaznaczy w liście rozwijanej np. opcję 3 i trzymamy ten wybór w zmiennej sesyjnej. Później ta opcja powinna być automagicznie ustawiona przez całe jego chodzenie po serwisie, dopóki nie zmieni sobie (czyli chodzi o to, ze któraś opcja musi być selected).
Problem w tym, że jeśli zapiszemy do pliku cache ten wybór, to wszystkim innym internautom też będzie się automagicznie wybierałą opcja 3.

Ja wykoncypowałem 2 wyjścia i oba mi się nie podobają:

1. robimy kilka plików cache - jeden dla listy z niewybraną żadną opcją i po jednym dla każdej wybranej opcji
2. robimy pliki cache i wiążemy te pliki z danym internautą przez np. jakiś identyfukator przechowywany w sesji.

Czy jest jakaś inna, łatwiejsza i przyjemniejsza metoda obejścia problemu?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
lukaskolista
post 12.04.2011, 12:17:47
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Piszesz
Cytat
Zrobienie takiego cache to banał.

a pozniej
Cytat
Problem w tym, że jeśli zapiszemy do pliku cache ten wybór, to wszystkim innym internautom też będzie się automagicznie wybierałą opcja 3.
wiec widac nie jest to taki banal. Jak u Ciebie wygladaja pliki cache? Podaj przyklad zawartosci takiego pliku.
Go to the top of the page
+Quote Post
skleps
post 12.04.2011, 12:35:10
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Na razie w ogóle nie wyglądają, bo zastanawiam się jak to rozwiązać.

Na razie widzę algorytm tak, że funkcja generująca tą listę:
1. sprawdza czy istnieje plik cache.
2. jak istnieje to zaczytuje treść pliku i ją zwraca jako swoją odpowiedź. koniec działania funkcji.
3. jeśli plik cache nie istnieje, to zadaje odpowiednie pytanie bazie, następnie tworzy kod listy, zapisuje ją do nowoutworzonego pliku cache i zwraca listę. koneic działania.

a jak może wyglądać taka lista? Ot choćby tak:

  1. <select name="A">


zabawa się robi, gdy trzeba gdzieś wcisnąć "selected" przy odpowiedniej opcji
Go to the top of the page
+Quote Post
lukaskolista
post 12.04.2011, 12:36:48
Post #4





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


wiec nie wiem dlaczego dla uzytkownika 1 mialo by cache'owac liste uzytkownika 2.

Przy okazji jedynym slusznym rozwiazaniem jest cache wynikow zapytania SQL, jezeli dobrze napiszesz zapytanie to wszystko bedzie ok

Ten post edytował lukaskolista 12.04.2011, 12:39:22
Go to the top of the page
+Quote Post
skleps
post 12.04.2011, 12:40:50
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Cytat(lukaskolista @ 12.04.2011, 13:36:48 ) *
wiec nie wiem dlaczego dla uzytkownika 1 mialo by cache'owac liste uzytkownika 2


bo jeśli dla użytkownika 1 wpiszesz selected przy np. opcji 3:
  1. 1.
  2. <select name="A">
  3. <option selected>3</option>
  4. </select>


i tak zapiszesz do pliku cache, to gdy użytkownik 2 dostanie dane z tego pliku cache, to będzie miał od razu wybraną opcję 3:
Go to the top of the page
+Quote Post
lukaskolista
post 12.04.2011, 12:43:42
Post #6





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


to dla uzytkownika 2 rob osobny plik cache i po problemie. Nie wiem o co Ci chodzi, cache'uje sie wyniki zapytan z bazy, a nie listy select...

Edit:
opisz jak wedlug Ciebie mialby wygladac mechanizm cache

Ten post edytował lukaskolista 12.04.2011, 12:44:46
Go to the top of the page
+Quote Post
skleps
post 12.04.2011, 12:46:49
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Cytat(lukaskolista @ 12.04.2011, 13:43:42 ) *
to dla uzytkownika 2 rob osobny plik cache i po problemie


no i to jest wyjście 2 o którym pisałem, że mi się nie podoba.

Cytat(lukaskolista @ 12.04.2011, 13:43:42 ) *
cache'uje sie wyniki zapytan z bazy, a nie listy select...


a jak zapisać samą odpowiedź z bazy, bez kodów html, do pliku cache?
Tak żeby później jej użyć z poziomu skryptu do stworzenia poprawnej listy rozwijanej?

Go to the top of the page
+Quote Post
lukaskolista
post 12.04.2011, 12:48:25
Post #8





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


czyli jednak nie pojmujesz mechanizmu cache. Normalnie, przez serialize() albo json_encode()

skoro nie podoba Ci sie tworzenie kilku plikow to nie mamy o czym rozmawiac, cache odpada

Ten post edytował lukaskolista 12.04.2011, 12:51:15
Go to the top of the page
+Quote Post
thek
post 12.04.2011, 12:57:25
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ech... A to nie możesz zostawić w spokoju cache Selecta i wybór zapamietać w cookies lub sesji? Pobierać tego nie będziesz z bazy, a po stronie php lub js jedynie zajmiesz sie ustawieniem tego wyboru smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
lukaskolista
post 12.04.2011, 12:59:00
Post #10





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Przykladowa zawartosc pliku cache

  1. a:2:{i:0;a:7:{s:2:"id";s:1:"3";s:15:"object_group_id";s:1:"2";s:5:"width";s:1:"1";s:6:"height";s:1:"1";s:8:"width_px";s:2:"31";s:9:"height_px";s:2:"19";s:4:"name";s:5:"Ulica";}i:1;a:7:{s:2:"id";s:1:"5";s:15:"object_group_id";s:1:"3";s:5:"width";s:1:"3";s:6:"height";s:1:"2";s:8:"width_px";s:2:"76";s:9:"height_px";s:3:"136";s:4:"name";s:4:"Blok";}}
Go to the top of the page
+Quote Post
skleps
post 12.04.2011, 14:45:51
Post #11





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Cytat(lukaskolista @ 12.04.2011, 13:48:25 ) *
przez serialize()


OK, o to chyba chodziło, dzięki

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 09:53