Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Uploader plików - błąd w warunku
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Cześć,
Zainteresowałem się prostym uploaderem plików stąd. 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. <script type="text/javascript">
  2. function startUpload(){
  3. document.getElementById('uploadProcess').style.visibility = 'visible';
  4. document.getElementById('uploadForm').style.visibility = 'hidden';
  5. return true;
  6. }
  7.  
  8. function stopUpload(success,uploadedFile){
  9. var result = '';
  10. if (success == 1){
  11. result = '<span class="sucess-msg">The file was uploaded successfully!<\/span><br/><br/>';
  12. //Uploaded file preview
  13. var embed = document.getElementById("UploadedFile");
  14. var clone = embed.cloneNode(true);
  15. clone.setAttribute('src',uploadedFile);
  16. embed.parentNode.replaceChild(clone,embed);
  17. }else {
  18. result = '<span class="error-msg">There was an error during file upload!<\/span><br/><br/>';
  19. }
  20. document.getElementById('uploadProcess').style.visibility = 'hidden';
  21. document.getElementById('uploadForm').innerHTML = result + '<label>File: <input name="myfile" type="file" size="30" /><\/label><label><input type="submit" name="submitBtn" class="sbtn" value="Upload" /><\/label>';
  22. document.getElementById('uploadForm').style.visibility = 'visible';
  23. return true;
  24. }
  25.  
  26. </head>
  27. <form action="upload.php" method="post" enctype="multipart/form-data" target="uploadTarget" onsubmit="startUpload();" >
  28. <p id="uploadProcess">Uploading...<br/><img src="assets/loader.gif" /><br/></p>
  29. <p id="uploadForm" align="center"><br/>
  30. File: <input name="myfile" type="file" size="30" />
  31. </label>
  32. <input type="submit" name="submitBtn" class="sbtn" value="Upload" />
  33. </label>
  34. </p>
  35. <iframe id="uploadTarget" name="uploadTarget" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
  36. </form>
  37. <!-- Uploaded file preview -->
  38. <div>
  39. <embed id="UploadedFile" src="" width="390px" height="160px">
  40. </div>
  41. </body>
  42. </html>


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

nospor
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
sadistic_son
$_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.
nospor
A masz wlaczone wyswietlanie wszystkich bledow?
No i upewnij sie co napewno zawiera $success

var_dump($success);
sadistic_son
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.
nospor
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
sadistic_son
Wypada odpisać, że problem rozwiązany. Nie wykonywała się ta linijka:
  1. if(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); ?
nospor
Mowilem ci jak sprawdzic co zwraca call do IFRAME. Zrobiles to? Spradziles zakladke NETWORK w konsoli przegladarki?
sadistic_son
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ę.
nospor
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
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.