![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Mam zrobiona pocztę, która opreuje na tabeli `poczta` w bazie i tam zapisywane są wszystkie wiadomosci. Struktura bazy wygląd nastepująco:
Kod CREATE TABLE `poczta` ( `id` int(11) NOT NULL auto_increment, `nadawca` varchar(50) NOT NULL, `odbiorca` varchar(50) NOT NULL, `data` varchar(55) NOT NULL, `tytul` varchar(55) NOT NULL, `tresc` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=86; I teraz jak zrobić, że gdy dojdzie nowa wiadomość do usera tego ktory jest zalogowany to pokazywlo sie jakies powiadomienie, że jest nowa wiadomośc (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Sposobów jest kilka.
1. Przy każdym odświeżeniu strony, trzeba sprawdzić, czy są jakieś nowe wiadomości dla danego użytkownika. 2. Jeśli użytkownik znajduje się na jakiejś stronie dłuższy czas, w tle może działać ajax, który co kilka minut sprawdzi, czy są jakieś nowe wiadomości. 3. W cronie chodzi skrypt, który sprawdza, czy są nowe wiadomości i wysyła maila z informacją, że pojawiała się nowa wiadomość. |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dodaj kolumnę, która będzie obrazowała to czy wiadomość została przeczytana. Kolumna powinna przyjmować wartości 0 (nieprzeczytana) oraz 1 (przeczytana). Aby wyświetlić powiadomienie o nowej wiadomości pobierasz dane (np. liczbę rekordów), dla których wartość tej kolumny to 0. Przy odczytywaniu wiadomości wykonujesz update ustawiający wartość kolumny na 1. Tyle.
batman: Odnośnie punktu nr 3 to wydaje mi się, że lepiej wysyłać takowego maila w momencie "wysyłania" wiadomości przez jednego użytkownika do drugiego. Po co babrać się do tego z cronem? Ten post edytował phpion 17.02.2009, 10:10:29 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Phpion dzieki za podpowiedz zaraz zobaczę.
A takie pytanka: 1. Wartosc domyslną w bazie mam ustawić jako 0 (nieprzeczytana) czy przy wysylaniu lepiej? 2. i ta wartosc zmieniała by sie na 1 czyli przeczytana po otwarciu tego maila przez strone czytaj.php ? |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
1. Wartosc domyslną w bazie mam ustawić jako 0 (nieprzeczytana) czy przy wysylaniu lepiej? Tak, wartość domyślną daj na 0. No chyba że chcesz aby zaraz po wysłaniu wiadomość została oznaczona jako przeczytana (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) hehe. 2. i ta wartosc zmieniała by sie na 1 czyli przeczytana po otwarciu tego maila przez strone czytaj.php ? Tak, w momencie gdy użytkownik czyta wiadomość (wyświetla ją na ekranie) dokonujesz aktualizacji statusu przeczytana/nieprzeczytana. |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
batman: Odnośnie punktu nr 3 to wydaje mi się, że lepiej wysyłać takowego maila w momencie "wysyłania" wiadomości przez jednego użytkownika do drugiego. Po co babrać się do tego z cronem? Po to, by nie zarzynać strony serwisu, by wykonać wszystkie niezbędne operacje. Poza tym należy pamiętać o ustawieniach powiadomień, np wysyłanie maila raz dziennie ze zbiorczym raportem, lub wysyłanie maila z każdą nową wiadomością. Mimo, że w chwili obecnej może się to nie przydać, w przyszłości będzie znacznie prościej rozbudować serwis. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ok dzięki.
Potem jak bedzie to robie "SELECT poczta WHERE username=zalogowanemu AND status=1(przeczytana) I zwykly if ? Tylko jak to zapisac tego ifa z SELECTem ? Czy bedzie to tak wygladac ?
Ten post edytował stefik4 17.02.2009, 10:23:55 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
batman:
Tylko w takim przypadku potrzebujemy jeszcze jednego pola w tabeli, które by informowało o tym czy powiadomienie mailem zostało już wysłane czy nie (żeby nie wysyłać X razy tego samego powiadomienia). stefik4: Nie rozumiem. Jaki if? |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
batman: Tylko w takim przypadku potrzebujemy jeszcze jednego pola w tabeli, które by informowało o tym czy powiadomienie mailem zostało już wysłane czy nie (żeby nie wysyłać X razy tego samego powiadomienia). Tak, tego samego, które podałeś w jednym z poprzednich postów. To pole i tak musi się znaleźć w tabeli. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dwa posty wyżej napisałem taki szybki przykład. Tak to może wyglądąc w najprostszej postaci ?
Kurde nie moge sobie z tym poradzić;/ Plik wyswietlania wiadomosci:
Funkcje do pisania wiadomosci:
Ten post edytował stefik4 17.02.2009, 10:30:54 |
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
batman:
No nie do końca bo co jeśli ktoś nie odbierze wiadomości w ciągu X dni? Wówczas otrzyma X razy to samo powiadomienie (przy założeniu, że wysyłka powiadomień odpalana jest raz na dobę). stefik4: Rozumiem, że nadal problemem jest wyświetlenie (lub nie) komunikatu o tym, czy użytkownik ma nową wiadomość. Jeśli tak to użyj czegoś takiego:
Nie sprawdzałem ale powinno działać. Pamiętaj tylko o odpowiednim zabezpieczeniu zmiennej $odbiorca (mysql_real_escape_string" title="Zobacz w manualu PHP" target="_manual). Ponadto powinieneś w tym polu trzymać ID użytkownika odwołujące się do tabeli z użytkownikami, a nie jego login. PS: stefik4 - nie pomagam przez PW. Ten post edytował phpion 17.02.2009, 10:41:37 |
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
batman: No nie do końca bo co jeśli ktoś nie odbierze wiadomości w ciągu X dni? Wówczas otrzyma X razy to samo powiadomienie (przy założeniu, że wysyłka powiadomień odpalana jest raz na dobę). Nie otrzyma wielu powiadomień, tylko jedno. Jednak należałoby dodać nową kolumnę, która określałaby status wysłania powiadomienia o wiadomości. Jeśli wiadomość nie została jeszcze przeczytana oraz nie wysłano powiadomienia, wówczas skrypt w cronie, wysyłałby maila z informacją o nowej wiadomości i zmieniałby status nowej kolumny, na wysłano. |
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Jednak należałoby dodać nową kolumnę, która określałaby status wysłania powiadomienia o wiadomości. Właśnie o tym "mówię" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Możnaby wręcz utworzyć osobną tabelę, w której byłaby przechowywana historia wysłanych powiadomień (ID wiadomości oraz data wysłania). Jednak wówczas zapytanie wybierające rekrody, do których należy wysłać powiadomienie troszkę by się skomplikowało (NOT EXISTS). |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
PHPion problem mam bardziej w zmianie statusu po wyslaniu od nadawcy i przy zmianie statusu przy odczyatniu wiaodmosci.
Edit: Ze zmiana po wysalniu już sobie poradziłem, ale kod który napisałeś chyba nie działa bo w bazie sprawdzalem i ta wiadomosc wyslana do mnie ma wartość 1 czyli nie przeczytana a nie pisze nic ze masz nowa widomosc ;/ Zrobiłem wszystko, ładnie pieknie, ale... napis ze jes nowa wiadomosc pokazuje się ciągle, mim, że w bazie mamwszytkie odznaczone jako przeczytane ;/ użyłem takiego kodu:
Dopiero jak usune wiadomośc za pomoca buttonu w poczcie to znika wykrzyknik ;/ jak to zrobić, żeby nawet jak ta wiadomośc będzie istniec i bedzie przeczytana to wykrzyknik o nowej znikał! Ten post edytował stefik4 17.02.2009, 11:36:55 |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
To mi wyświetla:
Kod string(1) "1" Ponadto skrypt działa odwrotnie! Jak wiadomosci sa przeczytane to wyswietla sie wykrzyknik a jak jets jakas nie przeczytana to nie ;/ |
|
|
![]()
Post
#17
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
To mi wyświetla: Kod string(1) "1" Czyli masz 1 wiadomość o statusie 0. Ponadto skrypt działa odwrotnie! Jak wiadomosci sa przeczytane to wyswietla sie wykrzyknik a jak jets jakas nie przeczytana to nie ;/ To może zamieniłeś wartości? 0 = przeczytana, 1 = nieprzeczytana? Nie wiem, kombinuj. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 1 Dołączył: 18.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
0 - przeczytana
1 - nieprzeczytana. Ok dzieku juz sobie poradziłem. Wklejam gotowy kod pokazywania ;]
Ten post edytował stefik4 17.02.2009, 13:37:25 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.09.2025 - 16:47 |