PHP i SQL - wyświetlanie obrazków

0

Cześć.
Potrzebuję pomocy przy takim problemie: próbuje napisać coś w PHP co będzie wyświetlało obrazki zapisane w bazie danych jako typ BFile. Obrazki są zapisane u mnie na dysku, a chcę żeby były wyświetlane tylko te, które spełniają warunki z polecenia select. Tzn. wywołuje polecenie select i wynikiem jest np. id=1 i ma wyświetlić obrazek o id=1. Czy da się to jakoś zrobić żeby pobierało adres do pliku z pola BFile? Jeśli tak to prosiłabym o jakąś wskazówkę. Jeśli nie to jak inaczej to można zrobić? Mam jeszcze kolumnę typu BLOB z tymi samymi obrazkami...

Z góry dzięki za wszelką pomoc :)

0

w bazie trzymasz ścieżki, obrazki na serwerze.

0

Dzięki za wytłumaczenie :/ aczkolwiek nic nie wnosi do problemu...

0

Ale w czym ty problem widzisz? pobierasz selectem wybrane ściezki i budujesz obrazek w pętli przez

<img src="obrazek1" alt='ble ble'>

gdzie obrazek1 to ściezka z bazy?

0

Tak próbowałam ale w bazie w BFILE mam coś takiego

 'BD','abc1.jpg'

Jak połączyć ścieżke żeby była cała? np. 'E:\bd\abc.jpg' Tutaj widzę problem....

0

Sorry, nie bardzo rozumiem twój problem. W bazie obrazki trzymasz jako zwykły varchar (lub odpowiednik w innych bazach jak mysql) w postaci tekstu, np abc1.jpg. Kolejno pobierasz wybrane ścieżki i budujesz obrazki przez znacznik img. Dokładny folder określasz ręcznie, lub przez DIR (bezpieczniejsze)

0

No właśnie wygląda to podobnie, z tym ze pole ze sciezka do obrazka jest typu BFile ale reszta się zgadza. Nienwiem jak połączyć ścieżkę (czyli ten DIR i nazwę pliku) żeby móc wyświetlić to zdjęcie. Byc może nie trzeba łączyć ale to jedyny pomysł na jaki wpadłam. Niestety php uczę się od hmm.. Tygodnia 😒

1
id file_name file_path file_public_path
1 84bc1a94241c4e1eb9efd97f1e2f2ae7 /home/klatosinski/www/strona/public/files/ /files/
2 84bc1a94241c4e1eb9efd97f1e2f2ae7 /home/klatosinski/www/strona/public/files/ /files/

Przy zapisywaniu plików do bazy ustawiasz ścieżki. Możesz je równie dobrze trzymać też w jakimś configu i później w widoku (czyli tam gdzie masz html) łączyć, ale chyba tak jest lepiej (chociaż nie jestem ekspertem).

SELECT CONCAT(file_public_path, file_name) as src FROM files
$db = new PDO('mysql:......;charset=utf8', 'username', 'password'); // poczytaj co tam dokładnie ma być
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // domyślnie PDO nie pokaże Ci błędów tylko po cichu sobie pójdzie dalej, my ustawiamy, żeby walił wyjątki (czyli żebyś się o tym dowiedziała)

$files = $db->query($sql, PDO::FETCH_ASSOC); // dodatkowy parametr mówi o tym, że pobierze nam wartości w tablicy asocjacyjnej array( 'src' => '....' )
<?php foreach($files as $src) :?>
    <img src="<?= $src ?>" />
<?php endif;?>

Uważaj na sql injection! Zawsze jeżeli chcesz użyc w zapytaniu jakiś wartości, to korzystaj z prepared statement bo inaczej zrobisz sobie krzywdę. Co to jest SQL Injection

$stmt = $db->prepare("INSERT INTO files (file_name, file_path, file_public_path) VALUES (:file_name, :file_path, :file_public_path)");

$stmt->bindParam(':file_name', '84bc1a94241c4e1eb9efd97f1e2f2ae7');
$stmt->bindParam(':file_path', '/home/klatosinski/www/strona/public/files/');
$stmt->bindParam(':file_public_path', '/files/');

$stmt->execute();
0

Dzieki wielkie. Dokładnie opisane z komentarzami. Czy działa to jeszcze nie wiem bo niestety nie mam dostępu do komputera ale jak tylko wrócę do domu sprawdzę. Wiem ze o to mi chodziło takze powinno byc ok 😉 tak czy inaczej dziękuję bardzo za pomoc 😉

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