Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php/mysql] "Skrzynka wiadomości" + Znajomi
b4x
post
Post #1





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Witam, teraz mam problem... ponieważ nie wiem od czego zacząć.

Chcę napisać moduł do wysyłania/odbierania/kasowania wiadomości + dodawanie znajomych :-)

Tak naprawdę niewiem, jak zacząć, jakie funkcje wykorzystać.

Mógłby ktoś mnie naprowadzić na dobrą drogę ? ;-)

Lub jakiś przykład podać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
b_chmura
post
Post #2





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Wiadomości:


Tworzysz przykładową tabele "wiadomosci" o przykładowej strukturze

Kod
+--+-------+-------+----+-----+---------+----+
|id|od_kogo|do_kogo|stan|temat|wiadomosc|time|
+--+-------+-------+----+-----+---------+----+


id - numer identyfikacyjny wiadomości
od_kogo - login nadawcy
do_kogo - login odbiorcy
stan - stan wiadomości (1 - nowa, 2 - przeczytana, 3 - kosz)
temat - temat wiadomości
wiadomosc - treść wiadomości
time - czas nadania wiadomości

i teraz tylko odpowiednio:
1. wyświetlasz rekordy
2. edytujesz rekordy
3. dodajesz rekordy

Przykłady
1. Wyświetlamy wiadomości użytkownika "bchmura"
  1. SELECT * FROM `wiadomosci` WHERE `do_kogo` = 'bchmura'


2. Edycja - zmiana statusu wiadomości o id "4" na przeczytaną
  1. UPDATE `wiadomosci` SET `stan` = '2' WHERE `do_kogo` = 'bchmura' AND `id` = 4


3. Dodajemy wiadomość od użytkownika "bchmura" do użytkownika "ksiadz_pistolet"
  1. INSERT INTO `wiadomosci` VALUES ('id', 'bchmura', 'ksiadz_pistolet', '1', 'Małe pytanie', 'Witam, skoro martwi sie nie żywią... czemu żywi sie martwią?', '3569894562')


Znajomi

Tworzysz przykładową tabele "znajomi" o przykładowej strukturze

Kod
+--+----+--------------+-----+
|id|kogo|kto1;kto2;kto3|kiedy|
+--+----+--------------+-----+


id - numer identyfikacyjny listy znajomych
kogo - login użytkownika
kto - loginy użytkowników (znajomych) oddzielonych średnikami
kiedy - czas zawzięcia wiadomości

tutaj omówię tylko kolumnę "kto" - po prostu żeby sobie nie utrudniać zamiast tworzyć nową tabele w jednej kolumnie tworzymy tablice, będziesz na niej działać podobnie jak na plikach




pokrótce opisałem jak można w prosty sposób się z tym uwikłać, jeśli interesuje Cię bardziej zaawansowane rozwiązanie dla większego serwisu
napisz i poczekaj aż ktoś coś odpowie bądź ja złapie wenę i czas na szczegółowe rozpatrzenie


pozdrawiam
Chmura Bartłomiej

Ten post edytował b_chmura 24.01.2008, 21:57:32
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Cytat(b_chmura @ 24.01.2008, 21:56:56 ) *
Wiadomości:


Tworzysz przykładową tabele "wiadomosci" o przykładowej strukturze

Kod
+--+-------+-------+----+-----+---------+----+
|id|od_kogo|do_kogo|stan|temat|wiadomosc|time|
+--+-------+-------+----+-----+---------+----+


Lepiej mieć ID adresata, oraz nadawcy, a nie jego nazwę.

Cytat(b_chmura @ 24.01.2008, 21:56:56 ) *
Znajomi

Tworzysz przykładową tabele "znajomi" o przykładowej strukturze

Kod
+--+----+--------------+-----+
|id|kogo|kto1;kto2;kto3|kiedy|
+--+----+--------------+-----+


Tu podobnie, nie loginy oddzielone przecinkiem, tylko ID i powielone rekordy tylko z różnymi ID znajomych.
Go to the top of the page
+Quote Post
b_chmura
post
Post #4





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


w tym wypadku login jest równie unikalny jak id także różnicy większej nie ma (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
webdice
post
Post #5


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Nie chodzi o to że login jest unikalny, chodzi o to że np przy zmianie loginu, trzeba zmieniać wszystkie rekordy z danym użytkownikiem.
Go to the top of the page
+Quote Post
b_chmura
post
Post #6





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


z początku pomyślałem sobie "a kto k*** zmienia login?"
ale doszedłem do wniosku ze ewentualnie jeśli konto zostanie usunięte i inny użytkownik stworzy nowe konto o takim samym loginie będzie automatycznie autorem wiadomości i znajomym, a to jest błąd

pozamieniaj to na id :D
Go to the top of the page
+Quote Post
webdice
post
Post #7


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




W zasadzie po usunięciu konta powinno się usunąć wiadomości, z tym że zazwyczaj trzymamy w sesji Id użytkownika a nie jego login i operujemy na ID. J?eśli ktoś woli trzymać login niech trzyma, tylko baza się rozrasta niepotrzebnie.
Go to the top of the page
+Quote Post
b4x
post
Post #8





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Dzięki za podpowiedzi ;-)
Mam nadzieję że dam radę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
pijanyadmin
post
Post #9





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 24.10.2007

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


b_chmura - emm całkiem nieźle to obrazuje, mógłbyś pisać dalej coś na ten temat? Przyda się napewno nie jednej osobie
Go to the top of the page
+Quote Post
bim2
post
Post #10





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


@up
Napisz w dziale ofert, może ktoś zrobi ci to za free
Nie licz na gotowce tylko sam zabierz sie do pracy...

Lepiej trzymać id, zawsze to łatwiej przy zmianie czegoś w systemie, albo zmianie nicków. Kto zmienia nicki? A np. na stronie gtathegame.net zbierasz sobie punkciki i mozesz za kilkadziesiat punktow sobie zmienic (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Taka zabawa :]
Go to the top of the page
+Quote Post
colinQ
post
Post #11





Grupa: Zarejestrowani
Postów: 340
Pomógł: 2
Dołączył: 25.12.2006

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


Kolega b_chmura bardzo fajnie to przedstawił. Wszystko opiera się na rokordach bazy MySQL.
Funkcje to głównie mysql_query, mysql_num_rows, mysql_fetch_assoc(array) + pętle.

id zrób przez automatyczne generowanie kolejnych liczb

  1. CREATE TABLE `wiadomosci` (
  2. id int UNSIGNED NOT NULL AUTO_INCREMENT primary_key,
  3. [...]);


Ja w mojej grze zrobiłem usuwanie wszystkiego co związane z loginem po usunięciu konta...

Chyba że nie będziesz robił na stronie opcji Usuń Konto, to wtedy masz 2 razy więcej roboty (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
b4x
post
Post #12





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


z wiadomościami problemu nie miałem, czy ktoś mógłby mnie "rozjaśnić" co do tych znajomych, np. przyklad zapytania do sql
Go to the top of the page
+Quote Post
b_chmura
post
Post #13





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Edytujemy trochę poprzednią bazę
Kod
+--+-------+------------------------------------+
|id|id_kogo|ktoANDdata                          |
+--+-------+------------------------------------+
|id|id_kogo|kto1 kiedy1;kto2 kiedy2;kto3 kiedy3;|
+--+-------+------------------------------------+


Wyświetlamy znajomych bchmura (3)
  1. <?php
  2. $query1  = mysql_query("SELECT * FROM `znajomi` WHERE `id_kogo` = 3 LIMIT 0,1");
  3. $query2  = mysql_query("SELECT * FROM `usere` WHERE `id` = 3 LIMIT 0,1"); //tym zapytaniem wyciągiemy imię 
  4.  
  5. $dane1 = mysql_fetch_array($query1);
  6. $dane2 = mysql_fetch_array($query2);
  7.  
  8. $friends = explode(';', $dane1['ktoANDdata']); //rozdzielamy dane o znajomych (nazwa i data)
  9.  
  10. echo 'Lista znajomych '.$dane2['imie'].'.';
  11.  
  12. foreach($friends as $friends)
  13. {
  14. $dane = explode(' ', $friends); //rozdzielamy nazwe od daty
  15.  
  16. echo '<li>Imie: '.$dane[0].' Dodany: '.$dane[1].'</li>'; //wyświetlamy
  17. }
  18. ?>


Chcąc dodać znajomego
  1. <?php
  2. $NEWfriends = 'ksiadz_pistolet';
  3. $query1  = mysql_query("SELECT * FROM `znajomi` WHERE `id_kogo` = 3 LIMIT 0,1");
  4. $dane1 = mysql_fetch_array($query1);
  5. $friends = explode(';', $dane1['ktoANDdata']);
  6. array_push($firends, $NEWfriends.' '.time());
  7.  
  8. foreach($friends as $friends)
  9. {
  10. $NEWfriends .= $friends.';';
  11. }
  12.  
  13. mysql_query("UPDATE `znajomi` SET `ktoANDdata` = '".$NEWfriends."' WHERE `id` = 3");
  14. ?>


Coś w ten deseń.
Go to the top of the page
+Quote Post
b4x
post
Post #14





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Dzięki wielkie, otuż mam jeszcze z tym 2 problemy.

Więc tak jak dodaje do sqla to wygląda to tak (1rekord) [chodzi mi o to że przed dodaje 50] (50 to login znajomego)

50;50_28/01/2008

  1. <?php
  2. $NEWfriends = $_GET['id'];
  3. $query1  = mysql_query("SELECT * FROM `znajomi` WHERE `id_kogo` = ".$_SESSION['id']." LIMIT 0, 1");
  4. $dane1 = mysql_fetch_array($query1);
  5. $friends = explode(';', $dane1['ktoANDdata']);
  6. $data=date("d/m/Y");
  7. array_push($friends, $NEWfriends.'_'.$data);
  8.  
  9. foreach($friends as $friends)
  10. {
  11. $NEWfriends .= $friends.';';
  12. }
  13.  
  14. mysql_query("UPDATE `znajomi` SET `ktoANDdata` = '".$NEWfriends."' WHERE `id_kogo` = ".$_SESSION['id']."");
  15. ?>



I jeszcze chciałbym dodać do tego "status" znajomego tzn. czy zaakceptowany, czy nie (1= zaakceptowany, 2= nie zaakceptowany)

Ten post edytował b4x 28.01.2008, 14:28:57
Go to the top of the page
+Quote Post
pijanyadmin
post
Post #15





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 24.10.2007

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


a ja mam pytanie odnośnie wiadomośći, jak je kasować? Coś w stylu linku "usuń" przy każdej wyświetlonej wiadomośći
Go to the top of the page
+Quote Post
b4x
post
Post #16





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


@up

  1. <?php
  2. $zapytanie = "DELETE FROM `wiadomosci` WHERE `id` = ".$_GET['id']." LIMIT 1";
  3. mysql_query ($zapytanie); 
  4. echo 'Wiadomość skasowana';
  5. ?>


Ten post edytował b4x 28.01.2008, 15:03:19
Go to the top of the page
+Quote Post
b_chmura
post
Post #17





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


tutaj by nie gmatwać Ci już z tablicami proponowałbym zrobić dodatkową tabele "poczekalnia" której chyba nie muszę opisywać...

Edit:
ale ze mnie gapa.
Musisz zmienić nazwę zmiennej "$NEWfriends" w pętli foreach i zapytaniu.
Go to the top of the page
+Quote Post
pijanyadmin
post
Post #18





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 24.10.2007

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


a jak odczytać wiadomość w innym switchu ?

zmiana "od_kogo" na link do switcha

  1. <?php
  2. echo '<a href="panel.php?id1=poczta&tresc=test&id='.$wiersz[od_kogo].'&id='.$wiersz[id].'">'.$wiersz[od_kogo].'</a>';
  3. ?>


problem mam z zapytaniem:

  1. <?php
  2. $zapytanie = "SELECT * FROM `wiadomosci` WHERE `od_kogo` = ".$_GET['id']." LIMIT 1";
  3. mysql_query ($zapytanie); 
  4. echo '<br /> wiadomosc: '.$wiersz[wiadomosc].'';
  5. ?>


jak powinno wygladać poprawne aby wyświetlić wiadomość po kliknieciu na link?
Go to the top of the page
+Quote Post
b_chmura
post
Post #19





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


  1. <?php
  2. $q = mysql_fetch_array(mysql_query("SELECT * FROM `wiadomosci` WHERE `od_kogo` = ".$_GET['id']." LIMIT 0,1"));
  3. echo $q[wiadomosc];
  4. ?>
Go to the top of the page
+Quote Post
pijanyadmin
post
Post #20





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 24.10.2007

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


emm nic nie jest wyświetlane w tym przypadku
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 15.09.2025 - 00:36