Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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 smile.gif

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

Ten post edytował MrCoody 10.07.2013, 16:47:43


--------------------
Ogarniam COŚ WIELKIEGO :]
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
MrCoody
post
Post #3





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

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


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


--------------------
Ogarniam COŚ WIELKIEGO :]
Go to the top of the page
+Quote Post
red.orel
post
Post #4





Grupa: Zarejestrowani
Postów: 42
Pomógł: 9
Dołączył: 3.02.2012

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


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ą.
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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;


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Damonsson
post
Post #6





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
MrCoody
post
Post #7





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

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


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...


--------------------
Ogarniam COŚ WIELKIEGO :]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 20:35