• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak przechowywać zdjęcia w bazie danych(?) i wyświetlić je na stronie

Object Storage Arubacloud
+2 głosów
10,901 wizyt
pytanie zadane 20 kwietnia 2016 w PHP przez Jakub Suszyński Użytkownik (540 p.)

Cześć, tworzę stronę przypominającą sklep internetowy. Stworzyłem formularz w którym przesyłam do bazy danych kilka informacji i obraz, jednak nie wiem jak ten obraz potem wyświetlić. Gdzieś przeczytałem że nie powinno się trzymać zdjęć w bazie danych, ale nie mogę dotrzeć do przystępnych informacji gdzie w takim razie mogę je przechowywać. Wiersze z bazy danych chcę wyświetlać w formie prostokątnych kafelków, jak na fotce poniżej

<?php // wyswietlanie zawartosci bazy danych
					require_once 'dblogin.php';
					$conn = new mysqli($hn, $un, $pw, $db);
					if ($conn->connect_error) die($conn->connect_error);
						$query = "SELECT * FROM nike";
						$result = $conn->query($query);
					if (!$result) die($conn->error);
						$rows = $result->num_rows;
						for ($j = 0 ; $j < $rows ; ++$j)
						{
							$result->data_seek($j); //znajduje wiersz o numerze j
							$row = $result->fetch_array(MYSQLI_ASSOC);
								
								
								echo "<li>";
								echo 'Nazwa: '    							. $row['nazwa']      		. '<br>' .
										'Wersje kolorystyczne: '    		. $row['wersje']        	. '<br>' .
										'Opis: '    								. $row['opis']        		. '<br>' .
										'Zdjecie: '    							//????????
								echo "</li>";
					
						}
						$result->close();
						$conn->close();
				?>
	

Przeczytałem że do przechowywania zdjęć można użyć pól tekstowych typu blob. Mógłby ktoś mi wytłumaczyć jak to się stosuje? A jeśli nie baza danych - to co? Nie mogą to być żadne gotowe skrypty/rozwiązania bo jest to praca na zaliczenie, więc muszę napisać wszystko do zera. Ponadto nie do końca rozumiem jak mogę w tym przypadku zastosować pętlę foreach, której ponoć powinienem użyć. Dobrze by było gdyby ktoś jeszcze podsunął rozwiązanie jak wyświetlać wiersze tabeli od najnowszego do najstarszego, bo póki co użyta przeze mnie pętla for wyświetla wszystko od góry do dołu.

komentarz 20 kwietnia 2016 przez Jakub Suszyński Użytkownik (540 p.)

Ok, wymyśliłem aby do każdego wiersza przypisać nazwę ścieżki do pliku, a plik przechowywać po prostu w pamięci strony. Jednakże jeśli napiszę to tak: 

	echo "<li>";
								echo 'Nazwa: '    							. $row['nazwa']      		. '<br>' ;
								echo	'Wersje kolorystyczne: '    		. $row['wersje']        	. '<br>' ;
								echo	'Opis: '    								. $row['opis']        		. '<br>' ;
								echo	'<img src="katalog/'.$row['zdjecie'].'" width="100px" height="auto"/>';							//????????
								echo "</li>";

gdzie 'zdjecie' to ścieżka do pliku przypisana do wiersza, to fotka nie wyświetla się mimo że jest w tym samym folderze

komentarz 20 kwietnia 2016 przez Jakub Suszyński Użytkownik (540 p.)
ok, znalazłem błąd

5 odpowiedzi

+3 głosów
odpowiedź 20 kwietnia 2016 przez event15 Szeryf (93,790 p.)
Podstawowa zasada to ZAKAZ ŁADOWANIA DANYCH BINARNYCH DO BAZY! To oznacza, że nie ma miejsca w bazie danych na przechowywanie zdjęć! Od takich plików są katalogi - w bardziej zaawansowanych apkach thumbor
+2 głosów
odpowiedź 20 kwietnia 2016 przez Artur Wraga Obywatel (1,870 p.)
A nie możesz np w bazie danych trzymać samej nazwy do pliku ? Ewentualnie katalogu ? Dlaczego nie można tak ?
komentarz 20 kwietnia 2016 przez Jakub Suszyński Użytkownik (540 p.)
Chodzi o to, że na stronie mam panel administratora, w którym dodaję nowe pozycje. Jest tam formularz z którego pobieram zdjęcie i kilka informacji. Chcę, aby uploadowane zdjęcie od razu było przypisane do informacji podanych przez admina
komentarz 20 kwietnia 2016 przez Fenix Nałogowiec (26,750 p.)
No i jeśli będziesz trzymał ścieżkę do zdjęcia gdzie je zapisujesz w raz z rozszerzeniem pliku to będzie ok.
0 głosów
odpowiedź 20 kwietnia 2016 przez GaCeL Dyskutant (7,500 p.)

Ja zrobiłem to tak że zapisuje plik z nazwą wygenerowaną przez funkcję "uniqid();" w folderze images i zapisuje do bazy nazwe pliku tylko + rozszerzenie.

0 głosów
odpowiedź 20 kwietnia 2016 przez Mateusz11 Pasjonat (22,910 p.)

Nie pętla for tylko foreach...

komentarz 20 kwietnia 2016 przez Jakub Suszyński Użytkownik (540 p.)
dlaczego for się nie nadaje? Nie potrafię użyć foreach - nie rozumiem jak to działa.
1
komentarz 20 kwietnia 2016 przez Jakub Suszyński Użytkownik (540 p.)
$tablica = "SELECT * FROM nike ";
						$result = $conn->query($tablica);	
						
						foreach($result as $item)
						{
							echo "<li>";
							echo $item['nazwa'].'<br>';
							echo $item['wersje'].'<br>';
							echo $item['opis'].'<br>';
							echo '<img src="img/'.$item['zdjecie'].'" width="100px" height="auto" />'.'<br><br>';
							echo "</li>";
						}

napisałem coś takiego - teoretycznie działa, ale czy jest to napisane zgodnie z przyjętym zwyczajem?

komentarz 20 kwietnia 2016 przez Boshi VIP (100,240 p.)
nie jest.
komentarz 21 kwietnia 2016 przez Jakub Suszyński Użytkownik (540 p.)
To świetnie. Co jest nie tak?
0 głosów
odpowiedź 21 kwietnia 2016 przez Jakub Suszyński Użytkownik (540 p.)

napisałem coś takiego: 

<?php // wyswietlanie zawartosci bazy danych
					
					require_once 'dblogin.php';
					$conn = new mysqli($hn, $un, $pw, $db);
					
						if ($conn->connect_error) die($conn->connect_error);
							$wybierz = "SELECT * FROM nike";
							$result = $conn->query($wybierz);
				
						if (!$result) die($conn->error);
					
							foreach($result as $pozycja)
							{
								echo "<li>";
										
									echo '<div class="tekstwkafelku">';	
										echo $pozycja['nazwa'].'<br>';
										echo $pozycja['wersje'].'<br>';
										echo $pozycja['opis'].'<br>';
								echo '</div>';	
										
									echo '<div class="zdjeciewkafelku">';
										echo '<img src="img/'.$pozycja['zdjecie'].'" width="330px" height="auto" />'.'<br><br>';
									echo '</div>';
									
								echo "</li>";
							}
						
						$result->close();
						$conn->close();
				?>

Jak zrobić, aby foreach wyświetlało zawartość tabeli od końca? Chcę aby najnowsze wpisy były na początku.

1
komentarz 21 kwietnia 2016 przez efiku Szeryf (75,160 p.)

1. PDO,
2. Chcąc od najnowszych: SQL,  "SELECT id,name,it.. FROM nike ORDER BY nike.id DESC"
3. Mateusz11 PRZESTAŃ W KOŃCU PIER**IĆ GŁUPOTY! "SELECT * FROM nike DESC LIMIT 0.5", żałosne !!
4. Użyj twiga i nie mieszaj PHP z HTML bo będziesz miał sieczkę taką jak wyżej. 
5. Stosuj angielskie nazwy zmiennych. (PSR-1|2) 
6. Skoro Result jest kolekcją encji z bazy, to $result as $entity ( Weź kolejno z kolekcji jedną encję i przekaż ją do pętli itd..) 

Podobne pytania

0 głosów
2 odpowiedzi 552 wizyt
0 głosów
1 odpowiedź 391 wizyt
0 głosów
0 odpowiedzi 700 wizyt
pytanie zadane 19 lutego 2018 w PHP przez mi-20 Stary wyjadacz (13,190 p.)

92,568 zapytań

141,420 odpowiedzi

319,624 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...