Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Problem z wyświetlanie obrazka z bazy danych MySql
Forum PHP.pl > Forum > PHP
jacek.s
Witam wszystkich !
Mam funkcje "wyświetl" która pobiera wszystkie produkty (nazwa, cena, opis, zdjęcie, etc......) z wskazanej jako argument kategorii
("select * from Produkty where idKategorie=".$kat;) i wyświetla je po 5 na stronie,
wszystko super, natomiast mam problem z wyświetlanie obrazków umieszczonych w bazie :/
Po ustawieniu header("Content-type: $zdjecieTyp"); zwraca całe białe okno przeglądarki ze ścieżką do skryptu ( http://localhost/~jacek/index.php?kat=6 ),
po usunięciu header("Content-type: $zdjecieTyp"); pokazuje "���y��9Z5� �|9s�%v� ......""


  1. function wyswietl( $kat ){
  2.  
  3. include('php/bazaconf.php');
  4. $connection = new connection();
  5. $connection->connect();
  6.  
  7. $sSQL = "select * from Produkty where idKategorie=".$kat;
  8. $result = mysql_query($sSQL);
  9.  
  10. while($row = mysql_fetch_array($result, MYSQLI_ASSOC)) {
  11.  
  12. $zdjecieNazwa = $row[zdjecieNazwa];
  13. $zdjecieRozmiar = $row[zdjecieRozmiar];
  14. $zdjecieTyp = $row[zdjecieTyp];
  15. $zdjecie = $row[zdjecie];
  16. header("content-disposition: inline; filename=$zdjecieNazwa");
  17. header("Content-length: $zdjecieRozmiar");
  18. header("Content-type: $zdjecieTyp"); /* ? */
  19.  
  20. echo '<div id="prod">' . $row[nazwa] . '</div><br>';
  21. echo '<img src="'.$zdjecie.'" width="200" ><br><br>'; /* ? */
  22. echo ''.$row[opis] .'<br>';
  23. echo '<b>Cena: '.$row[cena].' zł</b>';
  24. echo'<hr>';
  25. }
  26. }


zdjecie to longblob

z bazą na pewno jest wszystko ok bo

  1. $sSQL = "select zdjecie from Produkty where idProdukty=1";
  2. $result = mysql_query($sSQL);
  3.  
  4. $row = mysql_fetch_assoc($result);
  5. header("Content-type:image/jpeg");
  6. echo $row[zdjecie];
  7.  

wyświetla zdjęcie.

czy ma ktoś jakiś pomysł ?
darko
Wywal linie 20-24, bo w tym momencie dopisujesz kod html do danych obrazka wysłanego do przeglądarki. Nie jestem pewien, ale chyba zobaczysz tylko ostatni obrazek wyciągnięty w pętli.
R4D3K
Dokładnie, definiujesz header, że to ma by obrazek z wyświetlasz kod HTML i dlatego widzisz krzaki
jacek.s
@darko

Cytat
Nie jestem pewien, ale chyba zobaczysz tylko ostatni obrazek wyciągnięty w pętli.


czyli żeby otrzymać wszystkie, np. tablica asocjacyjna {$nazwa, $dane_binarne, $rozmiar, $typ, $id } i przy wczytywaniu pozostałych danych z bazy na podstawie $id,
dobrze kombinuje ?


Cytat
Wywal linie 20-24, bo w tym momencie dopisujesz kod html do danych obrazka wysłanego do przeglądarki.

a jakiś pomysł jak to wstrzelić w kod html przy założeniu że będzie to więcej niż jeden obrazek ?
darko
W pętli nie wysyłać headera, a zapisywać obrazki na dysku (trochę bez sensu, skoro trzymasz je w bazie), następnie poza pętlą kod html <img src jakoś nic innego mi nie przychodzi, albo w pętli linki do skryptu, które po kliknięciu uruchomią skrypt, w którym połączysz się z bazą wyciągniesz dane obrazka i prześlesz header tak, jak to robisz teraz, tyle że nie wyświetlisz wszystkiego na raz, a po jednym obrazku i już bez printowania czegokolwiek winksmiley.jpg tylko "czysty" obrazek i nic więcej, żadnego kodu html.
jacek.s
Rozwiązałem problem na zasadzie :
przy otwarciu strony wymagającej obrazka pobierany jest do katalogu, a po jej opuszczeniu usuwany z katalogu.
Trochę na około ale działa niebiebo lepiej.

Dzięki wszystkim z rady.
erix
Był już kiedyś podobny wątek na forum, ale nie pamiętam namiarów.

Jednak konkluzja zawsze była taka sama - trzymanie zdjęć w bazie, to głupota... Raz - uniemożliwiasz cache'owanie przez przeglądarkę, dwa - obciążasz niepotrzebnie bazę, trzy - obciążasz niepotrzebnie interpreter. Pozorna zaleta, że wszystko jest w jednym miejscu? Poczekaj, prędzej czy później to wszystko da o sobie znać. winksmiley.jpg

Nie ma nawet 0.1% sytuacji uzasadniających trzymanie zdjęć w bazie; Twoja na pewno należy do 99.9%...
v1t4n
Zrob sobie oddzielny plik php do wyswietlania golego zdjecia i drugi do zalaczania go przez <img...> i dopisywania reszty tekstu.
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.