• 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

VPS Starter Arubacloud
+2 głosów
10,819 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 533 wizyt
0 głosów
1 odpowiedź 379 wizyt
0 głosów
0 odpowiedzi 693 wizyt
pytanie zadane 19 lutego 2018 w PHP przez mi-20 Stary wyjadacz (13,190 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...