Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Input $_FILES upload - error #4, o co chodzi?
shpaque
post 19.09.2018, 19:10:10
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Jak w temacie wywala mi error #4 (UPLOAD_ERR_NO_FILE – Value: 4; No file was uploaded) - to akurat wiem, szkoda, że nigdzie nie mogę znaleźć DLACZEGO? kiedy sprawdzam plik, wychodzi mi:
  1. Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 )


wyglada to tak:

  1. // Dodajemy pliki
  2. $maxSize = 2048*1024; // 2 MB
  3. if (is_uploaded_file($_FILES['photoFront']['tmp_name']) && $_FILES['photoFront']['size'] <= $maxSize)
  4. {
  5. $tempFile = $_FILES['photoFront']['tmp_name'];
  6. $targetFile = './db/users/'.$logUser['id'].'/'.$_FILES['photoFront']['name'];
  7. move_uploaded_file($tempFile, $targetFile);
  8.  
  9. $newPomiar['photoFront'] = $_FILES['photoFront']['name'];
  10. }
  11. if (is_uploaded_file($_FILES['photoSide']['tmp_name']) && $_FILES['photoSide']['size'] <= $maxSize)
  12. {
  13. $tempFile = $_FILES['photoSide']['tmp_name'];
  14. $targetFile = './db/users/'.$logUser['id'].'/'.$_FILES['photoSide']['name'];
  15. move_uploaded_file($tempFile, $targetFile);
  16.  
  17. $newPomiar['photoSide'] = $_FILES['photoSide']['name'];
  18. }
  19. if (is_uploaded_file($_FILES['photoBack']['tmp_name']) && $_FILES['photoBack']['size'] <= $maxSize)
  20. {
  21. $tempFile = $_FILES['photoBack']['tmp_name'];
  22. $targetFile = './db/users/'.$logUser['id'].'/'.$_FILES['photoBack']['name'];
  23. move_uploaded_file($tempFile, $targetFile);
  24.  
  25. $newPomiar['photoBack'] = $_FILES['photoBack']['name'];
  26. }
  27. print_r($_FILES['photoFront']);
  28. print_r($_FILES['photoSide']);
  29. print_r($_FILES['photoBack']);


  1. <form id="formAdd" action="#" method="POST" enctype="multipart/form-data" style="margin-top: 20px;">
  2. <input type="hidden" name="action" value="add" />
  3. <div class="row">
  4. <div class="col-sm-4">
  5. <div class="panel">
  6. <div id="imageFront" class="u-image" style="background-image: url('./img/photoFront.jpg');"></div>
  7. <div class="title text-justify" style="margin-top: 12px; font-size: 13px; line-height: 16px;"><b>Zdjęcie od przodu</b><br><br>Pamiętaj, że nie musisz pokazywać swojej twarzy, ważne jest aby oświetlenie było odpowiednie.</div>
  8. <span id="spanFront" class="btn-file text-center">Dodaj <input id="photoFront" name="photoFront" type="file" onchange="checkFile('imageFront', 'spanFront', 'photoFront')" /></span>
  9. </div>
  10. </div>
  11. <div class="col-sm-4">
  12. <div class="panel">
  13. <div id="imageSide" class="u-image" style="background-image: url('./img/photoSide.jpg');"></div>
  14. <div class="title text-justify" style="margin-top: 12px; font-size: 13px; line-height: 16px;"><b>Zdjęcie od boku</b><br><br>Nie napinaj brzucha ani nie nabieraj za dużo powietrza. Zachowaj prostą postawę.</div>
  15. <span id="spanSide" class="btn-file text-center">Dodaj <input id="photoSide" name="photoSide" type="file" onchange="checkFile('imageSide', 'spanSide', 'photoSide')" /></span>
  16. </div>
  17. </div>
  18. <div class="col-sm-4">
  19. <div class="panel">
  20. <div id="imageBack" class="u-image" style="background-image: url('./img/photoBack.jpg');"></div>
  21. <div class="title text-justify" style="margin-top: 12px; font-size: 13px; line-height: 16px;"><b>Zdjęcie od tyłu</b><br><br>Napnij przy okazji ręce i pokaż się w całej okazałości.<br><br></div>
  22. <span id="spanBack" class="btn-file text-center">Dodaj <input id="photoBack" name="photoBack" type="file" onchange="checkFile('imageBack', 'spanBack', 'photoBack')" /></span>
  23. </div>
  24. </div>
  25. </div>
  26. ...

Go to the top of the page
+Quote Post
Pyton_000
post 19.09.2018, 19:20:30
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Odpal sobie konsolę developerską i zobacz co leci do serwera. Wygląda na to że wysyłasz formularz ale pliki się nie załączaję. I co robi ten `checkFile()`
Go to the top of the page
+Quote Post
shpaque
post 19.09.2018, 19:57:41
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


  1. function checkFile(image, span, photo) {
  2. var x = document.getElementById(photo);
  3. if ('files' in x) {
  4. if (x.files.length > 0) {
  5. document.getElementById(image).style.backgroundImage = 'url(\'' + window.URL.createObjectURL(x.files[0]) + '\')';
  6. document.getElementById(span).innerHTML = 'Zmień plik<br><small>(' + x.files[0].name + ')</small> <input id="' + photo + '" name="' + photo + '" type="file" onchange="checkFile(\'' + image + '\', \'' + span + '\', \'' + photo + '\')" />';
  7. }
  8. }
  9. }
Go to the top of the page
+Quote Post
nospor
post 19.09.2018, 20:08:33
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Skoro w funkcji checkFile nadpisujesz inputa z plikiem nowym inputem to niby jak ma ci sie stary input wyslac?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post 20.09.2018, 10:48:40
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


no tak ale tu input ma to samo id i name, wiec pole powinno pozostac to samo skoro pozniej wywoluje je $_POST['NAME']?

to co jedyna opcja to robic z nazwy tablice i szukac pliku pozniej po tablicy? <input ... name="name[]" .../> ?
Go to the top of the page
+Quote Post
nospor
post 20.09.2018, 10:53:48
Post #6





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Cytat(shpaque @ 20.09.2018, 10:48:40 ) *
no tak ale tu input ma to samo id i name, wiec pole powinno pozostac to samo skoro pozniej wywoluje je $_POST['NAME']?

Wsadz sobie do pudelka z numerem 5 milion zlotych. Potem wyrzuc to pudelko na smieci, wstaw nowe z numerem 5 i sie dziw, czemu nagle w nim nie ma miliona zlotych.... tongue.gif


Cytat
to co jedyna opcja to robic z nazwy tablice i szukac pliku pozniej po tablicy? <input ... name="name[]" .../> ?

Najwazniejsze pytanie: a po cholere ty wyrzucasz stary input tylko po to by za chwile utworzyc dokladnie taki sam nowy?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post 20.09.2018, 11:07:54
Post #7





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


bo inputa mam zamknietego w spanie, a skoro chce w spanie zmienic tresc, to całą (łącznie z inputem)

w zasadzie gdybym wzial innerHTML.replace... hmmm wink.gif

...no ale to tez nic nie da, bo jak ktos bedzie chcial podmieniac ciagle plik a tu generuje w spanie jego nazwe - to tez nic z tego nie bedzie... chyba ze jest taka opcja zeby zrobic innerHTML.replace - wszystko poza czyms :?
Go to the top of the page
+Quote Post
Pyton_000
post 20.09.2018, 11:11:30
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


To weź sobie ten tekst który masz obok input wsadź w kolejnego span i edytuj tylko tego.
Go to the top of the page
+Quote Post
shpaque
post 20.09.2018, 12:16:17
Post #9





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


kurde geniusz smile.gif nie wpadlem na to smile.gif

to pomozcie jeszcze przy jednej rzeczy, skoro mam juz fajny skrypt:

  1. function checkFile(image, span, photo) {
  2. var x = document.getElementById(photo);
  3. var maxSize = 2097152; // 2 MB
  4. if ('files' in x) {
  5. if (x.files.length > 0) {
  6. document.getElementById(image).style.backgroundImage = 'url(\'' + window.URL.createObjectURL(x.files[0]) + '\')';
  7. if (x.files[0].size > maxSize) {
  8. document.getElementById(span).parentElement.style.background = '#ff6b6b';
  9. document.getElementById(span).innerHTML = 'Zmień plik, jest za duży<br><small>(' + x.files[0].name + ' - ' + parseFloat(x.files[0].size/(1024*1024)).toFixed(2) + ' MB)</small>';
  10. }
  11. else {
  12. document.getElementById(span).innerHTML = 'Zmień plik<br><small>(' + x.files[0].name + ' - ' + parseFloat(x.files[0].size/(1024*1024)).toFixed(2) + ' MB)</small>';
  13. }
  14. }
  15. }
  16. }


ale chcialbym go przepisac na jquery, a wiem ze jQ nie pociagnie zmiennych $(span) wzietych z funkcji, jak to zrobic?

kurde... dobra cofam, przeciez -> $('#'+span) - ok nie komentujcie wink.gif
Go to the top of the page
+Quote Post
Pyton_000
post 20.09.2018, 12:26:39
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A po co chcesz to na jQ robić jak masz w pure JS ? jaki w tym sens...
Go to the top of the page
+Quote Post
shpaque
post 20.09.2018, 12:27:40
Post #11





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


jQ jest krotszy i przyjemniejszy, poza tym bardziej czytelny tak mi sie wydaje.

ew jak to:
  1. window.URL.createObjectURL
powinno brzmiec w jq?
Go to the top of the page
+Quote Post
viking
post 20.09.2018, 12:53:59
Post #12





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jquery to nakładka na czysty js. Realizuje to samo (tylko wolniej) zatem skoro masz to już zrobione to nie ma sensu przepisywać.
A drugie pytanie pokazuje że nie widzisz różnicy pomiędzy JS a jquery. Poczytaj sobie https://developer.mozilla.org/en-US/docs/Web/API/URL


--------------------
Go to the top of the page
+Quote Post
shpaque
post 20.09.2018, 13:11:02
Post #13





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


viking dziekuje za uwagę. Szczerze mówiąc pomijając, że jq musi zaladowac sobie bilbiotekę, sądziłem że działa szybciej niz pure js... W takim razie zostawiamy to tak jak jest. Jedno pytanie mi pozostaje czysto teoretyczne, ale nawiazujace do mojego skryptu. Istnieje sposób, zeby cokolwiek wykonalo sie zanim przeleci cala petla? patrzac na moj skrypt chodzi mi o jeden konkret:

kiedy ktos wrzuca plik powyzej 2mb, text z bledem pojawia sie od razu, ale kolor (styl) zmieniajacy button na czerwony wykonuje sie dopiero po wyswietleniu miniatury - to troche glupio wyglada dla perfeksjonistow mimo ze trwa ulamki sekundy, ale czy jest taka mozliwosc, zeby button niezaleznie od tego ile bedzie robiel prewiewke obrazka od razu zmienil kolor?

...po drobnych modyfikacjach teraz wygląda to tak:

  1. function checkFile(image, span, photo) {
  2. var x = document.getElementById(photo);
  3. var maxSize = 2097152; // 2 MB
  4. if ('files' in x) {
  5. if (x.files.length > 0) {
  6. document.getElementById(image).style.backgroundImage = 'url(\'' + window.URL.createObjectURL(x.files[0]) + '\')';
  7. if (x.files[0].size > maxSize) {
  8. document.getElementById(span).parentElement.classList.add('red');
  9. document.getElementById(span).innerHTML = 'Zmień plik, jest za duży<br><small>(' + x.files[0].name + ' - ' + parseFloat(x.files[0].size/(1024*1024)).toFixed(2) + ' MB)</small>';
  10. }
  11. else {
  12. document.getElementById(span).parentElement.classList.remove('red');
  13. document.getElementById(span).innerHTML = 'Zmień plik<br><small>(' + x.files[0].name + ' - ' + parseFloat(x.files[0].size/(1024*1024)).toFixed(2) + ' MB)</small>';
  14. }
  15. }
  16. }
  17. }


Ten post edytował shpaque 20.09.2018, 13:09:09
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 23:45