Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekazanie do bazy informacji o plikach img
mkoszar
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mkoszar
post
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.



Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 23:48