Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie zdjęcia z bazy MSSQL na stronie
Forum PHP.pl > Forum > PHP
ssylwester
Zapisuję sobie zdjęcie do bazy MSSQL w formacie varbinary(MAX).
Próbuję wyświetlić je na stronie w określonej tabelce w ten spocób:
  1. header("Content-header: image/jpg");
  2. echo $obrazek;

Jedna k na stronie pojawiaja mi się krzczki.
Dla pewności sprawdzałem czy zdjęcie w bazie jest poprawnie zapisane i w momencie
gdy mam czysty skrypt php i nic innego nie wyświetlam na stronie oprócz zdjęcia to pojawia się ono tak jak powinno.
W momencie pojawienia się innej treści pojawiają się krzaczki w miejsce zdjęcia.
Może ktoś wie jak je wyświetlić zdjęcie pomiędzy innym tekstem.
wookieb
Content-type
Skąd ty wziąłeś Content-header? Strzelasz po prostu?
ssylwester
Masz rację Content-type. Jednak to zmienia tylko fakt że zamiast krzaczków pokazuje się kwadracik przekreślony krzyżykiem i nic poza tym.
wookieb
Podaj link do strony tudzież obrazka
ssylwester
Niestety nie mogę podać linku ponieważ serwery z bazą jak i www stoją w sieci niedostępnej z zewnątrz.
Mogę tylko podać funkcje jak jest zapisywany plik do bazy.

To jest moja tabela:
  1. CREATE TABLE [dbo].[uzytkownik](
  2. [user] [varchar](50) NOT NULL,
  3. [zdjecie] [varbinary](max) NULL
  4. ) ON [PRIMARY]

I funkcje:
  1. function getFileExtension($name){
  2. $namepart = explode(".", $name);
  3. $namepart = array_reverse($namepart);
  4. return $namepart[0];
  5. }
  6.  
  7. function convertImage($filename){
  8. $fileType = getFileExtension($filename);
  9. $fileType = str_replace('\'','',$fileType);
  10. if(in_array($fileType, array('jpg'))){
  11. $dataString = file_get_contents($filename);
  12. $arrData = unpack("H*hex", $dataString);
  13. $data = "0x".$arrData['hex'];
  14. return $data;
  15. }
  16. else
  17. return false;
  18. }

oraz kawałek kodu z updatem do bazy danych:
  1. $data = convertImage($file)
  2. $sql = "UPDATE uzytkownik SET zdjecie = ".$data." WHERE user='maciek'";
  3. $result = savesqldata($sql); //moja funkcja zapisu do bazy

gdzie $file to pełna ścieżka do pliku, który wcześniej został uploadowany na serwer i odpowiednio zmniejszony rozmiar. np "./images/photo.jpg"

Wszystko zapisuje się poprawnie do bazy danych.
Potem tylko:
  1. $sql = "SET TEXTSIZE 2147483647";
  2. @mssql_query($sql);
  3. $sql = "SELECT zdjecie FROM uzytkownik WHERE user='maciek'";
  4. $rs = @mssql_query($sql);
  5. if (!$rs) {
  6. exit("<strong>Error</strong>");
  7. }
  8. $rs = mssql_fetch_assoc($rs);
  9. $zdjecie = $data['zdjecie'];
  10.  
  11. header("Content-type: image/jpeg");
  12. echo $rs['zdjecie'];

I wszystko ładnie się wyświetla. Ale w momencie gdy np przed lub po
  1. header("Content-type: image/jpeg");
  2. echo $rs['zdjecie'];

dodam jakąś treść to mam biały obrazek z przekreślonym krzyżykiem w rogu. A chciałbym wstawić ten obrazek w istniejącą już treść strony.

wookieb
Włącz pełne raportowanie błędów. Otwórz tą stronę z twoi obrazkiem. Zapisz go i wystaw gdzieś ten obrazek ONLINE.
nospor
wookieb przeciez on wyswietla obrazek (kod obrazka i naglowki) razem z inną normalną treścią strony. Czekałem aż wkoncu na to zwrocisz uwagę, ale widzę nie zwracasz tongue.gif
No, to tyle mojej podpowiedzi. Bogatsi o nową wskazówkę kontynuujcie dalej smile.gif
wookieb
Aha :/
http://mynthon.net/tools/imgbase64/index.php

Ale takie rzeczy robi się w osobnych skryptach, które tylko wyświetlają obrazek i w miejsce HREF wstawisz link do skryptu
  1. <img src="skrypt_z_obrazkiem.php" alt="" />
ssylwester
Dzięki za naprowadzenie mnie i wyjaśnienie. Już wszystko działa jak należy.
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.