Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]jak wyświetlić zdjęcie z pola BLOB
Forum PHP.pl > Forum > Przedszkole
Paweltm
Tak jak w temacie.
Mam zdjęcie w bazie mysql w polu BLOB. Chciałbym się dowiedzieć jak mogę go wywołać z bazy i wyświetlić w formie obrazka.
wywołując plik
  1. ".$row['zdjecie1']."
wyświetlają mi się krzaczki
thek
Bo tak zdjęcie jest zapisane w bazie smile.gif Musisz poinformować stronę, że ma do czynienia ze zdjęciem a nie tekstem. Poczytaj o header.
Paweltm
wpisując to w <img src= > również były krzaczki
thek
Nie możesz tak zrobić! Zobacz na przykłady w manualu dla header! Najlepiej utwórz osobny skrypt php, który wyświetla dane z bazy. przykładowo masz zdjęcie w bazie pod rekordem o id=5
wywołujesz więc zdjęcie tak:
  1. <img src="obraz.php?id=5">

zaś plik obraz.php ma wygląd:
  1. <?php
  2. //tu walidacja id
  3. //ustawienie nagłówków za pomocą header
  4. //tu pobranie z bazy $row['zdjecie1'] i wyświetlenie
  5. ?>
Paweltm
nie bardzo rozumiem o co chodzi z tym ustawieniem header...

zrobiłem tak :

  1. <img src='obraz.php?id=".$row['id_product']."'>


i obraz.php

  1. $id = $_GET['id'];
  2.  
  3. $query = mysql_query("SELECT * FROM product WHERE id_product = '$id'");
  4. while($row = mysql_fetch_array($query)) {
  5. echo "$row['zdjecie1']";
  6. }

wyświetla mi się obrazek mówiący o niezaładowaniu obrazka a w bazie w tym polu jest [BLOB - 32,1KB]
wookieb
1) Nie zapisujemy zawartości zdjęcia w bazie tylko ścieżke do pliku
2) To co masz teraz jest bardzo niewydajne
3)
  1. header('Content-type: image/jpeg'); // o ile to jest JPG. Dla innych formatów są analogiczne "mimetype". Wystarczy poszukać.
  2. echo $row['zdjecie1'];
Paweltm
dodawanie obrazka :
  1. $plik1_tmp = $_FILES['zdjecie1']['tmp_name'];
  2. $plik1_nazwa = $_FILES['zdjecie1']['name'];
  3. $plik1_rozmiar = $_FILES['zdjecie1']['size'];
  4. $plik1_typ = $_FILES['zdjecie1']['type'];
  5.  
  6.  
  7.  
  8. $sp1 = explode(".",$plik1_nazwa);
  9.  
  10.  
  11. $obraz1 = addslashes(fread(fopen($plik1_tmp, "r"), $plik1_rozmiar));
  12.  
  13.  
  14. if(($sp1[1] == "jpg" or $sp1[1] == "gif" or $sp1[1] == "bmp"
  15. or $sp1[1] == "png") and (is_uploaded_file($plik1_tmp)))
  16.  
  17. {
  18. move_uploaded_file($plik1_tmp, "upload/$plik1_nazwa");
  19. echo "Plik: <strong>$plik1_nazwa</strong> został przesłany na serwer!";
  20. }
  21. else
  22. {
  23. echo "Nie udało się wysłać pliku <strong>$plik1_nazwa</strong> na
  24. serwer Format lub rozmiar nie poprawny";
  25. }
  26.  
  27.  
  28. $zapytanie="INSERT INTO product (nazwa_kat, nazwa, opis, ilosc, cena, param, zdjecie1) VALUES('$nazwa_kat','$nazwa','$opis','$ilosc','$cena','$param','$obraz1')";
  29.  
  30. mysql_query($zapytanie) or die("Wystapil blad" );


W bazie są wpisy jednak w kat upload nie ma nic.
wookieb
Tzn, że masz coś skaszanione. Włacz pełne raportowanie błędów ( Temat: Jak poprawnie zadac pytanie ) i sprawdź dokładnie skrypt.
Paweltm
mój błąd. Wysyła pliki prawidłowo.
Jednak katalog niżej.

Jednak i tak ich nie wyświetla...
thek
Zabrakło w Twoim skrypcie header, czyli to co dodał Wookieb. Swoją drogą zabezpieczaj skrypt choć trochę... Zrobi Ci ktoś w $_GET['id'] sql_injection i masz po bazie...

W innych punktach też Wookieb ma rację. Przechowywanie obrazków w bazie jest bardzo niewydajne. Tam powinna być tylko ścieżka do pliku w strukturze Twojego serwisu lub sama nazwa pliku, gdy ścieżka jest przez skrypt wpisana na sztywno i stała lub prosta do wygenerowania przez niego z innych danych.
wookieb
Posprawdzaj wszystkie ścieżki getcwd i upewnij się, że na pewno nic w tym katalogu nie ma. Poza tym popraw tabele i wstawiaj ścieżki do plików.
Paweltm
Cytat(thek @ 19.01.2011, 11:38:13 ) *
Zabrakło w Twoim skrypcie header, czyli to co dodał Wookieb. Swoją drogą zabezpieczaj skrypt choć trochę... Zrobi Ci ktoś w $_GET['id'] sql_injection i masz po bazie...

W innych punktach też Wookieb ma rację. Przechowywanie obrazków w bazie jest bardzo niewydajne. Tam powinna być tylko ścieżka do pliku w strukturze Twojego serwisu lub sama nazwa pliku, gdy ścieżka jest przez skrypt wpisana na sztywno i stała lub prosta do wygenerowania przez niego z innych danych.



dodałem ten header jednak dalej nie wyświetla. Skrypt jest robiony na bardzo szybko i na odwal się smile.gif i ma działać właśćiwie tylko kilka dni:)
plik w bazie jest, jest też na serwerze jednak nie wyświetla się cały czas...
http://www.pawelkwapisz.trh.com.pl/sklep/p....php?produkt=sd
wookieb
ale ty już nie masz robic adresu do zdjęcia w takiej formie jak teraz tylko
Kod
      <img src="/upload/nazwa_obrazka.jpg" alt="">


POZA TYM http://www.pawelkwapisz.trh.com.pl/sklep/obraz.php?id=1
No ludzie, sprawdźcie co robicie. Nikt was za rączkę cały czas nie będzie prowadził...
Paweltm
tak jest zrobione:

  1. <img src='obraz.php?id=".$row['id_product']."'>


i obraz.php

  1. $id = $_GET['id'];
  2.  
  3. $query = mysql_query("SELECT * FROM product WHERE id_product = '$id'");
  4. header('Content-type: image/jpeg');
  5.  
  6. while($row = mysql_fetch_array($query)) {
  7.  
  8. echo "$row['zdjecie1']";



A w bazie przy id=1
1 pierwsza sd sadasdasdasd 22 213 232 [BLOB - 32,1KB]


Wywala się w linii :

echo "$row['zdjecie1']";

jak powinno wyglądać to wyświetlenie?
adrianozo
echo $row['zdjecie1'];

Nie wystarczy tak?

Skoro Ci sypie błędem to może powiesz jakim?
robzio
Witam
Może ktoś będzie wiedział
dlaczego się tak dzieje??




<H1>Baza Częsci</H1>

<TABLE border="1">

<?php

$nazwabazydanych = "foto";

$link = mysqli_connect("localhost", "root", "")
or die("BَD: nie można się poł&plusmn;czyć z serverem mySQL");

$db=mysqli_select_db($link,$nazwabazydanych)
or die("BَD: wybór bazy danych");

$result = mysqli_query($link,'SELECT id, tytul FROM obrazy');
while ($wiersz = mysqli_fetch_array($result)) {
?>

<TR>
<TD align="center">
<A href="obraz.php?nr=<?php echo $wiersz['id']; ?>">
<IMG src="miniobraz.php?nr=<?php echo $wiersz['id']; ?>"
alt="<?php echo $wiersz['tytul']; ?>"></A>

</TD>
<TD><?php echo $wiersz['tytul']; ?></TD>
</TR>

<?php
}//while

mysqli_close($link);
?>

</TABLE>
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.