Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Input $_FILES upload - error #4
Forum PHP.pl > Forum > PHP
shpaque
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. ...

Pyton_000
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()`
shpaque
  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. }
nospor
Skoro w funkcji checkFile nadpisujesz inputa z plikiem nowym inputem to niby jak ma ci sie stary input wyslac?
shpaque
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[]" .../> ?
nospor
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?
shpaque
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 :?
Pyton_000
To weź sobie ten tekst który masz obok input wsadź w kolejnego span i edytuj tylko tego.
shpaque
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
Pyton_000
A po co chcesz to na jQ robić jak masz w pure JS ? jaki w tym sens...
shpaque
jQ jest krotszy i przyjemniejszy, poza tym bardziej czytelny tak mi sie wydaje.

ew jak to:
  1. window.URL.createObjectURL
powinno brzmiec w jq?
viking
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
shpaque
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. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.