• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dodawanie zdjęć itp do bazy danych?

Object Storage Arubacloud
0 głosów
2,223 wizyt
pytanie zadane 7 lutego 2017 w SQL, bazy danych przez BlvckFox Gaduła (4,240 p.)

Witam, mam taki problem, przypuśćmy, że chcę zrobić taki mały serwis społecznościowy na którym
użytkownik ma avatar, może dodawać zdjęcia, lickować i pisać komentarze - wszystko ok tylko gdzie mam
te wszystkie dane trzymać? 
Przechowywanie tego w strukturze plików raczej odpada:

czy jakoś tak;

Baza danych wydaje się oczywistą odpowiedzią, ale czy w bazie danych trzymać zdjęcia? Jak wyglądałaby
struktura takiej bazy, żeby każdy użytkownik miał przypisane swoje zdjęcia, komentarze itd.? 

1 odpowiedź

+1 głos
odpowiedź 7 lutego 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
W bazie danych trzymasz tylko nazwę pliku (ewentualnie folder czy coś co jest potrzebne do ustalenia jego położenia) a zdjęcia na dysku. Po uploadzie musisz oczywiście zmienić nazwę na unikalną, np. jakiś losowy hash.
komentarz 7 lutego 2017 przez BlvckFox Gaduła (4,240 p.)
A jak potem pobiorę to z bazy danych? Np, zeby uzytkownik zobaczyl swoje wszystkie dodane zdjęcia i jednoczesnie te zdjecia ktore dodal dodawaly sie do puli wszystkich zdjęć jakie są na stronie
komentarz 7 lutego 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
No to obok nazwy pliku powinna być kolumna z id użytkownika. Żeby pobrać wszystkie zdjęcia danej osoby zrobisz po prostu zapytanie z WHERE po id użytkownika. A zdjęcia wyświetlisz przez zwykłe <img> - wyciągniesz po prostu z bazy danych ich nazwy i podstawisz do atrybutu src.
komentarz 7 lutego 2017 przez mtk3d Nałogowiec (46,690 p.)
Jako nazw plików, możesz użyć funkcji microtime(); zwracającej czas unixowy w mikrosekundach i przepuścić ją przez md5();. W md5 zdarzają się kolizje, ale jest małe prawdopodobieństwo, więc możesz go użyć.
1
komentarz 7 lutego 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
1
komentarz 7 lutego 2017 przez maciej.tokarz Nałogowiec (27,280 p.)
Możesz posłużyć się polem created, które będzie zawierać datę utworzenia zdjęcia, a samo zdjęcie lokować np. według poniższej ścieżki:

disc/created:year/created:month/photo:id.jpg
disc/created:year/created:month/photo:id_m.jpg (_m to miniatura)

chodzi przede wszystkim o rozproszenie tych zdjęć, aby nie zapełniać pojedynczego katalogu jedynie.

M.
komentarz 7 lutego 2017 przez xandros Nałogowiec (29,450 p.)
Awaluk, a jak model odpowiada jednemu obrazku, to nie lepiej nazywac je id => obrazek?

Also, md5 jest o tyle dobre i zle, że jak ktoś zuploaduje taki sam obrazek, to go nadpisze. :P
komentarz 8 lutego 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
A pewnie, różne konwencje nazewnictwa jak i układania w katalogach można zastosować. Zależy co pytający dokładnie robi i jak chce to zrobić ;)
komentarz 8 lutego 2017 przez BlvckFox Gaduła (4,240 p.)

Nie robiłem nic poza systemem logowania / rejestracji w MySQL, jest jakiś poradnik który dokładniej opisuje to co chciałbym zrobić? User id? Dlaczego nie przez username. Baza ze zdjęciami będzie wyglądać jakoś tak?:

 

komentarz 8 lutego 2017 przez mtk3d Nałogowiec (46,690 p.)
Normalnie przypisujesz zdjęcia z id usera. Nazwy avatarów możesz dodać do tabeli z userami.
komentarz 8 lutego 2017 przez BlvckFox Gaduła (4,240 p.)

Avatary to wiem, a co z komentarzami? Gdzie je zapisywać, żeby każdy był jako oddzielny 
Jak zapisać kto, kiedy i co napisał w komentarzu do danego zdjęcia?

komentarz 8 lutego 2017 przez maciej.tokarz Nałogowiec (27,280 p.)
edycja 8 lutego 2017 przez maciej.tokarz

Relacyjne bazy danych tego potrzebujesz.

Mniej więcej taki schemat:

users:
- id int PK
- name varchar
- password_hash varchar
- created date

photos:
- id int PK
- user_id int FK do users
- created date

photo_comments:
- id int PK
- photo_id int FK do photos
- comment varchar
- created date

M.
 

komentarz 8 lutego 2017 przez BlvckFox Gaduła (4,240 p.)
O to właśnie mi chodziło, dzięki wielkie, a jest jeszcze jakaś różnica między w photos user_id a user_username? Nie będzie to bardziej intuicyjne? I można dzięki temu w bazie danych łatwo zobaczyć czyje to zdjęcie
komentarz 8 lutego 2017 przez maciej.tokarz Nałogowiec (27,280 p.)
Chodzi o to, że aparatowi bazy danych łatwiej i co za tym idzie szybciej przeszukuje się rekordy po identyfikatorze będącym liczbą. Jak będziesz potrzebował nazwy użytkowników, to wykorzystując relacje i łącząc tabele w zapytaniu uzyskasz odpowiednie dane.

M.

Podobne pytania

0 głosów
2 odpowiedzi 385 wizyt
pytanie zadane 21 marca 2022 w PHP przez pazo1313 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 332 wizyt
pytanie zadane 24 stycznia 2016 w SQL, bazy danych przez kacper777 Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 957 wizyt
pytanie zadane 20 grudnia 2015 w SQL, bazy danych przez Rakso Użytkownik (560 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...