![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam napisany formularz, który wrzuca do bazy w mysql (a dokładniej do danej tablicy) wartości, poprzez Insert into oraz input type file. Wszystko działa ok przy wrzucaniu pojedynczych wartości do komórek w tabeli.
Teraz chcę zrobić tak, aby przy przysyłaniu pliku poprzez input, przesyłał do danej komórki w bazie kilka plików jednocześnie. Dodałem multiple name="files[]", lecz dana zmienna $plik wrzuca tylko i wyłącznie jedną wartość. Czego użyć, aby w danej komórce w tabeli pojawiło się kilka wartości za jednym przesyłem? Deklaracja zmiennej: $pliki = trim($_FILES['pliki']['name']); Wrzucenie pliku do tabeli: $query = "INSERT INTO nazwa_tabeli VALUES (0,NOW(),'wartosc_pierwsza','wartosc_druga','$pliki')" Wysłanie za pomocą input: <input type="file" multiple name="pliki[]" id="pliki" name="pliki" value="<?php if(!empty($pliki)) echo $pliki; ?>"/> Przy tego typu rozwiązaniu oczywiście występuje informacja, że $plik spodziewa się jednego parametru. Dziękuję za pomoc Ten post edytował ob1 9.04.2018, 20:00:13 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Czegoś tutaj nie rozumiem. Możesz pokazać większy kawałek kodu odpowiadający za przesłanie plików? I żebyśmy się dobrze zrozumieli, chcesz aby DWA pliki były zapisane w bazie w jednej komórce? Tak?
(Nie za bardzo rozumiem po co Ci value w tym input z file) Ten post edytował leonpro778 10.04.2018, 07:54:22 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Odpowiedź: dokładnie, chcę aby więcej niż jedna wartość zostały zapisane w danej kolumnie - ich liczba ma zależeć od liczby przysłanych plików, wybranych przez użytkownika dzięki multiple w formularzu.
Cześć. Rozchodzi się o to, że mam stworzoną tabelę w mysql, która odpowiada za wyświetlanie przesłanych plików od administratora do danego użytkownika. Czyli działa to tak, że "administrator" wybiera użytkownika z listy (pobranej z bazy danych), do którego chce przesłać dane pliki (jpg, pdf itd, bez ustalonej z góry liczby, czy to 1 plik czy 5) - użytkownik jest pobierany przez get 'user'. Dochodzimy więc do ostatecznego etapu, w którym administrator wybrał użytkownika i dzięki przyciskowi ładującemu plik z dysku "przeglądaj" wybiera za pomocą np ctrl klika plików z dysku, które chce przesłać danemu użytkownikowi. Oczywiście w momencie przesłania jednego pliku nie ma problemu, ponieważ wtedy w kolumnie tabeli "pliki" pojawia się adres pliku, który został zapisany na dysku. Problem jest taki, jak to zrobić aby w danej kolumnie zapisać kilka plików jednocześnie. W jaki sposób to zrobić, a raczej czy można do danej kolumny wrzucić kilka wartości (więcej niż jedną) ? W formularzu jest opcja multiple, pod wybór kilku plików jednocześnie. Pytanie, jak zmodyfikować php? Jak to ugryźć (chociaż teoretycznie) ?
Po przeróbkach poniższy fragment kodu, a dokładniej echo wyświetla przesłaną nazwę plików prawidłowo, lecz dokładnie to samo muszę wstawić do kolumny "pliki" w mysql, poprzez zmienną "tablica_z_plikami" .....
..... Ten post edytował ob1 10.04.2018, 12:39:02 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 445 Pomógł: 3 Dołączył: 4.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Skoro pobierasz z formularza tabele to zapis musi być w pętli który wykonujesz Np: użyj pętli for wtedy będzie ci powtarzał zapytanie i zapisywał więcej plików .
Ten post edytował mrk9109 10.04.2018, 14:03:36 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
ok dzięki, tylko który fragment kodu mam wziąć w pętlę?
Ten post edytował ob1 11.04.2018, 07:38:54 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 445 Pomógł: 3 Dołączył: 4.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
zapytanie musi być podam ci przykład u mnie z kodu w którym wgrywam kilka zdjęć na raz .
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
ok, a w jaki sposób powinna być zadeklarowana zmienna $pliki?, ponieważ jest jakiś błąd i wyskakuje info z else
Ten post edytował ob1 12.04.2018, 09:37:40 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Wrzuć ten błąd tutaj.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Efekt: cały czas wywyala "Wystąpił problem przy przesyłaniu plików." Ten post edytował ob1 12.04.2018, 10:08:27 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 1 Dołączył: 17.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Wstawiłem, efekt informacje:
"string(20) "test-obrazek-dwa.jpg" " kolumna pliki w bazie jest typu blob. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 445 Pomógł: 3 Dołączył: 4.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
nie do końca to wykorzystałeś bo np: move_uploaded_file masz dalej po za pętlą
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 1 Dołączył: 17.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
mrk: move_uploaded_file wrzuciłem w pętlę i nic się nie zmieniło
wxm: nie wiem gdzie jest błąd. Będę wdzięczny za podpowiedź. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Przecież błąd wskazuje na to, że skrypt wywala się już przy pierwszym IF'ie (drugim licząc SUBMIT). Tam szukaj błędu.
Zobacz co masz:
Tutaj sprawdzasz: Jak w stringu ma być COŚ z indeksem NAME (IMG:style_emoticons/default/questionmark.gif) Zamień tą powyższą linijkę na:
i szukaj dalej Ten post edytował leonpro778 12.04.2018, 19:15:17 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Zamieniłem na $pliki = $_FILES['pliki'] oraz if (isset($pliki)) i efekt jest taki:
array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpL6C0r5" ["error"]=> int(0) ["size"]=> int(6194) } |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
...oraz if (isset($pliki)) i efekt jest taki: Tego akurat nie zmieniaj. Zostaw jak było, czyli: array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpL6C0r5" ["error"]=> int(0) ["size"]=> int(6194) } Tutaj przecież widzisz, że masz już tablicę z indeksem "name" (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Zostawiam:
$pliki = $_FILES["pliki"]; if (isset($pliki['name'])){ efekt: array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpFoK1qP" ["error"]=> int(0) ["size"]=> int(6194) } Kod:
Ten post edytował ob1 12.04.2018, 20:19:29 |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
No i na czym Ci się zatrzymuje? Masz strasznie dużo tych if'ów, dopisz sobie jakieś else do każdego z nich tak abyś mógł sprawdzić, gdzie skrypt się zatrzymuje bo po przejściu pierwszego IF'a nie będziesz miał żadnych innych komunikatów (oczywiście nie licząc błędów PHP).
if ($_FILES['pliki']['error'] == 0) { Pamiętaj jeszcze o tej linijce. Masz mieć KILKA plików dlatego tutaj już robisz pętlę FOREACH. Do swojego inputa z plikami name zmień na name="pliki[]" |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Info:
problem dotyczy tego $target = UPLOADPATH . $pliki; twierdząc, że chcę zamienić tablicę na string "array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpJdj6iT" ["error"]=> int(0) ["size"]=> int(6194) } Notice: Array to string conversion in /alt/home/........php on line 111" input jest taki: <input type="file" name="pliki[]" multiple="multiple"/> <br/><br/>
Efekt: informacja: array(5) { ["name"]=> array(2) { [0]=> string(16) "test-obrazek.jpg" [1]=> string(17) "test-obrazek2.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(32) "/alt/var/lib/php/pngis/phpXDY1it" [1]=> string(32) "/alt/var/lib/php/pngis/phpFFM8Jq" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(12765) [1]=> int(6194) } } Ten post edytował ob1 12.04.2018, 20:59:00 |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Zapytam inaczej, co zostawić, co wyrzucić i w czym jest problem ? Dlaczego foreach ma być wpisane przy sprawdzaniu przesłanego pliku ? Zrobić foreach i sprawdzić echo czy wyświetla ?
jak wstawiłem zamiast tego fragmentu o którym wspomniałeś fragment poniższy $filetmp = $_FILES["pliki"]["tmp_name"][$i]; $filename = $_FILES["pliki"]["name"][$i]; $filepath = "pliki/".$filename; move_uploaded_file($filetmp,$filepath); to i tak się nic nie działo. Wić co muszę zrobić? Muszę tablicę wrzucić do bazy. Jak to zrobić? Co ma sprawdzić i co chociaż teoretycznie poprawić? Ten post edytował ob1 12.04.2018, 21:15:46 |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dobra, zacznijmy od podstaw.
Najpierw Twój formularz: To spowoduje, że w $_FILES znajdzie się plik, który wybierzesz. Kolejna sprawa z [] w name. Ponieważ chcesz KILKA plików wysłać musisz przesłać je do TABLICY dlatego nasz formularz będzie wyglądał tak: Z html to w zasadzie wszystko. Teraz idźmy do PHP.
$filetmp = $_FILES["pliki"]["tmp_name"][$i]; $filename = $_FILES["pliki"]["name"][$i]; $filepath = "pliki/".$filename; Właśnie o to chodzi ale czytaj dalej. Teraz robimy kod, który będzie wykonywany po pierwszym sprawdzeniu:
To zmień w taki sposób:
Tablicy $pliki nie musisz już sprawdzać. Sprawdzałeś to w poprzednim IF'ie. Oczywiście na początku do zmiennej $usr dopisz jak tam coś masz (IMG:style_emoticons/default/smile.gif) Wszystko jasne, tylko że ta "reszt kodu" nie działa i tam są problemy Spokojnie, Teraz kolejna pętla. Właśnie z move_upload_file(). Ten post edytował leonpro778 12.04.2018, 21:28:47 |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
$usr leci z get. Sprawdzanie czy został ustawiony już wyrzuciłem, aby kod był czytelniejszy i to sprawdzenie nie jest konieczne. Nie zmienia to faktu, że nadal nie przesyła plików
Ten post edytował ob1 12.04.2018, 21:29:10 |
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#26
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Po usunięciu:
Notice: Array to string conversion in /alt/home/...usr.php on line 112 Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 115 Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/....usr.php on line 115 112 linia to: $target = UPLOADPATH . $pliki; 115 linia to: if (move_uploaded_file($_FILES['pliki']['name'], $target)) Wrzucanie pliku zamienić na całość: $filetmp = $_FILES["pliki"]["tmp_name"][$i]; $filename = $_FILES["pliki"]["name"][$i]; $filepath = "pliki/".$filename; .... ? |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Nie strzelaj na oślep usuwając jakieś linie. Tą linię zamieniamy na:
Ponieważ załatwi nam to od razu sprawę błędów przy przesyłaniu plików a dwa rozpocznie pętlę w której będzie zapytanie SQL (pominiemy też pętlę FOR). P.s. Wklej mi teraz kod, jaki Ci wyszedł (IMG:style_emoticons/default/smile.gif) Ten post edytował leonpro778 12.04.2018, 21:39:08 |
|
|
![]()
Post
#28
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Po wrzuceniu $target = UPLOADPATH . $pliki; do pętli for, komunikaty znikają, ale i tak pliki nie dodają się do bazy
Zmieniłem linię, efekt: Notice: Array to string conversion in /alt/home/...usr.php on line 115 Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116 Notice: Array to string conversion in /alt/home/....php on line 115 Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116 Notice: Array to string conversion in /alt/home/...usr.php on line 115 Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116 Notice: Array to string conversion in /alt/home/....usr.php on line 115 Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116
|
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ale Ci spieszno (IMG:style_emoticons/default/smile.gif) Dalej masz zły kod. Kod powinien wyglądać mniej więcej TAK:
W tym kodzie powinny wyświetlić Ci się dwa zera. Mamy piękny spaghetti code (IMG:style_emoticons/default/biggrin.gif) Ten post edytował leonpro778 12.04.2018, 21:45:19 |
|
|
![]()
Post
#30
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Dalej spis treści błędów
$usr nie jest pusty, to potwierdzam na 100%. jest zadeklarowany w zmiennej globalnej. Ma być: if (isset($pliki)){ czy if (isset($pliki['name'])){ ? Ten post edytował ob1 12.04.2018, 21:47:31 |
|
|
![]()
Post
#31
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Uparłeś się na tą funkcję FOR. Dobra, niech będzie z funkcją FOR:
Ten post edytował leonpro778 12.04.2018, 21:59:27 |
|
|
![]()
Post
#32
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 20.02.2018 Ostrzeżenie: (0%) ![]() ![]() |
Spróbowałem tak, wszystko się dodało, tylko dlaczego 4 razy a nie 2, skoro wysłałem dwa pliki ?
|
|
|
![]()
Post
#33
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Spróbowałem tak, wszystko się dodało, tylko dlaczego 4 razy a nie 2, skoro wysłałem dwa pliki ?
To jest teraz zbędne (IMG:style_emoticons/default/smile.gif) Masz pętlę FOR. Foreach wykonuje się DWA razy i FOR wykonuje się DWA razy co daje nam CZTERY. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 09:49 |