Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][SQL]Obrazki w bazie danych wyciagane przy pomocy PHP
Forum PHP.pl > Forum > Przedszkole
deszczowy
Witam serdecznie smile.gif

Przeszukałem już chyba wszystkie fora ale niestety nie znalazłem tego czego szukałem. Zwracam się zatem o pomoc do Was. Aktualnie robie sklepik internetowy. Stronka w PHP, baza SQL 2000. Do tej pory radziłem sobie z wszystkim (pasjont) ale natrafiłem na rzecz która jest dla mnie nie do przejścia :/ A są to: obrazki w bazie. Jak ugryść ten temat?
Posiadam w swojej bazie tabelkę Towary, aktulnie poprzez polecanie PHP wyciagam na strone stan danego towaru, ilosc sztuk itp. Chciałem teraz dołączyc fotki. Mam kilka pytań:
- czy dopisać do tabelki TOWARY, pozycje fotki odppwiedzialną za fotki danego produktu czy robić nową, inną tabelkę FOTKI?
- wiem, że można fotkę zapisać w bazie ale lepszym wyjściem jest chyba umieszczenie w niej adresu fotki w którym można ją znaleść, na jakiej zasadzie to sie odbywa?
- czy w SQLu 2000 działa polecenie BLOB? Jeśli tak to jak?

Chciałbym aby polecenie PHPowe wyciagało z bazy fotkę (tj. jej adres) odpowiednią do danego zdjecia.

Ścieżka fotek - d:\shop\fotki\drukarki\hp.jpg

Tabelka TOWAR


CREATE TABLE [dbo].[Towar] (
[Id_Towar] [int] NOT NULL ,
[Id_Producent] [int] NOT NULL ,
[Id_Cennik] [int] NOT NULL,
[Nazwa] [char] (30) NOT NULL ,
[Cena] [numeric] (9) NOT NULL ,
[Opis] [char] (45) NOT NULL ,
[Ilosc] [char](15) NULL ,
[Waga] [char](10) NULL
) ON [PRIMARY]
GO

Proszę o pomoc. Nie wzgardze żadną radą. Czytałem na ( jeśli mogę użyć tego stwierdzenia naszym forum) podobny wątek. Ale tam kolega jest już nieźle obeznany w tym co robi tylko nie może osiągnąc koncowego efektu. Ja niestety jestem jeszcze w malinach sad.gif

Pomóżcie
rybik
Często w bazie przydatne jest pole 'params' w którym trzymasz wszystkie parametry wyświetlania w postaci tablicy, w tym ścieżki fotek.

1.Czemu params a nie od razu 'photo' ?

ZA:
+ generalnie możesz założyć, że każdy obiekt (produkt/kategoria/user) ma jakies parametry i z pełnym spokojem dodac takie pole do tabel w bazie
+ nie musisz poszerzać tabel za każdym razem, gdy dopiszesz nową funkcjonalność
+ możesz tam trzymać wszystkie dane, które nie bardzo poddaja się schematyzacji, np podpis obrazka, obraz na lewo-prawo, bez dumania, czy wszystkie obrazki beda mialy podpis i poszerzania zapytania sql
+ przechowywanie 2 obrazkow , czy nawet całej ich galerii lub filmu/prezentacji nie stanowi problemu

PRZECIW:
- trzeba napisać funkcję do obsługi parametrów
pobranie: z bazy wylatuje param1=wartosc1|param2=wartosc2, trzeba to explodowac i pobrac wartosc
zmiana/zapis: pobrac, explodowac, nadpisac/ustawic, implodowac zapisac do bazy
- można tam trzymać tylko takie dane względem których nigdy nie będziemy chcieli sortowac ani filtrować

2. Ścieżki ?

Znawcą nie jestem ... ale jak na razie wszystkie przydatne skrypty operujące na obrazkach używają ścieżek i cos mi sie zdaje, że trzymanie obrazów w bazie jest upierdliwe i mocno uzależniające od platformy bazy danych. Pomyśl również o zarządzaniu zdjęciami...
promocja świąteczna: cpanel->file manager->kompresja->ftp->na dysk->mail do grafika->teee stary sypnij mi tam jakieś choinki w tle ... backup, wrzut nowych fotek pod starymi nazwami i od razu jest świątecznie smile.gif
Pewnie przez DB też się da ale jakoś nie spieszno mi pozbywać się możliwości ftpowania grafik.

reasumując: napewno ścieżki i na pewno w tej samej tabeli
f1xer
Ja jestem trochę innego zdania, oczywiście zgadzam się z przedmówcą w sprawie ścieżek generalnie jest to najlepszy sposób i nie zaśmieca bazy danych ale NIE W TEJ SAMEJ TABELI mogę zaproponować tabelę zdjęcia o 3 polach ID_Zdjecia Sciezka ID_Produktu
dlaczego? ano dlatego że dany produkt może mieć wtedy kilka fotek i bardzo łatwo będzie je wyciągnąć podczas gdy pole zdjęcie w tabeli Towar może zawierać

1- ścieżkę do 1 zdjęcia - i wtedy jest ok
2- plątaninę kilku ścieżek - i tu trzeba do wszystko rozdzielać itd w skrypcie
Kicok
Trzymanie zdjęć w bazie danych ułatwia zarządzanie nimi, ale traci się nieco na wydajności. W przypadku sklepu internetowego zdjęcia towarów nie są jakąś wielce istotną sprawą, więc można je trzymać na dysku. Musisz tylko sam zadbać o to, żeby miały unikalne nazwy. W takim razie tabela [zdjecia] wyglądać powinna wyglądać tak jak podał f1xer.



Jeśli jednak chciałbyś te zdjęcia mieć w bazie, to struktura powinna wyglądać mniej więcej tak:
Kod
+--------------+-------------+------------+-------------------+-------------------------+
|  ID_zdjecia  |  ID_towaru  |  zdjecie   |    nazwa_pliku    |  ostatnia_aktualizacja  |
+--------------+-------------+------------+-------------------+-------------------------+
|       1      |       1     |  #BINARY#  |  samochodzik.jpg  |   2008-08-05 11:32:48   |
|       2      |       1     |  #BINARY#  |  samochodzik.gif  |   2008-08-05 11:32:50   |
|       3      |       2     |  #BINARY#  |  pomarancza.jpg   |   2008-07-25 14:01:40   |


Kolumna [zdjecie] typu IMAGE
Przy każdym żądaniu wyświetlenia zdjęcia sprawdzasz, czy przesłano nagłówek If-Modified-Since. Jeśli tak, to porównujesz datę z nagłówka z datą w bazie. Jeżeli zdjęcie nie było ostatnio aktualizowane, to wysyłasz nagłówki:
Kod
HTTP/1.x 304 Not Modified
Last-Modified: Sat, 21 Apr 2007 01:08:10 GMT

Jeżeli tego nagłówka nie przesłano, lub zdjęcie było ostatnio modyfikowane, to wysyłasz nagłówki:
Kod
HTTP/1.x 200 OK
Content-Type: image/xxx
Content-Length: 12345
Last-Modified: Sat, 21 Apr 2007 01:08:10 GMT
Cache-Control: public

oraz "treść zdjęcia" z bazy danych.

Oczywiście Content-Type tworzysz na podstawie rozszerzenia zdjęcia, a Last-Modified na podstawie daty z bazy danych.
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.