Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obrazek w tabeli MySQL, Jak go tam wstawić i jak go wyciągnąć?
xPatryk
post 5.03.2005, 10:18:45
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


Witam !

Chciałbym wstawić miniaturkę przesłanego obrazka do tabeli MySQL.

Miniaturka do tej pory po przesłaniu była zapisywana na dysku, w folderze /images/artykuly/miniaturki/, ale byl problem z koniecznoscia ich usuwania w przypadku usuwania artykulu.

Jak wiec mozna umiescic obrazek w bazie danych (czy ma on trafic do pola typu "BLOB" ?) jesli tak, to czy wystarczy podac uchwyt do niego w zapytaniu w odpowiednim miejscu (np.

  1. INSERT
  2. INTO `artykuly_naglowki` (`obrazek`) VALUES ($obrazek);


?

A jak później wyświetlić go ?


Pozdrawiam i proszę o odpowiedź
Patryk


--------------------
Linux is like a Wigwam - no windows, no gates, Apache INSIDE...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Fixer
post 6.03.2005, 01:00:29
Post #2





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 24.10.2004
Skąd: TG

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


Zdecydowanie nie polecam upychania w bazie danych dużych plików, ponieważ można je umieścić w osobnym katalogu, a w bazie dodać tylko ścieżki do nich. Natomiast są sytuacje, gdy pliki musisz dodać, choć zdarza się to niezmiernie rzadko.

Stwórzmy sobie prostą tabelę zdjecia, do której dodamy grafikę. Tabela może się składać z dwóch pól:

Kod
CREATE TABLE zdjecia (
  id INT NOT NULL PRIMARY KEY auto_increment,
  obraz BLOB
);


Pole id będzie identyfikatorem zdjęcia, a obraz będzie przechowywał plik w bazie. Pola typu BLOB mogą przechowywać dowolne dane binarne, np. zdjęcia lub dźwięki, dlatego skorzystamy właśnie z takiego pola.

Aby umieścić zdjęcie w bazie, posłuż się poniższym skryptem:

Kod
<?
$plik = "1.gif";
$obraz = addslashes(fread(fopen($plik,"rb"),filesize($plik)));

$baza = mysql_connect("localhost", "user", "password");
if ($baza) {
  $wynik = mysql_select_db("baza1");
  if ($wynik) {
    $wynik = mysql_query("INSERT INTO zdjecia VALUES ('','$obraz')");
    if ($wynik) echo "Zdjęcie zostało dodane";
    else echo "Zdjęcie nie zostało dodane";
  } else echo "Nie można połączyć się z tabelą";
  mysql_close($baza);
} else echo "Nie można połączyć się z bazą";
?>


Do zmiennej $obraz wczytywana jest zawartość pliku graficznego, który wcześniej został potraktowany funkcją addslashes(), dodającą ukośnik przed znakami cudzysłowów, aby poprawnie mógł być zapisany w bazie.

Cała reszta w tej linii to zagęszczone odczytanie pliku o określonej wielkości. Opcja r oznacza odczyt pliku, a w Windowsach trzeba jeszcze zastosować b oznaczające czytanie pliku binarnego. Stąd dwa znaki "rb".

W ten sposób możesz wstawiać kolejne zdjęcia do bazy. Gdy już je tam umieścisz, warto by je w jakiś sposób odczytać... Polecenie do wstawienia obrazka na stronę jest trywialne:

Kod
<img src="obraz.gif" alt="" />


Ale ponieważ mamy pobrać obrazek z bazy, odpowiedni plik graficzny musi wygenerować skrypt. Stąd zapis ten zmodyfikuj do postaci:

Kod
<img src="pokaz.php?id=1" alt="" />


Zmienna id to identyfikator obrazka, jaki ma zostać pokazany (ten z pola id w bazie). Pozostało jeszcze skonstruować skrypt pokaz.php odpowiedzialny za wyświetlenie obrazka:

Kod
<?
$id = $_GET["id"];
$baza = mysql_connect("localhost", "user", "password");
if ($baza) {
  $wynik = mysql_select_db("baza1");
  if ($wynik) {
    $wynik = mysql_query("SELECT * FROM zdjecia WHERE id=$id");
    $rekord = mysql_fetch_object($wynik);
  } else echo "Nie można połączyć się z tabelą";
  mysql_close($baza);
} else echo "Nie można połączyć się z bazą";
header("Content-type: image/gif");
echo stripslashes($rekord->obraz);
?>


Pobieramy w nim przekazany numer id, łączymy się z bazą, pobieramy rekord o podanym numerze id, przekształcamy go na obiekt i wypisujemy na ekran zawartość pola obraz pamiętając, aby usunąć ukośniki dodane podczas dopisywania danych do tabeli.

W zależności od rodzaju danych należy jeszcze wyświetlić poprawny nagłówek MIME, np. image/gif dla obrazków. I to już cała obsługa przechowywania i odczytywania obrazków z bazy.

Można by tu jeszcze dodać obsługę plików, które nie istnieją (np. ktoś specjalnie poda zły numer id) i wtedy możnaby pokazać jakiś obrazek z błędem, możnaby też sprawdzać czy obrazek istnieje na dysku, itd. Ale to już odbieganie od właściwego tematu i zależy od zastosowań skryptu.


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 21:18