Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] [MySQL] System znajomych, prosty system znajomych oparty na zwracaniu stringów
MrCoody
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 12
Dołączył: 1.05.2011
Skąd: Kielce

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


Mam do zaprezentowania prosty system znajomych oparty na zwracaniu stringów. Proszę o ocenę kodu.

Zmienne:
$myid - id lub login zalogowanego użytkownika
$friendid - id lub login znajomego

# Jeśli używasz loginów to $myid i $friendid muszą być loginami użytkowników. (z id podobnie)

  1. CREATE TABLE IF NOT EXISTS `mrfriends` (
  2. `inviter` varchar(255) NOT NULL,
  3. `invited` varchar(255) NOT NULL,
  4. `accept` int NOT NULL DEFAULT '0'
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


  1. # MrFriends
  2. # Created by MrCoody
  3.  
  4.  
  5. define("TABLE_friends","mrfriends");
  6. define("TABLE_friends_inviter","inviter");
  7. define("TABLE_friends_invited","invited");
  8. define("TABLE_friends_accept","accept");`
  9.  
  10.  
  11. class MrFriends {
  12. public function seemyfriends($myid) {
  13. $query = @mysql_query("SELECT * FROM ".TABLE_friends." WHERE ".TABLE_friends_inviter." = '$myid' OR ".TABLE_friends_invited." = '$myid'");
  14. $myfriends = null;$num=0;
  15. $haveigotfriends = mysql_num_rows($query);
  16. while($myfriend = mysql_fetch_array($query)) {
  17. $accept = $myfriend[TABLE_friends_accept];
  18.  
  19. if($accept == '1') { $myacceptfriends = $myacceptfriends + 1; }
  20. if($myfriend[TABLE_friends_inviter] == $myid) { $myfriends['accept'] = "2"; }
  21. if($myfriend[TABLE_friends_inviter] == $myid) {
  22. $myfriends[$num+1]["id"] = $myfriend[TABLE_friends_invited];
  23. $myfriends[$num+1]["accept"]="$accept"; }
  24. if($myfriend[TABLE_friends_invited] == $myid) { $myfriends[$num+1]["id"] = $myfriend[TABLE_friends_inviter]; $myfriends[$num+1]["accept"]=$accept;}
  25. $num = $num+1;}
  26. if($myfriends==null) { return 0;}
  27. else {
  28. $myfriends['allfriendsandinvitations'] = $haveigotfriends;
  29. return $myfriends;
  30. }
  31. }
  32.  
  33. public function invitetofriends($myid,$friendid) {
  34. $query = @mysql_query("SELECT * FROM ".TABLE_friends." WHERE ".TABLE_friends_inviter." = $friendid AND ".TABLE_friends_invited." = $myid OR ".TABLE_friends_inviter." = $myid AND ".TABLE_friends_invited." = $friendid");
  35. if(mysql_num_rows($query) == '0') { $arewefriends = 0; }
  36. else { $arewefriends = 1; }
  37. if($arewefriends==0) {
  38. if(mysql_query("INSERT INTO ".TABLE_friends." (".TABLE_friends_inviter.",".TABLE_friends_invited.") VALUES ('$myid','$friendid')")) { return 1; }
  39. else { return 0; }
  40. }
  41. else { return 2; }
  42. }
  43.  
  44. public function accepttheinvite($myid,$friendid) {
  45. if(mysql_query("UPDATE ".TABLE_friends." SET ".TABLE_friends_accept." = 1 WHERE ".TABLE_friends_inviter." = $friendid AND ".TABLE_friends_invited." = $myid")) { return 1; }
  46. else { return 0; }
  47. }
  48.  
  49. public function deletefromfriends($myid,$friendid) {
  50. if(mysql_query("DELETE FROM ".TABLE_friends." WHERE ".TABLE_friends_inviter." = $friendid AND ".TABLE_friends_invited." = $myid OR ".TABLE_friends_inviter." = $myid AND ".TABLE_friends_invited." = $friendid")) { return 1; }
  51. else { return 0; }
  52. }
  53.  
  54. public function invitations($myid) {
  55. $query = @mysql_query("SELECT * FROM ".TABLE_friends." WHERE ".TABLE_friends_invited." = '$myid' AND ".TABLE_friends_accept." = 0");
  56.  
  57. $howmany = mysql_num_rows($query);
  58. if($howmany == "0") { return 0; }
  59. else {
  60. $invitate['howmany']=$howmany;
  61. while($friend = mysql_fetch_array($query)) {
  62. $invitate[] = $friend[TABLE_friends_inviter];
  63. }
  64. return $invitate;
  65. }
  66. }
  67. public function arewefriends($myid,$friendid) {
  68. $query = @mysql_query("SELECT * FROM ".TABLE_friends." WHERE ".TABLE_friends_inviter." = $friendid AND ".TABLE_friends_invited." = $myid OR ".TABLE_friends_inviter." = $myid AND ".TABLE_friends_invited." = $friendid");
  69. if(mysql_num_rows($query) == '0') { return 0; }
  70. else { return 1; }
  71. }
  72. }
  73.  
  74. $MrFriends=new MrFriends();


Jest to całość skryptu. Jeśli macie jakieś pytania, pisać tutaj (IMG:style_emoticons/default/smile.gif)

------------------------------------------------
Jeśli jesteś zainteresowany jego użyciem nie usuwaj informacji o autorze.

Ten post edytował MrCoody 10.07.2013, 16:47:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Damonsson
post
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Skoro piszesz coś, czego będą w domyśle używać też inni, to podejdź do tego na poważnie. Z obiektowością to nie ma za dużo wspólnego, poza nazwą class na początku.

Narzucasz nazwy tabel, jeśli tak chcesz, to w takim razie sprawdzaj czy są, jeśli nie, to twórz je z poziomu klasy. Ale wypadałoby dać możliwość podczas tworzenia obiektu, z jakich tabel chcemy korzystać.

Używanie mysql_* oznacza, że bez patrzenia, można klasę wyrzucić do kosza.

Usuwanie znajomych odbywa się tylko za pomocą parametrów z id. Chyba warto byłoby już wewnątrz klasy to jakoś zabezpieczyć, np przy tworzeniu obiektu podaję jaka zmienna sesyjna u mnie odpowiada za ID użytkownika i Ty weryfikujesz w metodzie, czy usuwa użytkownika ze znajomych, jego prawowity znajomy, czy też nie.

IFy jakoś dziwnie się duplikują.

Po kodzie już widać, że podatne na wszelkie możliwe ataki SQL injection, nie widzę też żeby stringi pobierane z bazy były czyszczone z niepowołanych znaczników.

Pisząc to dla siebie, mogłoby być, ale skoro chcesz to udostępniać, to nie ma racji bytu, ja żeby móc skorzystać wydajnie z Twojej klasy, muszę zrobić mnóstwo innych rzeczy, m.in. właśnie weryfikacja czy rzeczywisty użytkownik usuwa swojego znajomego. A powinno być tak, że tworzę obiekt i o nic się nie martwię, wiem jakich typów danych klasa się spodziewa itd.
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 05:25