Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Pobieranie grafiki z bazy
ann
post 25.08.2007, 16:43:46
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.08.2007

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


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
Go to the top of the page
+Quote Post
djkret
post 25.08.2007, 20:58:51
Post #2





Grupa: Zarejestrowani
Postów: 32
Pomógł: 2
Dołączył: 27.06.2006
Skąd: Lublin

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


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.
Go to the top of the page
+Quote Post
ann
post 25.08.2007, 23:11:48
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.08.2007

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


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. ?>
Powód edycji: BBCode ~Cienki1980
Go to the top of the page
+Quote Post
Kicok
post 26.08.2007, 08:02:18
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
ann
post 26.08.2007, 08:58:36
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.08.2007

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


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?
Go to the top of the page
+Quote Post
Kicok
post 26.08.2007, 16:15:17
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


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. ?>


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
ann
post 29.08.2007, 18:23:40
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.08.2007

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


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

Ten post edytował ann 26.08.2007, 16:38:51
Go to the top of the page
+Quote Post
Kicok
post 29.08.2007, 19:40:43
Post #8





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


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. ?>


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

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: 25.07.2025 - 01:53