Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wydobywanie zdjec [BLOB]
Forum PHP.pl > Forum > PHP
źrebak
Cala baza
danych dotyczy ofert nieruchomosci. Chcialbym, zeby po kliknieciu na
link przy danej ofercie pt. "Zobacz zdjecia" otwierala sie mala
galeria ze zdjeciami. I tak, przesylam jako parametr sygnature danej
oferty do pliku wykonywujacego .php (np.foto.php) i tam konstruuje
zapytanie do bazy o wyswietlenie mi wszystkich rekordow dla ktorych
sygnatura="X". Baza bez problemow realizuje moje zapytanie, wskutek
czego dostaje taki mniej wiecej obraz:

SYGNATURA | UNIKAT | FOTO |
-------------------------------------
PSK001 | p0000000001 | BLOB |
PSK001 | p0000000002 | BLOB |
itd....


W jaki sposob mam stworzyc nastepne zapytanie stosujac odpowiednie
naglowki tak by moc wyswietlic interesujaca mnie mala galeryjke
zdjec dotyczacych w/w oferty o zadanej sygnaturze?

SYGNATURA - to nr oferty
UNIKAT - to numer/oznaczenie zdjecia
FOTO - dane binarne
Nosfi
Jeśli dobrze zrozumiałem ...

w bazie zapisywane są rekordy dotyczące każdej oferty, rekordów jest tyle ile zdjęć ... (jeśli źle rozumuje to poproszę więcej szczegółów)

i teraz ... po 1. w końcu ta baza będzie ciężka ... nie lepiej zapisać informacje o zdjęciach w jednym rekordzie w postaci np. BLOB;BLOB;BLOB ... ?

następnie wyciągając jeden rekord o danej unikatowej sygnaturze dla danej oferty uzyskasz wszystko co potrzebujesz ...

przykład:

  1. <?php
  2.  
  3. $q = &#092;"SELECT fotki FROM oferty WHERE id = 'SYGNATURA'\";
  4. $r = mysql_db_query($baza,$q);
  5. $row = mysql_fetch_array($r);
  6.  
  7. $fotki = split(&#092;";\",$row[\"fotki\"]);
  8.  
  9. for($i=0; $i<=sizeof($fotki); $i++){
  10. echo '<img src=\"' . $fotki[$i] . '\"><br>';
  11. }
  12.  
  13. ?>


natomiast biorąc twój sposób (jeśli dobrze zrozumiałem biggrin.gif ):

  1. <?php
  2.  
  3. $q = &#092;"SELECT fotki FROM oferty WHERE id = 'SYGNATURA'\";
  4. $r = mysql_db_query($baza,$q);
  5.  
  6. $tab_foto = array();
  7. while($row = mysql_fetch_array($r)){
  8. $tab_foto[] = $row[&#092;"fotki\"];
  9. }
  10.  
  11. for($i=0; $i<=sizeof($tab_foto); $i++){
  12. echo '<img src=\"' . $tab_foto[$i] . '\"><br>';
  13. }
  14.  
  15. ?>

mam nadzieję, że jakoś pomogłem ... a jak nie to pomyślimy dalej ...

ciao
źrebak
No wlasnie o to chodzi ze nie ja tworzylem ta baze i nie mam mozliwosci w ingenrencje w jej strukture, musze ja polubic taka jaka ona jest smile.gif. Zrealizowalem to tak jak napisales, czyli: [foto.php]
  1. <?php
  2.  
  3.  
  4. header(&#092;"Content-type: image/JPEG\"); 
  5.  
  6. $q = &#092;"SELECT foto FROM oferty WHERE id = 'PSK00117'\";
  7. $r = mysql_db_query($baza,$q);
  8.  
  9. $tab_foto = array();
  10. while($row = mysql_fetch_array($r)){
  11. $tab_foto[] = $row[&#092;"foto\"];
  12. }
  13.  
  14. for($i=0; $i<=sizeof($tab_foto); $i++){
  15. echo '<img src=\"' . $tab_foto[$i] . '\"><br>';
  16. }
  17. ?>


wynikiem dzialania tych instrukcji, jest:

"Obrazek "http://bla-bla.pl/foto.php" nie może zostać wyświetlony, ponieważ zawiera błędy."
Ociu
Jeśli dobrze zrozumiałem, to chcesz przechowywać zdjęcia w bazie danych. Nie na sensu tego robić, gdyż skrypt będzie się długo wykonywał. Lepiej zdjęcia wrzucać na dysk, a w bazie przechowywać tylko dane o nim.

pozdrawiam
Nosfi
Zgadzam się z przedmówcą biggrin.gif

Biorąc na dodatek pod uwagę że każde zdjęcie zajmuje osobny rekord ... męczarnia smile.gif

Powodzenia
źrebak
ale to nie ja jestem autorem tej bazy. Zdjecia byly w niej przechowywane od zawsze - i tak juz zostatnie! Ja musze je tylko wyswietlic.
NoiseMc
Jeżeli obrazki są przechowywane w bazie to napewno są zakodowane base64 przy użyciu funkcji (base64_encode()). Proponuję użyć base64_decode() czyli:

  1. <?php
  2.  
  3. header ( 'Content-type: image/jpeg' ); 
  4.  
  5. $q = &#092;"SELECT foto FROM oferty WHERE id = 'PSK00117'\";
  6. $r = mysql_db_query ( $baza, $q );
  7.  
  8. $row = mysql_fetch_array ( $r );
  9.  
  10. echo base64_decode ( $row['foto'] );
  11.  
  12. ?>
źrebak
niestety caly czas dostaje info ze obrazek nie moze zostac wyswietlony bo zwiera bledy sad.gif
SongoQ
Wrzuc zrzut SQLa tabeli i ewntualnie 1 rekord tego obrazka.
źrebak
Ponizej zamieszczam PRTSc tabeli ZDJECIA

Print screen tabeli
NoiseMc
Podeślij może też print screena z wynikiem działania skryptu:

  1. <?php
  2.  
  3. // Usun wysylanie naglowka zeby do przegladarki poszaedl tekst a nie image
  4. // header ( 'Content-type: image/jpeg' );
  5.  
  6. $q = &#092;"SELECT foto FROM oferty WHERE id = 'PSK00117'\";
  7. $r = mysql_db_query ( $baza, $q );
  8.  
  9. $row = mysql_fetch_array ( $r );
  10.  
  11. echo '----------------------------------------------------------';
  12. echo $row['foto'];
  13. echo '----------------------------------------------------------';
  14. echo base64_decode ( $row['foto'] );
  15. echo '----------------------------------------------------------';
  16.  
  17. ?>
źrebak
  1. <?php
  2. $q = &#092;"SELECT foto FROM zdjecia WHERE unikat = '4KT00000000000000007'\";
  3. $r = mysql_db_query ( $baza, $q );
  4.  
  5. $row = mysql_fetch_array ( $r );
  6.  
  7. echo '----------------------------------------------------------';
  8. echo $row['foto'];
  9. echo '----------------------------------------------------------';
  10. echo base64_decode ( $row['foto'] );
  11. echo '----------------------------------------------------------';
  12.  
  13. ?>


Wynikiem dzialania powyzszego skryptu jest:
"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in (..) on line 16"
nospor
Wywala ci błąd bo tutaj ($r = mysql_db_query ( $baza, $q )winksmiley.jpg masz coś źle.
CZy zmienna $baza jest dobra? Bo zapytanie $q wydaje się dobre.
źrebak
  1. <?
  2.  
  3.  
  4.  
  5.  
  6. $query = &#092;"SELECT foto FROM zdjecia WHERE unikat = '4KT00000000000000007'\";
  7.  
  8. $result = mysql_query($sql);
  9.  
  10. $row = mysql_fetch_array ($result);
  11.  
  12. echo '----------------------------------------------------------';
  13. echo $row['foto'];
  14. echo '----------------------------------------------------------';
  15. echo base64_decode ( $row['foto'] );
  16. echo '----------------------------------------------------------';
  17.  
  18. ?>


dalej to samo..

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in line 17
SongoQ
@źrebak Mam nadzieje ze haslo ktore podales w kodzie jest niepoprawne, bo jesli tak to szybko zmien zeby ktos nie wykorzystal tego.
nospor
Podoba mi się ten fragment:
Cytat
$query = "SELECT foto FROM zdjecia WHERE unikat = '4KT00000000000000007'";

$result = mysql_query($sql);

kolega zapisuje zapytanie do zmiennej $query, a potem odwołuje się do zmiennej $sql. Dobre tongue.gif Magiczne przeniesienie wartości
źrebak
zgadza sie, juz poprawilem. Dobrze jak ktos czasem potrafi spojrzec ze swojej perspektywy, pewnie ma tu tez swoje znaczenie doswiadczenie - ktorego niestety mi brak. No ale nic, staram sie brnąć dalej..

Wiec, wynikiem wykonania powyzszego (poprawionego) skryptu jest:
hmm, no chyba nie bede tu tego wklejal, ogolnie same krzaki! Po dopisaniu do skryptu naglowka
  1. <?php
  2. header ( 'Content-type: image/jpeg' );
  3. ?>

Otrzymuje informacje ze nie mozna wyswietlic tego pliku, blad.
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.