Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]bledy w wyswietlaniu zdjec z bazy mysql
Forum PHP.pl > Forum > Przedszkole
ukaszq
Mam mysqla 5 i php 5.
Stworzylem tabele dalem jej mediumblob dla zdjec.
Po czym chce wyswietlac te zdjecia ktore zaladuje to wyswietla mi dwie strony krzaczków, nie widze zadnego zdjecia.

Mam taki skrypcik do wyswietlania fotek:
  1. <?php
  2. $result = mysql_query("SELECT zdjecie FROM fotki WHERE id='3'");
  3.  
  4. if (mysql_num_rows($result) != 0)
  5. {
  6. $row = mysql_fetch_array($result);
  7. echo base64_decode($row['zdjecie']);
  8. }
  9. ?>


Mam oczywiscie na poczatku:
  1. <?php
  2. header("Content-type: image/jpg;");
  3. ?>

ale wyrzuca mi taki blad:
Warning: Cannot modify header information - headers already sent by (output started at /admin/sehen.php:3) in /admin/sehen.php on line 6
sniezny_wilk
Wyrzuca Tobie błąd ponieważ masz już wysłane nagłówki. Umieść header() gdzieś na początku swojego skryptu tzn (pierwsza linijka po rozpoczęciu kodu):

  1. <?php
  2. header("Content-type: image/jpg;");
  3. //cała reszta kodu
  4. ?>


Pamiętaj, że wylanie nagłówków musi być przed jakimkolwiek wygenerowaniem html (znacznikami html'owymi - najlepiej).

BTW: możesz pokazać sehen.php ? lub 3 i 6 linijkę ?
ukaszq
Zrobilem tak jak mowisz... i poszlo, dzieki smile.gif
marcio
Zawsze mozesz dac ob_start i wtedy dajesz header gdzie chcesz
ukaszq
Chyba za bardzo sie pochwalilem. Nie chodzi mi nadal. Był moment kiedy chodzilo, ale to wtedy kiedy usunalem caly kod html i wrzucilem sam kod php. Nie usunalem wtedy otwartej wczesniej strony w html tylko odswiezylem sam skrypt php i wtedy zobaczylem zdjecie.

Nie umiem sobie jakos z tym poradzic.
Oto caly moj skrypt w pliku sehen.php:

  1. <html>
  2. <body>
  3. <?
  4. header("Content-type: image/jpg;");
  5. $connect=mysql_connect("localhost", "xxx", "xxx") or die("Nie mozna polaczyc sie z baza danych.");
  6. $baza=mysql_select_db("xxx", $connect) or die("Baza danych nie istnieje");
  7.  
  8. $result = mysql_query("SELECT zdjecie FROM fotki WHERE id='3'");
  9.  
  10. if (mysql_num_rows($result) != 0)
  11. {
  12. $row = mysql_fetch_array($result);
  13. echo base64_decode($row['zdjecie']);
  14. }
  15.  
  16.  
  17.  
  18.  
  19. ?>
  20.  
  21.  
  22. </body>
  23. </html>


I znowu wysiwtelaja sie bledy i krzaczki... to samo co wyzej...
sniezny_wilk
Mówiłem smile.gif zrób tak:
  1. <?php
  2. header("Content-type: image/jpg;");
  3.  
  4. echo "<html>
  5. <body>";
  6.  
  7. $connect=mysql_connect("localhost", "xxx", "xxx") or die("Nie mozna polaczyc sie z baza danych.");
  8. $baza=mysql_select_db("xxx", $connect) or die("Baza danych nie istnieje");
  9.  
  10. $result = mysql_query("SELECT zdjecie FROM fotki WHERE id='3'");
  11.  
  12. if (mysql_num_rows($result) != 0)
  13. {
  14. $row = mysql_fetch_array($result);
  15. echo base64_decode($row['zdjecie']);
  16. }
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. </body>
  24. </html>";
  25. ?>


Jeśli dajesz ob_start() to dajesz również przez znacznikami html'owymi, a skoro chcesz dać ob_start() na początek to musisz pamiętać aby na końcu umieścić ob_end_flush().
ukaszq
Zrobilem tak jak napisales. Ale ciagle sa krzaczki... nie wyswielta mi zdjecia.
sniezny_wilk
Dobra, to może pora szukać błędu gdzie indziej. Ja zrobiłem tak, wciągnąłem obrazek do bazy tak

  1. <?php
  2. $obrazek = file_get_contents("http://www.adresdoobrazka.pl/obrazek.jpg");
  3. //i potem do bazy która ma pole jako TEXT ustawione wrzuciłem wartość zmiennej $ob
    razek
  4. ?>


i wyrzucam to z bazy bez żadnego base64. Jeśli wyświetlasz obrazek nie dawaj znaczników html ! sam czysty PHP
marcio
Ogolnie zapomnialo mi sie dodac ze na koncu powinno sie dac ob_end_flush lecz jednak nie jest to przymusowe dziala i bez lecz do poprawnego dzialania lepiej dodac
sniezny_wilk
Może Ty chcesz wyświetlić ten obrazek w html'u ?

Wtedy robisz dwa skrypty jeden ten który ładuje obrazek z bazy np. obrazek.php i tam już bez znaczników html, czysty PHP, tylko z tym header. Potem jak chcesz wykorzystać ten obrazek piszesz sobie normalnie kod html'owy i wrzucasz obrazek w którym src podajesz jako ścieżkę do skryptu np.

  1. </head>
  2. <img src="obrazek.php" alt="obrazek z PHP"/>
  3. </body>
  4. </html>


i będzie obrazek.
ukaszq
Jest tak. Mam plik sehen.php i chce kiedy wlacze ten plik w przegladarce aby wyswietlilo mi sie zdjecie. A pokazuja mi sie krzaczki i wyskakuje mi blad z headerem... Juz nie wiem co jest grane...
Prosze o pomoc...

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7.  
  8. <body>
  9.  
  10. <?
  11. header("Content-type: image/jpg;");
  12. $connect=mysql_connect("localhost", "xxx", "xxx") or die("Nie mozna polaczyc sie z baza danych.");
  13. $baza=mysql_select_db("xxx", $connect) or die("Baza danych nie istnieje");
  14.  
  15. $result = mysql_query("SELECT zdjecie FROM fotki WHERE id='3'");
  16.  
  17. if (mysql_num_rows($result) != 0)
  18. {
  19. $row = mysql_fetch_array($result);
  20. echo base64_decode($row['zdjecie']);
  21. }
  22.  
  23.  
  24.  
  25.  
  26. ?>
  27. </body>
  28. </html>
sniezny_wilk
Jeśli chcesz otwierać sam obraz to po co Tobie html ? sciana.gif Zdjęcie to zdjęcie, nie potrzebuje otoczki html'owej. Otwórz obojętnie jaki obraz w przeglądarce a zobaczysz, że nie da się zrobić podglądu źródła, lub źródła nie ma. Powiedz jaki efekt chcesz uzyskać - jeśli chcesz wyświetlić samo zdjęcie bez tekstu to nie dawaj znaczników html'owych, jeśli chcesz zdjęcie wstawić do html'a to zrób tak jak napisałem powyżej czyli

  1. <?php
  2. header("Content-type: image/jpg;");
  3. $connect=mysql_connect("localhost", "xxx", "xxx") or die("Nie mozna polaczyc sie z baza danych.");
  4. $baza=mysql_select_db("xxx", $connect) or die("Baza danych nie istnieje");
  5.  
  6. $result = mysql_query("SELECT zdjecie FROM fotki WHERE id='3'");
  7.  
  8. if (mysql_num_rows($result) != 0)
  9. {
  10. $row = mysql_fetch_array($result);
  11. echo base64_decode($row['zdjecie']);
  12. }
  13.  
  14.  
  15.  
  16.  
  17. ?>


a potem w html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Untitled Document</title>
  5. </head>
  6.  
  7. <img src="sehen.php" alt="obrazek z PHP"/>
  8. </body>
  9. </html>


pliki sehen.php i ten html, muszą być w tym samym katalogu. Działa ?
marcio
Mi jedyne pytanie jakie mi sie nasuwa to jest czy zdjecie to napewno jpg
sniezny_wilk
Cytat(marcio @ 26.12.2007, 19:11:24 ) *
Mi jedyne pytanie jakie mi sie nasuwa to jest czy zdjecie to napewno jpg


Bez różnicy, ja miałem np, obrazek GIF i z headerem JPG normalnie wyświetlało, bez żadnych problemów. Chodzi tylko o info, że to obrazek jest.
marcio
obrazkami,header'em i funckja dotyczacych obrazkow malo znam ale wedlug mnie moze to zle chodzic jesli obrazek jest gif przeciez sa to inne typy,
To takjakby do zmiennej string'a dac int i tez program sie wysypie
ukaszq
Cytat(sniezny_wilk @ 26.12.2007, 19:04:43 ) *
Jeśli chcesz otwierać sam obraz to po co Tobie html ? sciana.gif Zdjęcie to zdjęcie, nie potrzebuje otoczki html'owej. Otwórz obojętnie jaki obraz w przeglądarce a zobaczysz, że nie da się zrobić podglądu źródła, lub źródła nie ma. Powiedz jaki efekt chcesz uzyskać - jeśli chcesz wyświetlić samo zdjęcie bez tekstu to nie dawaj znaczników html'owych, jeśli chcesz zdjęcie wstawić do html'a to zrób tak jak napisałem powyżej czyli

  1. <?php
  2. header("Content-type: image/jpg;");
  3. $connect=mysql_connect("localhost", "xxx", "xxx") or die("Nie mozna polaczyc sie z baza danych.");
  4. $baza=mysql_select_db("xxx", $connect) or die("Baza danych nie istnieje");
  5.  
  6. $result = mysql_query("SELECT zdjecie FROM fotki WHERE id='3'");
  7.  
  8. if (mysql_num_rows($result) != 0)
  9. {
  10. $row = mysql_fetch_array($result);
  11. echo base64_decode($row['zdjecie']);
  12. }
  13.  
  14.  
  15.  
  16.  
  17. ?>


a potem w html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Untitled Document</title>
  5. </head>
  6.  
  7. <img src="sehen.php" alt="obrazek z PHP"/>
  8. </body>
  9. </html>


pliki sehen.php i ten html, muszą być w tym samym katalogu. Działa ?



Zadziało! Dziekuje Ci za pomoc. Choc wczesniej tak probowalem i nie chodzilo. Napewno robilem jakis blad.
Ale jeszcze raz dzieki smile.gif
sniezny_wilk
Cytat(marcio @ 26.12.2007, 19:35:25 ) *
obrazkami,header'em i funckja dotyczacych obrazkow malo znam ale wedlug mnie moze to zle chodzic jesli obrazek jest gif przeciez sa to inne typy,
To takjakby do zmiennej string'a dac int i tez program sie wysypie


Nie wiem jakie to ma minusy, że jest header JPG, ale zrób test, wciągnij obrazek GIF za pomocą file_get_contents(), a następnie wyświetl zawartość z headerem JPG.
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.