Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] [MySQL] System znajomych
Forum PHP.pl > Inne > Oceny
MrCoody
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 smile.gif

------------------------------------------------
Jeśli jesteś zainteresowany jego użyciem nie usuwaj informacji o autorze.
nospor
int(255) - WOW. Co niby ma oznaczac te 255?
int(1)

Przydaloby sie troche teorii z podstaw:
http://nospor.pl/int11-kontra-int.html

A gdzie sa zdefiniowane stale ktorych uzywasz? Np. TABLE_friends_inviter

Cytat
return $howmany.';'.$invitate;
Do zwracania wielu wartosci uzywaj tablic a nie preparowanych tekstow
MrCoody
poprawione biggrin.gif
dzięki za spostrzeżenia tongue.gif

nie chciałem robić tego na tablicach bo za bardzo tego nie ogarniałem jak to ma działać biggrin.gif ale poczytałem więcej o tablicach wielowymiarowych i oto efekt (wyżej) snitch.gif

macie jeszcze jakieś wskazówki ? smile.gif
red.orel
No i całe programowanie obiektowe szlag trafił, bo w końcu nazwy tabel to stałe. fatalnieczytasienazwywlasciwosciorazmetod, a mysql_* wciąż powraca z krainy zapomnianych. Dzięki, ale nie jestem zainteresowany użyciem. Dużo pracy jeszcze przed tobą.
nospor
Czemu INT(255) zamieniles na VARCHAR? Czy ja gdzies pisalem ze liczbe masz na VARCHAR zamieniac?? Przeciez to byly liczby, wiec INT mial pozostac, miales wywalic te durne 255 tylko :/

Czemu INT(1) zamieniles na zwykly INT? W arcie co ci podalem miales wyraźnie napisane, ze jak potrzebujesz malych liczb to INT masz zamienic na TINYINT

Cytat
$invitate['howmany']=$howmany;

while($friend = mysql_fetch_array($query)) {

$invitate[] = $friend[TABLE_friends_inviter];

}

return $invitate;


Jak uzywasz w tablicy roznych wartosci, to masz je trzymasz pod roznymi nazwanymi indeksami
  1. $invitate['howmany']=$howmany;
  2. $invitate['friends']=array();
  3.  
  4. while($friend = mysql_fetch_array($query)) {
  5.  
  6. $invitate['friends'][] = $friend[TABLE_friends_inviter];
  7.  
  8. }
  9.  
  10. return $invitate;
Damonsson
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.
MrCoody
bardzo pouczające z waszej strony biggrin.gif
wiem że muszę jeszcze duUUUżo popracować nad Obiektowym PHP oraz przerzucić się na PDO opanować operacje na tablicach i wiele innych smile.gif

tak więc temat do zamknięcia a ja idę do nauki...
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.