Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [JavaScript][PHP]Uploader plików - błąd w warunku

Napisany przez: sadistic_son 30.05.2023, 10:57:02

Cześć,
Zainteresowałem się prostym uploaderem plików https://www.codexworld.com/upload-file-using-javascript-php/#ProjectDemoDownload. Miałby on wgrywać pliki bez przeładowywania strony. I tutaj pierwsze pytanie - czy można bezkarnie używać pływających ramek - iframe? Pamiętam jak uczyłem się php na początku obecnego wieku, to już wtedy było w książce, żeby raczej odchodzić o używania iframe. Jak to jest obecnie?


Ale do rzeczy. W JavaScript ogólnie raczkuję. Ni epotrzafię znaleźć pczyczyny dlaczego nie wykonuje się warunek if (success == 1){ , czyli jest komunikat There was an error during file upload!.


index.html:

  1. <http://december.com/html/4/element/html.html>
  2. <http://december.com/html/4/element/head.html>
  3. <http://december.com/html/4/element/script.html type="text/javascript">
  4. function startUpload(){
  5. document.getElementById('uploadProcess').style.visibility = 'visible';
  6. document.getElementById('uploadForm').style.visibility = 'hidden';
  7. return true;
  8. }
  9.  
  10. function stopUpload(success,uploadedFile){
  11. var result = '';
  12. if (success == 1){
  13. result = '<http://december.com/html/4/element/span.html class="sucess-msg">The file was uploaded successfully!<\/span><http://december.com/html/4/element/br.html/><http://december.com/html/4/element/br.html/>';
  14. //Uploaded file preview
  15. var embed = document.getElementById("UploadedFile");
  16. var clone = embed.cloneNode(true);
  17. clone.setAttribute('src',uploadedFile);
  18. embed.parentNode.replaceChild(clone,embed);
  19. }else {
  20. result = '<http://december.com/html/4/element/span.html class="error-msg">There was an error during file upload!<\/span><http://december.com/html/4/element/br.html/><http://december.com/html/4/element/br.html/>';
  21. }
  22. document.getElementById('uploadProcess').style.visibility = 'hidden';
  23. document.getElementById('uploadForm').innerHTML = result + '<http://december.com/html/4/element/label.html>File: <http://december.com/html/4/element/input.html name="myfile" type="file" size="30" /><\/label><http://december.com/html/4/element/label.html><http://december.com/html/4/element/input.html type="submit" name="submitBtn" class="sbtn" value="Upload" /><\/label>';
  24. document.getElementById('uploadForm').style.visibility = 'visible';
  25. return true;
  26. }
  27. </http://december.com/html/4/element/script.html>
  28.  
  29. </http://december.com/html/4/element/head.html>
  30. <http://december.com/html/4/element/body.html>
  31. <http://december.com/html/4/element/form.html action="upload.php" method="post" enctype="multipart/form-data" target="uploadTarget" onsubmit="startUpload();" >
  32. <http://december.com/html/4/element/p.html id="uploadProcess">Uploading...<http://december.com/html/4/element/br.html/><http://december.com/html/4/element/img.html src="assets/loader.gif" /><http://december.com/html/4/element/br.html/></http://december.com/html/4/element/p.html>
  33. <http://december.com/html/4/element/p.html id="uploadForm" align="center"><http://december.com/html/4/element/br.html/>
  34. <http://december.com/html/4/element/label.html>
  35. File: <http://december.com/html/4/element/input.html name="myfile" type="file" size="30" />
  36. </http://december.com/html/4/element/label.html>
  37. <http://december.com/html/4/element/label.html>
  38. <http://december.com/html/4/element/input.html type="submit" name="submitBtn" class="sbtn" value="Upload" />
  39. </http://december.com/html/4/element/label.html>
  40. </http://december.com/html/4/element/p.html>
  41. <http://december.com/html/4/element/iframe.html id="uploadTarget" name="uploadTarget" src="#" style="width:0;height:0;border:0px solid #fff;"></http://december.com/html/4/element/iframe.html>
  42. </http://december.com/html/4/element/form.html>
  43. <!-- Uploaded file preview -->
  44. <http://december.com/html/4/element/div.html>
  45. <embed id="UploadedFile" src="" width="390px" height="160px">
  46. </http://december.com/html/4/element/div.html>
  47. </http://december.com/html/4/element/body.html>
  48. </http://december.com/html/4/element/html.html>


upload.php:
  1. <?php
  2. $success = 0;
  3. $uploadedFile = '';
  4.  
  5. //File upload path
  6. $uploadPath = 'uploads/';
  7. $targetPath = $uploadPath . http://www.php.net/basename( $_FILES['myfile']['name']);
  8.  
  9. if(@http://www.php.net/move_uploaded_file($_FILES['myfile']['tmp_name'], $targetPath)){
  10. $success = 1;
  11. $uploadedFile = $targetPath;
  12. }
  13.  
  14. http://www.php.net/sleep(1);
  15. ?>
  16. <script type="text/javascript">window.top.window.stopUpload(<?php http://www.php.net/echo $success; ?>,'<?php http://www.php.net/echo $uploadedFile; ?>');</script>


Napisany przez: nospor 30.05.2023, 11:17:24

masz mase kodow jak sie robi upload przy pomocy ajax, lepiej skorzystaj z tego.

co do twojego kodu to w pliku upload.php ustawiasz $success na 1 albo 0. wiec sprawdz czy tam sie cos nie chrzani. W pierwszej kolejnosci sprawdz co zawiera $_FILES bo tam moze byc poprostu kod bledu.
Jesli to nie pomoze to usun malpe z move_uploaded_file

Napisany przez: sadistic_son 30.05.2023, 14:51:52

$_FILES zawiera to:

Kod
array(1) {
  ["myfile"]=>
  array(5) {
    ["name"]=>
    string(15) "test.txt"
    ["type"]=>
    string(10) "text/plain"
    ["tmp_name"]=>
    string(14) "/tmp/phpSSYl8d"
    ["error"]=>
    int(0)
    ["size"]=>
    int(88172)
  }
}

Tutaj chyba wygląda wszystko ok.
Natomiast po wywaleniu @ sprzed move_uploaded_file też żadnego błędu nie zwraca, jedynie w konsoli, że nie znaleziono loader.gif, którego po prostu nie stworzyłem jeszcze.

Napisany przez: nospor 30.05.2023, 15:12:13

A masz wlaczone wyswietlanie wszystkich bledow?
No i upewnij sie co napewno zawiera $success

var_dump($success);

Napisany przez: sadistic_son 30.05.2023, 16:48:08

Tak, jest włączone wyświetlanie błędów, ale dodałem jeszcze error_reporting(E_ALL); na początku.

A takie głupie pytanie... gdzie to var_dump($succes) wrzucić żeby zobaczyć rezultaty? Bo po wrzuceniu w upload.php nie wyświetla nigdzie tego. Właściwie to nie do końca rozumiem chyba co tu się dzieje - odsyłam przez formularz do upload.php ale żadne echo z niego się nigdzie nie wyświetla. Natomiast formularz przechodzi, bo przecież $_FILES, które występuje tylko w upoad.php pokazuje co ma w sobie.

Napisany przez: nospor 30.05.2023, 17:03:20

No to jak wyswietliles $_FILES skoro nie wiesz gdzie to sie wyswietla?

W konsolie przegldarki w zakladce networ masz tam wszystikie calle jakie robisz, i tam klikasz na dany request i widzisz co zwraca

Napisany przez: sadistic_son 6.06.2023, 11:17:31

Wypada odpisać, że problem rozwiązany. Nie wykonywała się ta linijka:

  1. if(http://www.php.net/move_uploaded_file($_FILES['myfile']['tmp_name'], $targetPath)){
bo przecież katalog uploads znajduje się poziom wyżej. Trywialny błąd ze złą ścieżką.

Ale w takim razie dlaczego nie pokazywało żadnego błędu mimo, że na początku dałem error_reporting(E_ALL); ?

Napisany przez: nospor 6.06.2023, 11:29:07

Mowilem ci jak sprawdzic co zwraca call do IFRAME. Zrobiles to? Spradziles zakladke NETWORK w konsoli przegladarki?

Napisany przez: sadistic_son 6.06.2023, 12:11:35

Ech, że też tutaj na forum nie ma możliwości uploadu obrazka sad.gif

Na moje to nie pokazuje błędu. Zobacz:
https://yourimageshare.com/ib/t3fyxHaR5u

Zmieniłem ścieżkę na złą. Oczywiście jest błąd-komunikat zdefiniowany przeze mnie, ale w konsoli go nie widzę.

Napisany przez: nospor 6.06.2023, 13:18:17

Ty nie masz go widziec w consoli, tylko ty masz kliknac na dany request i tam w body/response bedzie pokazane co idzie z tego request do ciebie. Nie boj sie klikac samodzielnie gdzie popadnie, nie pracujesz w elektrowni jadrowej

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)