• 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

+2 głosów
4,123 wizyt
pytanie zadane 20 kwietnia 2016 w PHP, Symfony, Zend 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 (94,730 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,890 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,950 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,570 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,720 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,720 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 Maniak (74,980 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
1 odpowiedź 152 wizyt
0 głosów
0 odpowiedzi 258 wizyt
pytanie zadane 19 lutego 2018 w PHP, Symfony, Zend przez mi-20 Stary wyjadacz (10,260 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

64,244 zapytań

110,637 odpowiedzi

231,944 komentarzy

46,993 pasjonatów

Przeglądających: 289
Pasjonatów: 16 Gości: 273

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...