Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]Wysłanie pliku rar przez formularz
Forum PHP.pl > Forum > Przedszkole
radziopoke
Mam zwykły formularz, w którym mam kilka pól input typu text, i jeden typu file.
Problem polega na tym, że gdy chce wysłać plik rar strona wysyła plik na serwer ale w ogóle ani nie można się do niego dostać, ani nie wysyła innych danych formularza. Tak jakby serwer całkowicie stracił te dane.

tak wygląda formularz
  1. <form method="post" id="uploadform" action="" enctype="multipart/form-data">
  2. <input type="hidden" name="submitted" value="true">
  3. <p><label for="namefrom">Pseudonim/Imię Nazwisko <span class="required">*</span></label>
  4. <input name="namefrom" id="namefrom" type="text" class="field" value="" tabindex="1"></p>
  5.  
  6. <p><label for="emailfrom">Email <span class="required">*</span></label>
  7. <input name="emailfrom" id="emailfrom" type="text" class="field" value="" tabindex="3"></p>
  8.  
  9. <p><label for="subject">Temat <span class="required">*</span></label>
  10. <input name="subject" id="subject" type="text" class="field" value="" tabindex="5"></p>
  11.  
  12. <p><label for="comments">Komentarz <span class="required">*</span></label>
  13. <textarea name="comments" id="comments" rows="7" cols="10" class="field" tabindex="6"></textarea></p>
  14.  
  15. <p><label for="attachment">Załącz plik <span class="required">*</span><br />(Maksymalny rozmiar 10MB,<br />dozwolone formaty pliku: .zip, .rar)</label>
  16. <input name="attachment" id="attachment" type="file" tabindex="7">
  17. </p><p><input type="submit" name="submit" id="submit" value="Wyślij!" tabindex="8"></p>
  18.  
  19. </form>

część php tego pliku to tylko próba sprawdzenia czy formularz został wysłany(wychudziłem go ale nadal przy wysłaniu wyskakuje napis błąd)
  1. if(isset($_POST['submitted']))
  2. {
  3. echo "ok";
  4. }
  5. else
  6. {
  7. echo "błąd";
  8. }


Ten problem nie występuję z żadnym innym plikiem przynajmniej nie zauważyłem tego smile.gif
Plik nie zawiera ani grama skryptu javascript.

Czy może być to wina serwera. Mam zainstalowanego XAMPP-a.
lukaskolista
  1. if(isset($_POST['submit']))
  2. {
  3. echo "ok";
  4. }
  5. else
  6. {
  7. echo "błąd";
  8. }
a bardziej poprawnie
  1. if( ! empty($_POST))
  2. {
  3. echo "ok";
  4. }
  5. else
  6. {
  7. echo "błąd";
  8. }
Czemu 2 rozwiazanie jest bardziej poprawne? Poniewaz jest odporne na wszelkiego rodzaju bledy zwiazane z nazewnictwem (wlasnie takie, jakie popelniasz). Pozdrawiam
peter13135
@up
1. Powiedz nam, czemu submitted jest źle, a submit jest dobrze ? Przecież w formularzu są pola z name="submitted" i name="submit"
2. Czemu isset($_POST['pole']) jest źle, a empty($_POST) to jest dobrze ? Przecież oba sposoby są dobre, chociaż pierwszy chyba lepszy w przypadku kilku formularzy.

Edit://
Cytat
Czemu 2 rozwiazanie jest bardziej poprawne? Poniewaz jest odporne na wszelkiego rodzaju bledy zwiazane z nazewnictwem (wlasnie takie, jakie popelniasz). Pozdrawiam

To żaden argument.
radziopoke
mi nie chodzi o to jak sprawdzać czy formularz został wysłany czy nie tylko dlaczego gdy próbuję go wysłać z plikiem rar nic się nie wysyła?
sprawdziłem to
if( ! empty($_POST))
tablica jest pusta mimo wpisania danych. Z plikami innymi niż rar formularz wysłany jest normalnie. dlaczego?
peter13135
Skopiowałem Twój formularz wraz z kodem i wszystko jest okej
Kod
<form method="post" id="uploadform" action="" enctype="multipart/form-data">

    <input type="hidden" name="submitted" value="true">

    <p><label for="namefrom">Pseudonim/Imię Nazwisko <span class="required">*</span></label>

    <input name="namefrom" id="namefrom" type="text" class="field" value="" tabindex="1"></p>



    <p><label for="emailfrom">Email <span class="required">*</span></label>

    <input name="emailfrom" id="emailfrom" type="text" class="field" value="" tabindex="3"></p>



    <p><label for="subject">Temat <span class="required">*</span></label>

    <input name="subject" id="subject" type="text" class="field" value="" tabindex="5"></p>



    <p><label for="comments">Komentarz <span class="required">*</span></label>

    <textarea name="comments" id="comments" rows="7" cols="10" class="field" tabindex="6"></textarea></p>



    <p><label for="attachment">Załącz plik <span class="required">*</span><br />(Maksymalny rozmiar 10MB,<br />dozwolone formaty pliku: .zip, .rar)</label>

    <input name="attachment" id="attachment" type="file" tabindex="7">

    </p><p><input type="submit" name="submit" id="submit" value="Wyślij!" tabindex="8"></p>



</form>
<?php

print_r($_POST);
print_r($_FILES);
if(isset($_POST['submitted']))
{
  echo "ok";
}
else
{
  echo "błąd";
}
radziopoke
Czyli próbowałeś wysłać plik rar.
czyżby wina mogła leżeć po stronie serwera? Jak tak to gdzie to się ustawia?
peter13135
tak, oto przykład :

Kod
Array ( [submitted] => true [namefrom] => [emailfrom] => [subject] => [comments] => [submit] => Wyślij! ) Array ( [attachment] => Array ( [name] => 1280_1024.rar [type] => application/x-rar-compressed [tmp_name] => E:\programy\xampp\tmp\phpB68.tmp [error] => 0 [size] => 2350068 ) ) ok


radziopoke
Coś czuję że wina może być ustawień serwera(od samego początku nic nie zmieniałem w ustawieniach). Jak tak to gdzie to można ustawić? No chyba, że tylko mój xampp ma takie odchyły smile.gif
peter13135
No nie wiem, ja nic nie zmieniałem w swoim xamppie i to to działa ;P
lukaskolista
Nie zauwazylem pola submitted smile.gif

id ( ! empty($_POST)) {...} jest lepsze, bo jest bledoodporne, nazewnictwo formularzy nie ma w tym przypadku znaczenia. Kazdy ma tam swoje przyzwyczajenia i nie bede nikomu nic narzucal. Przeslane pliki nie znajduja sie w tablicy $_POST, tylko w tablicy $_FILES w bardzo niewygodnej formie (jesli jest ich wiecej, niz 1). Normalizacje tablicy $_FILES mozna znalezc w manualu
peter13135
Ale błąd w nazewnictwie możesz popełnić wszędzie, zarówno w pliku html, jak i css albo php, czy w zapytaniu sql, więc taki wyjątek, że nie muszę pilnować literówek w tym jednym przypadku, za wiele dobrego nie daje.

Po co piszesz o tym, że pliki nie znajdują się w $_POST, i to że pliki w $_FILES są w niewygodnej formie ? Autor nie pisał o niczym takim i to wszystko nie ma wpływu na problem autora tematu.
b4rt3kk
Sprawdź w php.ini wartość linii: upload_max_filesize oraz upload_tmp_dir i sprawdź czy katalog ma chmod 777.
peter13135
O jakim katalogu mówisz ? Przecież on nigdzie nie zapisuje tego pliku wink.gif
b4rt3kk
Mówię o katalogu, w którym tymczasowo przechowywane są pliki przed zapisaniem w określonej ścieżce (via tmp_name).
radziopoke
upload_tmp_dir = "C:\xampp\tmp"
upload_max_filesize = 128M

Ścieszkę znałem już wcześniej i wiem że plik rar jest wysyłany gdyż tworzą się tam nowe pliki w przypadku wysłania pliku rar ale tablica $_POST i $_FILES pozostają puste. Wielkość pliku tu i tak nie gra roli gdyż wtedy chyba dane formularza powinny być przekazane. Już nie raz wgrywałem inne typy plików więc katalog na pewno ma chmod 777.

Wprawdzie mówiąc ten serwer jest dla mnie serwerem testowym gdyż cala strona znajdzie się na płatnym serwerze i mam nadzieję, że ten błąd tam nie wystąpi. Tylko cały czas się ciekawię co ma przeciwko temu bym nie mógł wgrywać plików rar?
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.