Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z przesyłaniem plików na serwer
Forum PHP.pl > Forum > XML, AJAX
elwierka
Mam problem z przesyłaniem plików na serwer i nie wiem w czym rzecz. Wykorzystuję AJAX do wyświetlania wyników bez przeładowania strony.
Skrypt nie rozpoznaje typu pliku i przez to nie można go zapisać na serwerze.

Kod js: Wysyłanie danych z formularza z AJAX

Kod formularza do wysyłania pllików:
  1. <!doctype html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  4. <script src="./jQuery.js" type="text/javascript"></script>
  5. <script src="./skrUploader.js" type="text/javascript"></script>
  6. <title>Wysyłanie plików na serwer</title>
  7. </head>
  8. <h1>Wysyłanie nowych plików na serwer.</h1>
  9. <form action="utworz.php" name="tworzKat" onsubmit="xmlhttpPost('utworz.php', 'tworzKat', 'wyswietlPliki', '<img src=\'pleasewait.gif\'>'); return false;">
  10. <div id="form1">
  11. <label for="inputNazwaKat">Nazwa katalogu: </label>
  12. <input type="text" name="inputNazwaKat" size="20" maxlenght="10" />
  13. <input type="submit" value="Utwórz" />
  14. </form>
  15. <form enctype="multipart/form-data" name="plik" action="wyslij.php" onsubmit="xmlhttpPost('wyslij.php', 'plik', 'wyswietlPliki', '<img src=\'pleasewait.gif\'>'); return false;">
  16. <div>
  17. <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
  18. <label for="plikuzytkownika">Załaduj ten plik:</label>
  19. <input name="plikuzytkownika" type="file" id="plikuzytkownika" /><br />
  20.  
  21.  
  22. <input type="submit" id="wyslij" value="Wyślij" tabindex="4" />
  23. </div>
  24. </form>
  25.  
  26. <div id="wyswietlPliki" style="background:#ccc; width:600px; height:300px; padding-top:30px; margin-top:20px; padding-left:10px;">
  27.  
  28. </div>
  29.  
  30. <!--FOOTER-->
  31. </body>
  32. </html>
  33.  
  34.  


oraz plik wyslij.php

  1. <!doctype html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  5. <TITLE>Wysyłanie...</TITLE>
  6. </HEAD>
  7. <BODY>
  8. <h3>Wysyłanie plików na serwer...</h3>
  9.  
  10. <?php
  11. // sprawdzam, wartość pola hidden - maksymalny rozmiar pliku
  12. $size = $_POST['MAX_FILE_SIZE'];
  13.  
  14. //sprawdzam czy przy wysylaniu nie ma błędów
  15. if ((($_FILES["plikuzytkownika"]["type"] == "image/jpeg")
  16. || ($_FILES["plikuzytkownika"]["type"] == "image/pjpeg")
  17. || ($_FILES["plikuzytkownika"]["type"] == "image/gif")
  18. || ($_FILES["plikuzytkownika"]["type"] == "image/x-png")
  19. || ($_FILES["plikuzytkownika"]["type"] == "image/png")
  20. )
  21. && ($_FILES['plikuzytkownika']['size'] < $size))
  22. {
  23. if($_FILES['plikuzytkownika']['error']>0)
  24. {
  25. // jeśli pojawił się problem przy przesyłaniu danych to wyświetla komunikat
  26. echo 'Pojawił się problem:';
  27. switch ($_FILES['plikuzytkownika']['error'])
  28. {
  29. case 1: echo 'Rozmiar pliku przekroczył wartość upload_max_filesize'; break;
  30. case 2: echo 'Rozmiar pliku przekroczył wartość max_file_size'; break;
  31. case 3: echo 'Plik wysłany tylko częściowo'; break;
  32. case 4: echo 'Nie wysłano żadnego pliku'; break;
  33. case 6: echo 'Nie można wysłać pliku. Nie wskazano katalogu tymczasowego'; break;
  34. case 7: echo 'Wysłanie pliku nie powiodło się. Nie zapisano pliku na dysku.'; break;
  35. }
  36. }
  37. // jeśli nie było problemów, sprawdzamy, czy przypadkiem plik już nie istnieje
  38. $target = './obrazkiWyslane/';
  39. $plik = $target . $_FILES['plikuzytkownika']['name'];
  40. // jesli plik już istnieje to wyświetl komunikat, jeśli nie to przenieś
  41. if (file_exists($plik))
  42. {
  43. echo $_FILES["plikuzytkownika"]["name"] . " już istnieje. <br /><a href=\"".$_SERVER["HTTP_REFERER"]."\">Powrót</a>";
  44. }
  45. // jeśli plik nie istnieje to dalej....
  46. else
  47. {
  48. if(is_uploaded_file($_FILES['plikuzytkownika']['tmp_name']))
  49. {
  50. if(!move_uploaded_file($_FILES['plikuzytkownika']['tmp_name'], $plik))
  51. {
  52. echo 'Problem: Plik nie może być skopiowany do katalogu';
  53. }
  54. }
  55. else
  56. {
  57. echo 'Problem: podczas wysyłania pliku. Nazwa pliku: ';
  58. echo $_FILES['plikuzytkownika']['name'];
  59. }
  60. echo 'Plik wysłany.<br /><br />';
  61. }
  62. } else {
  63. echo 'Niepoprawny typ pliku lub rozmiar.';
  64. }
  65. ?>
  66.  
  67. </BODY>
  68. </HTML>
  69.  


Poza tym, tekst wyświetla mi się bez polskich znaków...Próbowałam już zmieniać kodowanie na utf-8 ale nic to nie daje. Czy ktoś wie, o co może chodzić?


Poprzez polecenie
  1. echo $_POST['plikuzytkownika']['type'] . ' ';


postanowiłam sprawdzić, jaki wynik zwraca mi skrypt no i okazuje sie, ze jest to pierwsza litera z nazwy pliku.
erix
Cytat
Skrypt nie rozpoznaje typu pliku i przez to nie można go zapisać na serwerze.

To znaczy?

Cytat
Poza tym, tekst wyświetla mi się bez polskich znaków...Próbowałam już zmieniać kodowanie na utf-8 ale nic to nie daje. Czy ktoś wie, o co może chodzić?


  1. echo $_POST['plikuzytkownika']['type'] . ' ';

Mam nadzieję, że to tylko pomyłka, a w kodzie masz prawidłowo.

Poza tym, var_dump Twoim przyjacielem, tak samo jak i debugger (który pozwala na m.in. podejrzenie zawartości zmiennych w czasie wykonywania skryptu, ale na Twoje potrzeby to pierwsze rozwiązanie powinno wystarczyć).
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.