Wyświetlanie obrazka

0

Witam. Co może być przyczyną że zamiast wysłanego do bazy danych obrazka wyświetla się w lewym górnym roku biały kwadracik?
Codowanie na image/jpg stosuję dla tej strony, decode także.

1

Co może być powodem, że nie działa mi samochód? Wciskam sprzęgło przecież.
Wrzuć kod, opisz dokładnie problem, to porozmawiamy o szczegółach.

0

Oto kod phpa wyświetlający wszystkie obrazy z bazy dodane przez danego użytkownika będącego w sesji. Zdaje sobie sprawę z tego że mysql jest podatny na sql injection, chcę przejść na PDO, czekam tylko na domenę i będe sie w tym kierunku kształcił.

include("config.php");
session_start();

header("Content-type: image/jpg");

	$nick = $_SESSION['logowanie'];
	$show = mysql_query("SELECT zdjecie FROM zdjecia WHERE nick='$nick'") or die("błąd3");

       while ($r = mysql_fetch_assoc($show))
	   {
		   echo base64_decode($r['zdjecie'])."<br>";
	   }
	?>

Jaki jest problem? zamiast obrazków, wyświetla się w lewym górnym rogu ekranu biały, kwadrat.

0

Wysyłasz nagłówek Content-Type informujący przeglądarkę o tym, iż to co zaraz odbierze to są dane pojedynczego obrazka w formacie JPG, po czym wysyłasz potencjalnie kilka obrazków, dodatkowo każdy rozdzielony tagiem <br>, który przecież nie jest prawidłową częścią obrazu JPEG.

Prawidłowo powinieneś wysyłać odkodowaną treść jednego obrazka bez żadnych dodatkowych tagów, tekstów etc.

0

Zmieniłem na

include("config.php");
session_start();

	
	include("config.php");
session_start();

	
	$nick = $_SESSION['logowanie'];
	$id = $_GET['id']; 
	$show = mysql_query("SELECT zdjecie FROM zdjecia WHERE id='77'") or die("błąd3");

       if (mysql_num_rows($show != 0))
	   {
		   header("Content-type: image/jpg");
		   $r = mysql_fetch_assoc($show);
		   echo base64_decode($r['zdjecie']);
	   }
	   } 

I wyświetla się pusta strona, już bez tego białego kwadracika a obrazek w bazie jest. Ma wyświetlać JEDEN obrazek o id = 77, jest w bazie bo sprawdziłem.

2
  1. Zastanów się, co robi ta instrukcja: mysql_num_rows($show != 0), biorąc pod uwagę kolejność wykonywania działań.
  2. Nie możesz wysłać więcej niż jednego nagłówka Content-Type. Jeśli chcesz wyświetlić wiele zdjęć na jednej stronie, musisz podejść do problemu inaczej, np. wypluwając kod HTML z tagami img mającymi src ustawione na kod base64 (vide: http://stackoverflow.com/questions/1207190/embedding-base64-images).
  3. A przede wszystkim używaj głowy, a nie programuj przez permutacje!
1

Ale co właściwie chcesz osiągnąć? Wyświetlić jeden obraz czy kilka obrazów? Jeżeli kilka, to nie ustawiaj tego nagłówka, tylko umieść zdjęcia w tagach <img>.

Napisz dokładnie jaki chciałbyś uzyskać efekt.

0

Znaczy obrazek jest przechowywany w bazie danych jako łańcuch znaków. Pobieramy go i mamy stringa. Stringa dekodujemy i wyświetlamy. Nie rozumiem dlaczego mielibyśmy dodawać nagłówek. Nagłówki informują o typie zawartości np html etc. Chciałeś przerzucić proces dekodowania po stronie serwera i wysłać plik jako plik? Zastanawiam się czy to nie obciąży serwera. Wiadomo jedno zapytanie spoko ale takich kilka tysięcy? Tak przerzucamy to na przeglądarkę ale czy w sumie nie lepiej? Dla przeglądarki i pojedynczego komputera takie obliczenia to pikuś. Jakbyś chciał to wysłać w taki sposób to nie można by napisać kodu który wyśle kilka takich paczek? Załóżmy że mamy 11 obrazków. Nie można po prostu napisać kodu który dla każdego obrazka wyśle osobny pakiet z danymi właśnie z nagłówkiem ? Za każdym razem kiedy piszemy kod po stronie serwera domyślnie otrzymujemy nagłówek html dobrze myśle?(Pytanie do starszych lu bardziej zorientowanych kolegów/koleżanek)

Odpisuje tutaj na komentarz ponieważ się nie zmieściłam w limicie znaków.

Też chyba przesył jednego pliku jpg jest dużo większy niż stringa i chyba wtedy powiększamy czas załadowania strony ponieważ czeka na przesył plików które dłużej będą się ściągać niż string. Mam racje?

Z innej strony to czy nie po to właśnie zapisujemy plik w formacie base64 aby strona była bardziej z optymalizowana?

Dywaguje ale to mi pomoże w zrozumieniu tego tematu :)

1

@lightinside: wysyłając nagłówek Content-Type: image/jpg informujesz przeglądarkę, iż to, co zaraz odbierze, będzie obrazem JPEG (identycznie, tak jak gdybyś po prostu wysłał do przeglądarki plik) - w innym wypadku przeglądarka otrzyma Content-Type: text/html i zacznie interpretować stronę jako stronę HTML.

Wysyłanie Content-Type: image/jpg przydaje się na przykład w takiej sytuacji: <img src="/generator-captcha.php"/>.

0

92a13e9349.pngPo zastosowaniu tego kodu

	include("config.php");
session_start();



	$nick = $_SESSION['logowanie'];
	$result = mysql_query("SELECT zdjecie FROM zdjecia WHERE nick='$nick'") or die("błąd3");

       if (mysql_num_rows($result) != 0)
        {
                $row = mysql_fetch_assoc($result);
                echo '<img src='.$row['zdjecie'].'>';
        } 

Wyświetla się obrazek z załącznika.
Czyli coś tam z bazy chce ściągać, lecz jakby nie mógł odnaleść obrazka. Celowo nie dałem echi base63_decode('<img src='.$row['zdjecie'].'>');
gdyż wyświetla Mi wtedy stringi.

0

@Sumekprog: porównaj czym różni się Twój kod z fragmentem widocznym w http://stackoverflow.com/questions/1207190/embedding-base64-images (a dokładniej, czym różni się treść znacznika src).
Najchętniej odesłałbym Cię do dokumentacji, lecz dział to newbie, także powoli :-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1