Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Pobranie zdjęć, foto, obrazów z bazy danych
Forum PHP.pl > Forum > Przedszkole
8_pasazer_NOSTROMO
Witam

Panowie powiedzcie jak pobrać i wyświetlić pliki jpg (zdjęcia np.) na nowej stronie, jedno pod drugim. Mam bazę danych gdzie ludzie wrzucają różne fotki. Do każdego id może być max 6 zdjęć w kolumnach foto1,foto2,foto3,foto4,foto5,foto6. Typ - MEDIUMBLOB.

Gdy mam takie coś :
  1. <?php
  2. $_id = $_GET['id'];
  3. header("Content-type: image/jpg;");
  4. include "../../baza.php";
  5.  
  6. $wynik = mysql_query("SELECT foto1 FROM wstep_wp WHERE id='$_id'");
  7. $foto = mysql_fetch_assoc($wynik);
  8. print base64_decode($foto['foto1']);
  9.  
  10. $wynik = mysql_query("SELECT foto2 FROM wstep_wp WHERE id='$_id'");
  11. $foto = mysql_fetch_assoc($wynik);
  12. print base64_decode($foto['foto2']);
  13.  
  14. ?>


Problem polega na tym, że zawsze wyświetla ten który jest jako pierwszy pobrany (w tym przykładzie foto1). Co zrobić by pokazywał pod foto1 również foto2 i tak aż do foto6.

Chodzi mi dokładnie o samo wyświetlenie obrazków na nowej stronie jeden po drugim. ID maja takie samo.
Turson
Niepotrzebnie wykonujesz każde polecenie osobno, możesz pobrać wszystkie dane w jednym zapytaniu
8_pasazer_NOSTROMO
Próbowałem i tak:
  1. $wynik = mysql_query("SELECT foto1,foto2 FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto1']);
  4. print base64_decode($foto['foto2']);



Nadal pokazywało tylko pierwszy. Tak jakby na stronie można było wyświetlić tylko 1 plik. Dziwne to. Kto pomoże.
wookieb
Cytat(8_pasazer_NOSTROMO @ 7.04.2011, 14:53:06 ) *
Tak jakby na stronie można było wyświetlić tylko 1 plik.

No bo to tak właśnie działa.

Masz 2 opcje:
1) Łączyć zdjęcia w jedno za pomocą GD albo Imagick (nie polecam)
2)
  1. <img src="zdjecie.php?id=id&numer_zdjecia=1" />
  2. <img src="zdjecie.php?id=id&numer_zdjecia=2" />

itd.
8_pasazer_NOSTROMO
Ma ktoś jeszcze jakiś pomysł. GD nie jest obsługiwane na moim serwerze a nie jestem zarządcą jego. Drugi sposób jakoś też nie działa, chyba że źle coś robię.
kadlub
a nie możesz tego wyświetlić pętlą while było sporo postów na ten temat

albo tak jak pobierasz tylko jeden rekord
  1. $wynik = mysql_query("SELECT * FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto1']);
  4. print base64_decode($foto['foto2']);
  5. print base64_decode($foto['foto3']);

i tak dalej
8_pasazer_NOSTROMO
W pętli też wyświetla pierwszy a drugiego nie. Jakby pętla stawała zaraz po pierwszym.
ToAr
  1. $wynik = mysql_query("SELECT * FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_row($wynik);
  3. print base64_decode($foto['foto1']);
  4. print base64_decode($foto['foto2']);


pokaż też strukturę tej tabeli
8_pasazer_NOSTROMO
  1. $wynik = mysql_query("SELECT * FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_row($wynik);
  3. print base64_decode($foto['foto1']);
  4. print base64_decode($foto['foto2']);


Obrazek zawiera błędy. Gdy zamiast $foto = mysql_fetch_row($wynik); damy $foto = mysql_fetch_array($wynik); lub $foto = mysql_fetch_assoc($wynik); to pokazuje tylko pierwszy. Po pierwszym od razu skrypt kończy bieg.

Struktura tabeli
Pole Typ
id int 3
dane text
data date
analiza char 3
foto1 mediumblob
foto2 mediumblob
foto3 mediumblob
foto4 mediumblob
foto5 mediumblob
foto6 mediumblob


Wszystko działa fajnie, wysyłanie do bazy, odczyt itp. Ale pokazuje zawsze pierwszy przy próbie ich wywołania. Chciałbym pod 1 linkiem wypisać wszystkie foty dla danego ID, nie tworzyć 6 linków do każdej foty osobno.
ToAr
a wyświetlanie błędów masz włączone?

  1. ini_set('display_errors', '1');
8_pasazer_NOSTROMO
Problem w tym, że działa ale tylko jeden.
Tak działa :
  1. $wynik = mysql_query("SELECT foto1,foto2 FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto1']);


Tak działa, ale pokazuje pierwszy tylko

  1. $wynik = mysql_query("SELECT foto1,foto2 FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto1']);
  4. print base64_decode($foto['foto2']);


Pętlowanie nic nie daje, nadal jeden stoi twardo niczym mina Mourinho przed Grand Derby.
ToAr
a tak działa?

  1. $wynik = mysql_query("SELECT foto1,foto2 FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto2']);


czy masz dobrze zakodowane te obrazki?

i czy w skrypcie masz włączone wyświetlanie błędów?
8_pasazer_NOSTROMO
  1. $wynik = mysql_query("SELECT foto1,foto2 FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto2']);


Tak działa, wyświetla fotke z drugiego pola. Wyświetlanie błędów jest włączone.

  1. $wynik = mysql_query("SELECT foto1,foto2,foto3,foto4,foto5,foto6 FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto6']);


Tak też działa. Problem jest wtedy gdy chce wyświetlic wiecej niż jedną fotke. Wtedy zawsze pokazuje tylko tą, która jest wypisana jako pierwsza w kodzie. Jeśli bedzie:
  1. $wynik = mysql_query("SELECT foto1,foto2,foto3,foto4,foto5,foto6 FROM wstep_wp WHERE id='$_id'");
  2. $foto = mysql_fetch_assoc($wynik);
  3. print base64_decode($foto['foto6']);
  4. print base64_decode($foto['foto5']);
  5. print base64_decode($foto['foto4']);
  6. print base64_decode($foto['foto3']);
  7. print base64_decode($foto['foto2']);
  8. print base64_decode($foto['foto1']);


To wyświetla foto6 a innych nie widzi. Błędów żadnych chyba nie ma. Bo wypisując każdą fotkę w osobnym linku to działają wszystkie. 6 fotek = 6 linków. W każdym linku jedna fotka. Wtedy działa. Chciałbym w jednym linku wypisać 6 fotek (dla jednego rozboju - 6 podejrzanych, jeden pod drugim)
kadlub
to np masz w jakimś tam pliku zdjecie.php
  1. $img=$_GET['nr'];
  2. $wynik = mysql_query("SELECT * FROM wstep_wp WHERE id='$_id'");
  3. $foto = mysql_fetch_assoc($wynik);
  4. print base64_decode($foto[$img]);


a w innym pliku np pokarz.php
zrób
<img src="zdjecie.php?nr=foto1" />
<img src="zdjecie.php?nr=foto2" />
<img src="zdjecie.php?nr=foto3" />
wookieb
Cytat(8_pasazer_NOSTROMO @ 8.04.2011, 12:32:42 ) *
W każdym linku jedna fotka. Wtedy działa. Chciałbym w jednym linku wypisać 6 fotek (dla jednego rozboju - 6 podejrzanych, jeden pod drugim)

Ile razy trzeba Ci powtarzać, że musisz je złączyć w GD albo IMagicku ?
Jak nie masz do nich dostępu to nic nie zrobisz. Koniec kropka.
8_pasazer_NOSTROMO
@ wookieb

Liczyłem, że może ktoś potrafi, no ale skoro jesteś pewien w 100% to poddaje się niczym Ronaldo w Grand Derby (jesień 2011).
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.