Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] "Skrzynka wiadomości" + Znajomi
Forum PHP.pl > Forum > Przedszkole
b4x
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ć winksmiley.jpg
b_chmura
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
webdice
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.
b_chmura
w tym wypadku login jest równie unikalny jak id także różnicy większej nie ma smile.gif
webdice
Nie chodzi o to że login jest unikalny, chodzi o to że np przy zmianie loginu, trzeba zmieniać wszystkie rekordy z danym użytkownikiem.
b_chmura
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
webdice
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.
b4x
Dzięki za podpowiedzi ;-)
Mam nadzieję że dam radę winksmiley.jpg
pijanyadmin
b_chmura - emm całkiem nieźle to obrazuje, mógłbyś pisać dalej coś na ten temat? Przyda się napewno nie jednej osobie
bim2
@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 tongue.gif Taka zabawa :]
colinQ
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 tongue.gif
b4x
z wiadomościami problemu nie miałem, czy ktoś mógłby mnie "rozjaśnić" co do tych znajomych, np. przyklad zapytania do sql
b_chmura
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ń.
b4x
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)
pijanyadmin
a ja mam pytanie odnośnie wiadomośći, jak je kasować? Coś w stylu linku "usuń" przy każdej wyświetlonej wiadomośći
b4x
@up

  1. <?php
  2. $zapytanie = "DELETE FROM `wiadomosci` WHERE `id` = ".$_GET['id']." LIMIT 1";
  3. mysql_query ($zapytanie); 
  4. echo 'Wiadomość skasowana';
  5. ?>
b_chmura
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.
pijanyadmin
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?
b_chmura
  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. ?>
pijanyadmin
emm nic nie jest wyświetlane w tym przypadku
b_chmura
  1. <?php
  2. $id  = $_GET['id']; 
  3. $q = mysql_query("SELECT * FROM `wiadomosci` WHERE `od_kogo` = ".$id." LIMIT 0,1");
  4. $dane = mysql_fetch_array($q);
  5. echo $dane['wiadomosc'];
  6. //musi byc
  7. ?>
pijanyadmin
heh nadal coś mi nie wychodzi z tymi znajomymi:

  1. CREATE TABLE IF NOT EXISTS `znajomi` (
  2. `id` INT NOT NULL AUTO_INCREMENT ,
  3. `id_kogo` INT NOT NULL,
  4. `ktokiedy` LONGTEXT NOT NULL ,
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;


  1. <?php
  2. require("connect.php");
  3.  
  4. $NEWfriends = 'jakistamnick';
  5. $query1  = mysql_query("SELECT * FROM `znajomi` WHERE `id_kogo` = 'azpr' ");
  6. $dane1 = mysql_fetch_array($query1);
  7. $friends = explode(';', $dane1['ktokogo']);
  8. $time=date("dmY");
  9. array_push($friends, $NEWfriends.'_'.$time);
  10.  
  11. foreach($friends as $friends)
  12. {
  13. $NEWfriends .= $friends.';';
  14. }
  15.  
  16. mysql_query("UPDATE `znajomi` SET `ktokogo` = '".$NEWfriends."' WHERE `id_kogo` = 'azpr'");
  17.  
  18. echo "dodano poprawnie";
  19. ?>


tylko że nic sie do bazy nie dodaje... lae ja czegoś nie wiem... o0
marcio
  1. <?php
  2. require("connect.php");
  3.  
  4. $NEWfriends = 'jakistamnick';
  5. $query1  = mysql_query('SELECT * FROM znajomi WHERE id_kogo = 'azpr' ');
  6. $dane1 = mysql_fetch_array($query1);
  7. $friends = explode(';', $dane1['ktokogo']);
  8. $time=date("dmY");
  9. array_push($friends, $NEWfriends.'_'.$time);
  10.  
  11. foreach($friends as $friends_r)
  12. $NEWfriends .= $friends_r.';';
  13.  
  14.  $zap = ('UPDATE znajomi SET ktokogo = "'.$NEWfriends.'" WHERE id_kogo = 'azpr'');
  15. $wynik = mysql_query($zap) or die(mysql_error());
  16.  echo($wynik);
  17.  
  18. echo "dodano poprawnie";
  19. ?>

Zobacz czy masz jakis blad i czy zapytanie dobrze wyglada
pijanyadmin
Kod
Parse error: syntax error, unexpected T_STRING in /var/www/znajomi.php on line 7


  1. <?php
  2. $query1  = mysql_query('SELECT * FROM znajomi WHERE id_kogo = 'azpr' ');
  3. ?>
nospor
szanowny adminie, kopiuj z głową... masz o jeden apostrof za duzo na koncu
marcio
EDIT sorki ale zapomnialo mi sie go skasowac zwracam honor ale wlasnie cos bylo podejrzane ze nie dzialalo smile.gif teraz powinno byc good
pijanyadmin
  1. <?php
  2. $NEWfriends = 'jakistamnick';
  3. $query1 = mysql_query("SELECT * FROM znajomi WHERE id_kogo = 'azpr'");
  4. $dane = mysql_fetch_array($query);
  5. $friends = explode(';', $dane['ktokiedy']);
  6. $time=date("dmY");
  7. array_push($friends, $NEWfriends.'_'.$time);
  8.  
  9. foreach($friends as $friends_r)
  10. $NEWfriends .= $friends_r.';';
  11.  
  12.  $zap = ("UPDATE znajomi SET ktokiedy = 'ttt' WHERE id_kogo = 'azpr'");
  13. $wynik = mysql_query($zap) or die(mysql_error());
  14.  echo($wynik);
  15.  
  16. echo "dodano poprawnie";
  17. ?>


heh chyba za długo przy tym siedze :/ i niby "dodano porpawnie" ale baza jak była pusta tak jest
b4x
  1. <?php
  2. $NEWfriends = 'jakistamnick';
  3. $query1 = mysql_query("SELECT * FROM znajomi WHERE id_kogo = 'azpr'");
  4. $dane1 = mysql_fetch_array($query1);
  5. $friends = explode(';', $dane1['ktokiedy']);
  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. $zap = mysql_query("UPDATE `znajomi` SET `ktokiedy` = '".$NEWfriends."' WHERE `id_kogo` = 'azpr'");
  15. $wynik = mysql_query($zap) or die(mysql_error());
  16. echo "dodano poprawnie";
  17. ?>


spróbuj tego
pijanyadmin
Kod
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1


biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.