Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Pobieranie grafiki z bazy
Forum PHP.pl > Forum > Przedszkole
ann
Witam. Potrzebuję mieć możliwość zapisu i odczytu zdjęć z bazy danych, jednak pobierane zdjęcia wyświetlają się w postaci tekstowej. Co robię nie tak?

  1. <?php
  2. $zapytanie="select zdjecie from zdjecia where uzytkownik='$uzytkownik'";
  3.  
  4. $result2=mysql_query($zapytanie)
  5. or die ('Błąd wykonania zapytania: '.mysql_error());
  6.  
  7. $row = mysql_fetch_array($result2);
  8. $grafika=$row['zdjecie'];
  9.  
  10. $obraz = imagecreatefromstring($grafika);
  11. imagejpeg($obraz);
  12. imagedestroy($obraz);
  13. ?>



-------------------------
do PHP są odpowiednie znaczniki BBCode
tym razem poprawiłem ale pamiętaj
i stosuj sie do tego na przyszłość
~Cienki1980
djkret
Jakiego typu masz pole ze zdjęciami w bazie?
Do przechowywania danych binarnych potrzebujesz pola blob. Sprawdź też czy przed wysłaniem zdjęcia nie trafiają do przeglądarki jakiekolwiek nagłówki. Chociażby dane w postaci spacji, itp.
ann
Jest BLOB... To pewnie wina nagłowków zatem. Kod wysyłania zaczerpnięty jest po części z jakiejś www i po krótce wygląda tak... [część] Plik do bazy ładnie wpada.


  1. <?php
  2. if (isset($_FILES['plik']))
  3. {
  4.  if ($_FILES['plik']['error']==UPLOAD_ERR_OK)
  5.  {
  6.  $filename=$_FILES['plik']['name'];  
  7.  $filetype=$_FILES['plik']['type'];
  8.  $filesize=$_FILES['plik']['size'];  
  9.  $filesrc=$_FILES['plik']['tmp_name']; 
  10.  
  11.  
  12.  if ($filetype=="image/png" || $filetype=="image/x-png" ||
  13.  $filetype=="image/gif" || $filetype=="image/jpeg" ||
  14.  $filetype=="image/pjpeg")
  15.  {
  16. $plik=fopen($filesrc,"r"); 
  17. $mysqlplik = addslashes(fread($plik,$filesize));
  18.  fclose($plik); 
  19.  unlink($filesrc); 
  20.  $mysqlfiletype = addslashes($filetype); 
  21.  $mysqlfilename = addslashes($filename); 
  22.  
  23. $lacz = lacz_bd3();
  24. $wynik = $lacz->query("INSERT INTO zdjecia (uzytkownik,zdjecie) VALUES ('$uzytkownik','$mysqlplik') ");
  25. ?>
Kicok
To jest wina nagłówków. Nie określiłeś jakiego typu dane wysyłasz, więc Apache domyślnie ustawił nagłówek Content-Type: text/plain (albo text/html, nieważne)


header" title="Zobacz w manualu PHP" target="_manual
ann
Hmmm.. Najlepiej byloby te headery zróznicować w zależności od rodzaju pliku jakimś
if ($filetype=="image/png")
{ header("Content-type: image/png\");
}
else if($filetype=="image/jpeg")
{ header("Content-type: image/jpeg\");
}
czy to bez roznicy?
I że się tak nieśmiało zapytam... gdzie to dodać?smile.gif Przed wyslaniem do bazy czy gdzieś w wyświetlaniu?
Kicok
Widzę, że przed wysłaniem do bazy masz taki kod:
  1. <?php
  2.  
  3.  if ($filetype=="image/png" || $filetype=="image/x-png" ||
  4. $filetype=="image/gif" || $filetype=="image/jpeg" ||
  5. $filetype=="image/pjpeg")
  6.  
  7. ?>


Więc chyba najprościej będzie dodać do tabeli w bazie jeszcze jedną kolumnę, trochę przerobić ten kod, a podczas wyświetlania obrazka dodać:
  1. <?php
  2.  
  3. header( 'Content-Type: ' . $row['typ_pliku'] );
  4.  
  5. ?>
ann
Dobra myśl, dzięki:)Hmm działałoby bez zarzutów ale wypisuje mi : Warning: Cannot modify header information - headers already sent by (output started at C:\blablabla\funkcje_form.php:25) in [...]Wskazuje tutaj na funkcje która sprawdza pola w formularzu, i to zupełnie gdzie indziej... Nie wiem jaki może mieć związek : |<tak, dopiero się uczę:)> hmm help o.0
Kicok
Nie można wysłać do przeglądarki żadnej treści, a ty coś w 25 linii pliku funkcje_form.php wysyłasz.


PS. Mam nadzieję, że wiesz, że nie można za jednym zamachem wysłać do przeglądarki tekstu i obrazków. Musisz wtedy rozbić to na 2 pliki:
plik1.php
  1. <?php
  2.  
  3. echo '<img src="plik2.php" alt="Obrazek z bazy danych" />';
  4.  
  5. ?>


plik2.php
  1. <?php
  2.  
  3. // Pobranie obrazka z bazy danych
  4.  
  5. // Wysłanie nagłówków
  6.  
  7. // Wysłanie obrazka
  8.  
  9. ?>
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.