Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V  < 1 2 3  
Reply to this topicStart new topic
> forum
KRCreater
post 4.10.2004, 02:00:46
Post #41





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.01.2004
Skąd: Poznań

Ostrzeżenie: (10%)
X----


wracam do tego tematu - swoje forum juz dość rozwinąłem , a deser zostawiłem na koniec - czyli wyświetlanie nowych postów ...
Jak miała by wyglądać ta tabela w mysql'u?



ja robię tak:

  1. <?php
  2.  
  3.    $z44 = &#092;"SELECT * FROM user_list\";
  4.    $w44 = mysql_query($z44);
  5.  
  6.    while($t44 = mysql_fetch_array($w44)){
  7.  
  8.     $z03 =  &#092;"SELECT * FROM new_post WHERE id_usera='\".$t44['id'].\"' AND id_topicu='\".$_POST['id_topic'].\"' \";
  9.     $w03 = mysql_query($z03);
  10.     $new_id = mysql_num_rows($w03);
  11.  
  12.     echo (&#092;"\".$new_id.\" | id=\".$t44['id'].\" | id_topic=\".$_POST['id_topic'].\"<br>\");
  13.  
  14.     if(($t44['id'] != $_SESSION['id']) && ($new_id == 0)){
  15.     $z_new_post =&#092;"INSERT INTO new_post SET id_usera='\".$t44['id'].\"', id_topicu='\".$_POST['id_topic'].\"' \";
  16.     $w_new_post = mysql_query($z_new_post);
  17.     }
  18.  
  19.    }
  20.  
  21. ?>


Ale zastanawiam się nad robienie na odwrót, ponieważ teraz jak ktoś przeczyta post'a to usunie się z bazy zapis, że ktoś go czytał. Jednak mniej miejsca chyba zajmie jak będe zapisywał to że ktoś przeczytał.

ale z drugiej strony jak zrobie opcje "odznacz wszystkie jako przeczytane" to będę musiał zapisać wszystkie topici, a wygodniej było by je usunąć...


***

Mam kolejny pomysł co to post_tracker'a . Mianowicie można dodać do tabeli z topicami (u mnie forum_topic) pole ost_data_odp oraz czek_new_post i porównać ost_data_odp z aktualną datą jeśli jest np. różnica większa niż 2 tygodnie wtedy ustawić w czek_new_post jako przeczytane (np. value=1) i wtedy opróżnić tabele post_tracker (u mnie new_post) a jak pojawi się wypowiedź nowsza wtedy uaktualnić tabele post_tracker.


--------------------
Codziennie pojawiają się nowe pytania...
cms: underpoznan ...-> llllllllllllllllll 70%
forum: underpoznan ->
Go to the top of the page
+Quote Post
scanner
post 4.10.2004, 06:18:39
Post #42





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




1. Przy każdym wyświetleniu strony dodajesz do pewnej tablicy ID wszystkich nieprzeczytanych postów.
2. Serializujesz tablice w ciastku u odwiedzajacego.
3. Przy wyswietleniu jakiegos watku/posta usuwasz odpowiednie ID z tablicy i nadpisujesz ciastko.
4. "Zaznacz wszystkie jako przeczytane" czysci tablice.

Przy pierwszym wejsciu na stronę user dostanie WSZYSTKIE istniejace posty na stronie, co sie zgadza, bo nic jeszcze nie przeczytał.

Nice&Softly.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
KRCreater
post 4.10.2004, 19:39:04
Post #43





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.01.2004
Skąd: Poznań

Ostrzeżenie: (10%)
X----


tylko cholera tak jak ktoś powiedział w tym topicu, że tabela new_post będzie zawierała iloczyn topiców i userów ;/ a to będzie dużo zajmowało...szkoda sadsmiley02.gif

Jeszcze mam jeden pomysł , aby nowe posty to były tylko ostatnie 20 ich...bo po co ma być zaśmiecana baza wszystkimi. A oczywiście 20 z każdego działu

Ten post edytował KRCreater 4.10.2004, 19:59:24


--------------------
Codziennie pojawiają się nowe pytania...
cms: underpoznan ...-> llllllllllllllllll 70%
forum: underpoznan ->
Go to the top of the page
+Quote Post
yavaho
post 4.10.2004, 23:00:58
Post #44





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


Cytat(KRCreater @ 2004-10-04 20:39:04)
Jeszcze mam jeden pomysł , aby nowe posty to były tylko ostatnie 20 ich...bo po co ma być zaśmiecana baza wszystkimi. A oczywiście 20 z każdego działu

Masz na mysli posty? czy topiki?
Ja myslalem zrobic tabele w ktorej powiaze tylko userow z danymi topicami (zadnych informacji o postach bym nie zapisywal - za duzo by tego bylo!).
I wtedy jezeli w bazie danych zapiszesz date odwiedzenia danego topicu to przy ponownym wejsciu usera na strone bedzie wiadome ktore posty nie przeczytal w danym topicu - te z pozniejsza data.
Zakladajac oczywiscie ze gdy user otwiera dany topic, to w tym momencie wszystkie posty ktore tam sa beda oznaczone jako przeczytane.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
Denver
post 5.10.2004, 06:27:18
Post #45





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Giżycko / Wrocław

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


http://gizycko.one.pl/ - moje forum.

Pisałem je długo, w sumie (z długimi przerwami) będzie już ponad rok. Po drodze pojawiało się mnóstwo problemów, ale dzięki nim lepiej poznałem php i MySQL. Pozdrawiam i życzę pomyślności w dobrnięciu do celu smile.gif


--------------------
Go to the top of the page
+Quote Post
scanner
post 5.10.2004, 06:37:55
Post #46





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Cytat(KRCreater @ 2004-10-04 20:39:04)
tylko cholera tak jak ktoś powiedział w tym topicu, że tabela new_post będzie zawierała iloczyn topiców i userów ;/ a to będzie dużo zajmowało...szkoda sadsmiley02.gif

Jeszcze mam jeden pomysł , aby nowe posty to były tylko ostatnie 20 ich...bo po co ma być zaśmiecana baza wszystkimi. A oczywiście 20 z każdego działu

A kto mówi o iloczynie "user * nowe_posty" ?
Czy trzeba dac gotowca, żeby wyjaśnić prosty algorytm?

  1. <?php
  2. // Zaczynamy !!!
  3. // User oczywiscie jest zalogowany
  4.  
  5. $aNewPosts = readNew(); // Odczytuje ID wszystkich postó dodanych PO ostatniej wizycie usera
  6.  
  7. {
  8. $aUnreaded = array_merge( array_values( $_COOKIE['Unreaded'] ), array_values( $aNewPosts ) );
  9. }
  10.  
  11. // I teraz mamy listę wszystkich postów których user nie przeczytał.
  12. // Wyświetlając jakiś wątek po prostu usuwamy odpowiednie wartości z tabeli
  13. // bo przecież mamy ID kazdefo wyświetlanego posta
  14.  
  15. // \"Zaznacz wszystkie / bieżące forum jako przeczytane\" to też usunięcie
  16. // całej tablicy lub odpowiednich wartości.
  17.  
  18. /**
  19. * Uwaga !
  20. */
  21. setcookie( 'Unreaded', $aUnreaded, ... );
  22. /**
  23. * To wywołujemy PO wyświetleniu wszystkich postów
  24. * Co dla osoby uzywającej szablomów lub funckji serii ob_*();
  25. * NIe powinno byc problemem
  26. */
  27. ?>


Jednym słowem:
1. Czytamy cookie usera
2. Modyfikujemy tablice dodajac i czyszcząc odpowiednie wartości
3. Wyświetlamy stronę dodatkowo modyfikując tabelę
4. Zapisujemy cookie
5. TheEnd

Ja widac na załączonym obrazku, każdy user ma właśna tablicę.
Aby zapewnic "pezenościopść usera, możemy jego $_COOKIE['Unreaded'] serializować w bazie w tabeli zaraz przy jego profilu i jesli nie ma ciastka, to patrzeć, czy taka serializacja jest. Jeśłi nie ma ani tego, ani tego, to mamy po porostu nowego usera.

Jeśli okaże się, że ilość danych w ciastku przekroczy magioczne 4 kilobajty, $Unreaded zapisujemy tylko w bazie.

Jeszcze jakieś pytania?


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
KRCreater
post 5.10.2004, 14:06:44
Post #47





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.01.2004
Skąd: Poznań

Ostrzeżenie: (10%)
X----


A jeśli ktoś ma wyłączone ciastka ? Na ciastkach mógł bym to zrobić ale ja zrobiłem post_tracer'a , który będzie sporo zajmował ale za przyjemność trzeba płacić.


--------------------
Codziennie pojawiają się nowe pytania...
cms: underpoznan ...-> llllllllllllllllll 70%
forum: underpoznan ->
Go to the top of the page
+Quote Post
scanner
post 5.10.2004, 15:47:52
Post #48





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




No pozostajesz przy samej bazie. Ale nie zaznaczasz tego co kto przeczytal, tylko czego nie przeczytał według tego, co powiedziałem wyżej.

Każdy user ma pole TEXT przy swoim profilu, gdzie pchasz zserializowana tablicę ID nieprzeczytanych.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
misterLu
post 5.10.2004, 17:50:45
Post #49





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.08.2004

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


Problem można rozwiąząc beż użycia cookies, bez tabel z przeczytanymi/nieprzeczytanymi postami.

Wystarczy w tabeli z użytkownikami dodać 1 kolumnę: data_ostatniego_logowania (najlepiej timestamp) i przy każdym poście/temacie dodać (o ile nie ma)kolumnę data_dodania. i w tej chwili wszystko już mamy, nie potrzeba nam żadnych COOKIES, dodatkowych tablic, ani nic.

Aby uzyskać nieprzeczytane posty wystarczy wybrać z bazy te, które mają świeższą datę od daty ostatniego_logowania usera wchodzącego na stronę.
Go to the top of the page
+Quote Post
yavaho
post 5.10.2004, 18:18:59
Post #50





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


Data ostatniego logowania nie gwarantuje ze uzytkownik wogule coś czytał, a zawlaszcza ze przeczytal wszystkie posty - bo chyba tylko tak by to dzialalo.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
misterLu
post 5.10.2004, 18:38:18
Post #51





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.08.2004

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


racja! ja proponowałem rozwązanie "Zobacz posty od ostatniej wizyty". Tak to jest rozwiązane w phpBB
Go to the top of the page
+Quote Post
scanner
post 5.10.2004, 20:47:05
Post #52





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




I jest to bardzo ułomne.
Moje rozwiązanie stwarza pewna nadmiarowość danych jednak zapewnie w 100%, że jeśli użytkownik czegoś nie cztał, to zawsze to będzie miał oznaczone jako nieczytane, chyba, ze świadomą akcją spodowuje "odznaczenie".


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
Vengeance
post 5.10.2004, 21:35:44
Post #53





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Cytat(misterLu @ 2004-10-05 18:50:45)
Problem można rozwiąząc beż użycia cookies, bez tabel z przeczytanymi/nieprzeczytanymi postami.

Wystarczy w tabeli z użytkownikami dodać 1 kolumnę: data_ostatniego_logowania (najlepiej timestamp) i przy każdym poście/temacie dodać (o ile nie ma)kolumnę data_dodania. i w tej chwili wszystko już mamy, nie potrzeba nam żadnych COOKIES, dodatkowych tablic, ani nic.

Aby uzyskać nieprzeczytane posty wystarczy wybrać z bazy te, które mają świeższą datę od daty ostatniego_logowania usera wchodzącego na stronę.

pisząc swoje forum tak to na początku rozwiązałem.

minusy:
Gdy user sam napisze posta, pokazuje mu ze go nie czytal.
W zaleznosci od tego kiedy ustawiasz date osattniego logowania
moga wyniknac rozne anomalie ;]


--------------------
Go to the top of the page
+Quote Post
KRCreater
post 6.10.2004, 01:08:36
Post #54





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.01.2004
Skąd: Poznań

Ostrzeżenie: (10%)
X----


Moje forum mieści się w jednym pliku index.php to dobrze czy źle (nic nie includuje poza konfiguracją)

Czy stało by się bardziej wydajne jeśli podzielił bym skrypt na części np. ODPOWIEDZ / NOWY TEMAT / USUN POST / ZAMKNIJ POST cte. questionmark.gif?\

***

Forum skończyłem smile.gif)))))))))
Teraz je upiększam :]
Jak skończę moją stronę to wam pokażę moje dzieło smile.gif
Ale odpowiedzcie mi na pytanie powyżej winksmiley.jpg

Pozdrawiam

***

aktualnie pracuję nad tym:

Cytat
Jeszcze mam jeden pomysł , aby nowe topic'i to były tylko ostatnie 20 ich...bo po co ma być zaśmiecana baza wszystkimi. A oczywiście 20 albo 10 z każdego działu. Jeszcze nie wiem ile wybrać tongue.gif


Ten post edytował KRCreater 6.10.2004, 01:42:03


--------------------
Codziennie pojawiają się nowe pytania...
cms: underpoznan ...-> llllllllllllllllll 70%
forum: underpoznan ->
Go to the top of the page
+Quote Post
scanner
post 6.10.2004, 06:25:32
Post #55





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Napisałeś forum dyskusyjne na jednym pliku?
To ja powiem tak:

Cholernie źle.
- Polecam za pół roku wprowadzić do niego modyfikację.
- nie masz skór
- nie masz wersji językowych
- masz bałagan.

Czy kod będzie do wglądu?


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
KRCreater
post 7.10.2004, 23:35:34
Post #56





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.01.2004
Skąd: Poznań

Ostrzeżenie: (10%)
X----


Nie potrzebuje wersji językowych, a skórę dostosowałem do mojej strony.
Tylko dopracuje forum i pokaże wam skrypt.

***
Oto jak rozwiązałem funkcję która będzie mi pokazywać tylko 10 nowych wiadomości, a resztę wpisów usunię z bazy (może to zagmatwane, ale kod wszystko wyjaśni):
  1. <?php
  2.  
  3. $z= &#092;"SELECT * FROM forum_dzialy\";
  4. $w= mysql_query($z);
  5. while($t = mysql_fetch_array($w)){
  6.  
  7.  
  8.  
  9.   $z1 = &#092;"SELECT * FROM forum_topic WHERE id_dzialu='\".$t['id'].\"' ORDER BY id_ost_odp DESC\";
  10.   $w1 = mysql_query($z1);
  11.   while($t1 = mysql_fetch_array($w1)){
  12.  
  13.     if($i > 9){
  14.  
  15.     $z2 = &#092;"DELETE FROM new_post WHERE id_topicu='\".$t1['id'].\"' \";
  16.     $w2 = mysql_query($z2);
  17.  
  18.     }
  19.     $i++;
  20.  
  21.   }
  22.  
  23. }
  24.  
  25. ?>


Działa elegancko!!!

Ten post edytował KRCreater 8.10.2004, 23:52:36


--------------------
Codziennie pojawiają się nowe pytania...
cms: underpoznan ...-> llllllllllllllllll 70%
forum: underpoznan ->
Go to the top of the page
+Quote Post

3 Stron V  < 1 2 3
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: 15.08.2025 - 03:36