![]() |
![]() |
![]() ![]()
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"> (IMG:style_emoticons/default/questionmark.gif) nie wiem czy dobrze kombinuje |
|
|
![]() |
![]()
Post
#2
|
|
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 (IMG:style_emoticons/default/smile.gif) [.... 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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 23:48 |