Przekazanie do bazy informacji o plikach img |
Przekazanie do bazy informacji o plikach img |
13.01.2021, 12:22:44
Post
#1
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 10.09.2020 Ostrzeżenie: (0%) |
Witam.
Mam prośbę o podpowiedź jak poradzić sobie z takim zagadnieniem, mianowicie: Jest formularz, którym użytkownik przekazuje dane do bazy: Autor, Nazwa, Opis. Ale jeszcze do katalogu uploaduje zdjęcia poprzez <input name="upload[]" type="file" multiple> W bazie danych mam oczywiście kolumny tak nazwane. Wpisuję/pobieram i jest OK. I teraz pytanie/problem polega na tym, jak zapisać informację o obrazach w bazie ? Co prawda mam tablicę upload[] przesłaną z inputa... ale informacji ile ktoś prześle obrazków nigdy nie będę miał... Pomyślałem, żeby zrobić kolumnę img i tam wpisać nazwy plików przesłanych przez użytkownika? Ale co? dodawać np średniki po nazwach w później jakimś wyrażeniem regularnym pobierać po średnikach.. bo docelowo chciałbym, żeby to były osobne <img src="/katalog/$zmienna"> nie wiem czy dobrze kombinuje |
|
|
13.01.2021, 12:41:49
Post
#2
|
|
Grupa: Zarejestrowani Postów: 531 Pomógł: 55 Dołączył: 3.01.2016 Skąd: Łowicz Ostrzeżenie: (0%) |
jeśli masz pole
to robisz foreach po $images i pobierasz sobie nazwy plików, zapisujesz każdy plik, modyfikujesz czy co tam chcesz w bazie danych możesz to przechowywać jako zserializowna tablicę wiec zawsze będziesz wiedział ile i jakie sa pliki Tylko nie zapisuje się na serwerze plików w oryginalnej nazwie usera, tylko musisz nadać im swoje unikalne nazwy i te nazwy też zapisać w tej swojej tablicy Do unikalnej nazwy pliku możesz zastosować sobie np:
Ten post edytował LowiczakPL 13.01.2021, 12:46:47 -------------------- Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
|
|
|
13.01.2021, 18:11:43
Post
#3
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 10.09.2020 Ostrzeżenie: (0%) |
Dziękuję za podpowiedź. Raczej wszystko działa zgodnie z oczekiwaniem.
Tylko teraz jak by tu zapisać informację o przesłanych plikach ? |
|
|
14.01.2021, 09:15:04
Post
#4
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
|
|
|
14.01.2021, 10:53:00
Post
#5
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 10.09.2020 Ostrzeżenie: (0%) |
hmm.. zobacz:
przesyłam inputem np. 3 pliki. i nadaję im nowe nazwy $newname = $prefix . time() . $ext; otrzymuję tym samym zmienną echo $newname;, która wygląda tak: ae9840681610617145.png828f5f2f1610617145.png1e4c70e31610617145.png no i mam nazwy tych plików. Kombinuję teraz tak: zapisuję tą zmienną do bazy CODE $save = "UPDATE `partner` SET `img` = '$newname' WHERE `partner`.`nk` = '$nk'"; mysqli_query($db, $save); hmmm i co dalej ? Dalej trzeba by zrobić pętlę, która "rozbierze" to coś ae9840681610617145.png828f5f2f1610617145.png1e4c70e31610617145.png na takie coś <img src="www.costam.pl/ae9840681610617145.png"/> <img src="www.costam.pl/828f5f2f1610617145.png"/> <img src="www.costam.pl/1e4c70e31610617145.png"/> No i tutaj się zatrzymałem z tokiem myślenia |
|
|
14.01.2021, 11:08:36
Post
#6
|
|
Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) |
To tablica wiec
Reszty niebardzo rozumiem o co ci chodzi. Jesli masz problem z dobraniem sie do nazw plikow to przed zaposem dodaj jakis separator chocby przecinek a podczas odczytu daj explode -------------------- |
|
|
14.01.2021, 11:34:25
Post
#7
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
hmmm i co dalej ? Dalej trzeba by zrobić pętlę, która "rozbierze" to coś ae9840681610617145.png828f5f2f1610617145.png1e4c70e31610617145.png na takie coś <img src="www.costam.pl/ae9840681610617145.png"/> <img src="www.costam.pl/828f5f2f1610617145.png"/> <img src="www.costam.pl/1e4c70e31610617145.png"/> No i tutaj się zatrzymałem z tokiem myślenia
Ten post edytował shpaque 14.01.2021, 11:35:43 |
|
|
14.01.2021, 11:42:33
Post
#8
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 10.09.2020 Ostrzeżenie: (0%) |
To tablica wiec Reszty niebardzo rozumiem o co ci chodzi. Jesli masz problem z dobraniem sie do nazw plikow to przed zaposem dodaj jakis separator chocby przecinek a podczas odczytu daj explode A właśnie nic nie działa.. A jak zapisać do bazy dane o tych 3 plikach ? o samych nazwach jeśli jest to tablica? Ten post edytował mkoszar 14.01.2021, 11:43:05 |
|
|
14.01.2021, 12:59:31
Post
#9
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
tez mozesz zapisac petla foreach jak dalem ci ogolnik powyzej
... albo rozbij sobie jesli to string z tymi nazwami plikow powinienes go skonstruowac tak, zeby byla w nim jednakowa wartosc rodzielajaca te pliki, np resdnik ( wtedy mialbys robisz
i wtedy masz już tablicę:
lub z petli np foreach lub for
|
|
|
15.01.2021, 07:42:21
Post
#10
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 10.09.2020 Ostrzeżenie: (0%) |
Witajcie. Przespałem się z tematem i dzisiaj na świeżo już coś z tego rozumiem.
CODE if(count($_FILES['upload']['name']) > 0){ for($i=0; $i<count($_FILES['upload']['name']); $i++) { $tmpFilePath = $_FILES['upload']['tmp_name'][$i]; if($tmpFilePath != ""){ $shortname = $_FILES['upload']['name'][$i]; $info = new SplFileInfo($_FILES['upload']['name'][$i]); $ext = '.' . $info->getExtension(); $check_ext = $info->getExtension(); $ext_allow= array("gif","tif","tiff","jpeg","jpg","png","pdf","exe","zip","rar","txt"); if (in_array($check_ext,$ext_allow, TRUE)){ $prefix = bin2hex(random_bytes(4)); $newname = $prefix . time() . $ext; $filePath = "$autor/".$newname; if(move_uploaded_file($tmpFilePath, $filePath)) { $files[] = $shortname; $serialized_files = serialize($files); $save = "UPDATE `diypartner` SET `img` = '$serialized_files' WHERE `diypartner`.`nk` = '$nk'"; mysqli_query($db, $save); } } else { echo $check_ext."<br>"; echo "ERROR - nie można wysyłaś plików typu.";} } } } ALE przesyła mi do bazy oryginalne nazwy plików.. a pasowałoby mi przesłać te nazwy na które faktycznie zmienił akcją $newname = $prefix . time() . $ext; |
|
|
15.01.2021, 10:18:01
Post
#11
|
|
Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) |
-------------------- |
|
|
15.01.2021, 10:32:31
Post
#12
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 10.09.2020 Ostrzeżenie: (0%) |
Może jeszcze raz , żeby zrozumieć motyw działania:
1. Pobieram z inputa nazwy plików: <input class="input-file" id="my-file" name="upload[]" type="file" multiple> 2. Pętlą FOR liczę i tworzę tablicę z nazwami tychże plików for($i=0; $i<count($_FILES['upload']['name']); $i++) { $tmpFilePath = $_FILES['upload']['tmp_name'][$i]; } 3. zapisuje te nazwy w zmiennej $shortname = $_FILES['upload']['name'][$i]; 4. Uzyskuję rozszerzenia i sprawdzam czy pasują do rozszerzeń, na które możemy pozwolić do przesłania $info = new SplFileInfo($_FILES['upload']['name'][$i]); $ext = '.' . $info->getExtension(); $check_ext = $info->getExtension(); $ext_allow= array("gif","tif","tiff","jpeg","jpg","png","pdf","exe","zip","rar","txt"); 5. Jeśli pasują - to nadajemy im nowe nazwy i przesyłamy do katalogu "$autor/".$newname; if (in_array($check_ext,$ext_allow, TRUE)){ $prefix = bin2hex(random_bytes(4)); $newname = $prefix . time() . $ext; $filePath = "$autor/".$newname; } 6. Później tą tablicę files[] serializujemy i wpisujemy do kolumny img tam gdzie wiersz odpowiada nazwie autora. $files[] = $shortname; $serialized_files = serialize($files); $save = "UPDATE `diypartner` SET `img` = '$serialized_files' WHERE `diypartner`.`nki` = '$nk'"; mysqli_query($db, $save); 7. Efekt jest taki, że później na innej stronie chcąc wyciągnąć wpisy tego autora wyświetli nam się to co wpisał w formularzu i dodatkowo jakie pliki przesłał. A informacja i plikach znajduje się tylko w jednym zapisie [.... tutaj oczywiście łączymy z bazą danych... ] $unserialized_array = unserialize($row[6]); foreach ($unserialized_array as $value) { echo '<img src="'.$row[2]."/".$value.'"/>'; } 8. Koniec. Problem: Z formularza pochodzą oryginalne nazwy plików punkt 3. Później je zmieniam na losowe + data + rozszerzenie punkt 5. a do bazy przesyłam sobie array $files[] = $shortname; i wpis w bazie wygląda tak : a:5:{i:0;s:9:"1star.png";i:1;s:9:"2star.png";i:2;s:9:"3star.png";i:3;s:9:"4star.png";i:4;s:9:"5star.png";} I zgubiłem się, dlaczego przesyła oryginalne nazwy plików. |
|
|
15.01.2021, 13:13:36
Post
#13
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Cytat I zgubiłem się, dlaczego przesyła oryginalne nazwy plików. nie przesyła tylko Ty je zapisujesz, zmienioną nazwę pliku masz w zmiennej $newname, którą przesyłasz do katalogu, ale nie do bazy (przynajmniej tak wynika z Twojego opisu problemu). W $shortname masz oryginalne nazwy plików i te zapisujesz do bazy. |
|
|
15.01.2021, 13:14:08
Post
#14
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 10.09.2020 Ostrzeżenie: (0%) |
OK, temat ogarnięty i zrozumiany ! dzięki !
https://stackoverflow.com/questions/1870563...nto-a-directory pomógł artykuł |
|
|
19.04.2021, 21:01:45
Post
#15
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 8 Dołączył: 7.07.2007 Skąd: Tychy Ostrzeżenie: (0%) |
Nie wiem czy nie lepiej zrobić w bazie danych tabelę np. userImages i zamiast trzymać to w jednym rekordzie dodałbym poszczególne wiersze jako pojedyncze adresy zdjęcia użytkownika X.
Planujesz edycję / usuwanie zdjęć z bazy danych / katalogu? Jak będziesz miał wszystko w jednym rekordzie- będziesz miał bałagan o rozwoju aplikacji nie wspomnę. -------------------- Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU! |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 03:49 |