Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/FILE] Problem z uploadem - Błąd w formularzu?
Forum PHP.pl > Forum > Przedszkole
servs
Cześć!

Mam taki problem z uploadem pliku... w formularzu definiuję kilka wartości oczywiście po stronie przeglądarki i za nic nie może mi gościu zuploadować pliku.. Działa mi tylko w ten sposób:

Plik formularza:
  1. <form enctype="multipart/form-data" action="wyslij.php" method="post">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
  3. Załaduj ten plik:<input name="plikuzytkownika" type="file">
  4. <input type="submit" value="Wyślij">
  5. </form>


Plik wykonawczy:
  1. <?php
  2. $lokalizacja = 'wyslane/'.$_FILES['plikuzytkownika']['name'];
  3.  
  4. if (is_uploaded_file($_FILES['plikuzytkownika']['tmp_name'])) 
  5. {
  6.  if (!move_uploaded_file($_FILES['plikuzytkownika']['tmp_name'], $lokalizacja))
  7.  {
  8. echo 'Problem: Plik nie może być skopiowany do katalogu';
  9.  }
  10. } 
  11. else 
  12. {
  13. echo 'Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku: ';
  14. echo $_FILES['plikuzytkownika']['name'];
  15. }
  16.  
  17. echo 'Plik wysłany<br><br>';
  18. ?>


A oto moje pliki:

Formularza:
  1. <?php
  2. $x=mysql_query("SELECT `name`, `desc`, `price`, `id_category_up` FROM `product` WHERE `id`='".$_GET['id']."'");
  3. echo '<P align=left><form method="post" action="job.php?action=products_edit_save&id=';
  4. echo $_GET['id'];
  5. echo '">
  6. <strong>Nazwa: </strong>
  7. <input name="nameprod" type="text" value="';
  8. echo $row['name'];
  9. echo '" /><br><strong>Opis: </strong>';
  10. $sBasePath = $_SERVER['PHP_SELF'] ;
  11. $sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
  12.  
  13. $oFCKeditor = new FCKeditor('desc') ;
  14. $oFCKeditor->BasePath  = $sBasePath ;
  15. $oFCKeditor->Value = $row['desc'] ;
  16. $oFCKeditor->Width = '100%' ;
  17. $oFCKeditor->Height = '300' ;
  18. $oFCKeditor->Create() ;
  19. echo '<br><P align=left><strong>Cena: </strong>
  20. <input name="price" type="text" value="';
  21. echo $row['price'];
  22. echo '" />zł<br><strong>Kategoria: </strong>
  23. <select name="category">';
  24. $a = mysql_query("SELECT `id`, `name` FROM `category_root`");
  25. while ($row=mysql_fetch_array($a)) {
  26. echo '<option value="root">';
  27. echo $row['name'];
  28. echo '</option>';
  29. $a1 = mysql_query("SELECT `id`, `name` FROM `category_up` WHERE `root_id`='".$row['id']."'");
  30. while ($row1=mysql_fetch_array($a1)) {
  31. echo '<option value="';
  32. echo $row1['id'];
  33. echo '">- ';
  34. echo $row1['name'];
  35. echo '</option>';
  36.  }
  37.  }
  38. echo '</select>
  39. <br><strong>Zdjęcie: </strong>
  40. <input name="plikuzytkownika" type="file"><br>
  41. <input type="submit" value="Zapisz!">
  42. </form></p>';
  43. ?>


Wykonawczy:
  1. <?php
  2. $lokalizacja = 'pliczki/'.$_FILES['plikuzytkownika']['name'];
  3.  
  4. if (is_uploaded_file($_FILES['plikuzytkownika']['tmp_name']))
  5. {
  6.  if (!move_uploaded_file($_FILES['plikuzytkownika']['tmp_name'], $lokalizacja))
  7.  {
  8. echo 'Problem: Plik nie może być skopiowany do katalogu';
  9.  }
  10. } 
  11. else 
  12. {
  13. echo 'Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku: ';
  14. echo $_FILES['plikuzytkownika']['name'];
  15. }
  16.  
  17. echo 'Plik wysłany<br><br>';
  18. ?>

Nie patrzcie na to że nie wykorzystuję innych wartości wprowadzonych w formularzu - skasowałem to na razie celowo żeby nie mieszać. Ale nawet ten samotny skrypt nie działa...

Zawsze mi wywala:
Cytat
Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku:
Nazwy pliku nie podaje.
Co jest nie tak?
PawelC
A jesteś pewien że Ci przenosi plik?
Sprawdź czy ten kod Ci działa, on uploaduje fotki ale można go łatwo przerobić:
  1. <?php
  2. if($mode=='add'){if($_FILES['plik']['type']=="image/jpeg" || $_FILES['plik']['type']=="image/jpg" || $_FILES['plik']['type']=="image/gif" || $_FILES['plik']['type']=="image/png"){
  3. $token = md5 (uniqid (rand()));
  4. move_uploaded_file($_FILES['plik']['tmp_name'],'./fotki/'.$token.'.'.jpg);
  5.  
  6. print "Twoje zdjęcie zostało dodane poprawnie.";
  7.  
  8. $nazwa = "$token.jpg";
  9. print$_FILES['plik']['name'];
  10. } else {print "Błędny format pliku.";
  11. }
  12. }
  13. ?>

Zrób folder fotki tam powinien ci grafę przerzucać po uploadzie
servs
Nic mi się nie pojawia, pliku nie uploaduje.
PawelC
  1. <?php
  2. $nazwa=$_FILES['plikuzytkownika']['name'];
  3. if(move_uploaded_file($_FILES['plikuzytkownika']['tmp_name'],'./pliczki/')){
  4.  
  5. print "Twoj plik został wgrany";
  6.  
  7.  
  8. } else {
  9. echo "Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku: ";
  10.  print $nazwa;
  11. }
  12. ?>

jak nie zadziała to wklej kod formularza
servs
Znów wyświetla się
Cytat
Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku:


Ponownie wklejam formularz:
  1. <?php
  2. echo '<P align=left><form method="post" action="job.php?action=products_edit_save&id=';
  3. echo $_GET['id'];
  4. echo '">
  5. <strong>Nazwa: </strong>
  6. <input name="nameprod" type="text" value="';
  7. echo $row['name'];
  8. echo '" /><br><strong>Opis: </strong>';
  9. $sBasePath = $_SERVER['PHP_SELF'] ;
  10. $sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
  11.  
  12. $oFCKeditor = new FCKeditor('desc') ;
  13. $oFCKeditor->BasePath  = $sBasePath ;
  14. $oFCKeditor->Value = $row['desc'] ;
  15. $oFCKeditor->Width = '100%' ;
  16. $oFCKeditor->Height = '300' ;
  17. $oFCKeditor->Create() ;
  18. echo '<br><P align=left><strong>Cena: </strong>
  19. <input name="price" type="text" value="';
  20. echo $row['price'];
  21. echo '" />zł<br><strong>Kategoria: </strong>
  22. <select name="category">';
  23. $a = mysql_query("SELECT `id`, `name` FROM `category_root`");
  24. while ($row=mysql_fetch_array($a)) {
  25. echo '<option value="root">';
  26. echo $row['name'];
  27. echo '</option>';
  28. $a1 = mysql_query("SELECT `id`, `name` FROM `category_up` WHERE `root_id`='".$row['id']."'");
  29. while ($row1=mysql_fetch_array($a1)) {
  30. echo '<option value="';
  31. echo $row1['id'];
  32. echo '">- ';
  33. echo $row1['name'];
  34. echo '</option>';
  35.  }
  36.  }
  37. echo '</select>
  38. <br><strong>Zdjęcie: </strong>
  39. <input name="plikuzytkownika" type="file"><br>
  40. <input type="submit" value="Zapisz!">
  41. </form></p>';
  42. ?>
PawelC
Tam gdzie masz <form etc... dorzuć to:
  1. enctype="multipart/form-data"
servs
Niestety nadal
Cytat
Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku:
l0ud
Umieść instrukcję print_r($_FILES); na samym początku skryptu przetwarzającego formularz i wklej co wyrzuci skrypt przy próbie uploadu pliku.
servs
Wyświetla
Cytat
Array ( )
PawelC
Zobacz
  1. <?php
  2. print_r($_FILES[1]);
  3. ?>

I Sprawdź tak do 4 powinno Ci wyświetlić.
l0ud
Na pewno jest coś nie tak z formularzem. Daj przykładowy kod html tego formularza (wynik skryptu go generującego - źródło strony smile.gif )
servs
Nadal nic.
A tam myślałem żeby zrobić tak aby zdjęcie było uploadowane jeszcze przed wysłaniem tego formularza.
Macie jakiś pomysł jak to zrobić? myślę że wtedy zaoszczędzimy sobie problemu.

Dalej będzie mi jeszcze potrzebna nazwa pliku z rozszerzeniem- aby była posyłana wraz z innymi zmiennymi z $_POST
l0ud
Umieść wygenerowany kod formularza, tak jak prosiłem w poprzednim poście. Uploadować z przeglądarki można tylko przez formularz, a zrobienie dwóch zdaje mi się niepotrzebnym utrudnieniem...
bim2
Nie, plik zostaje wgrany podczas wysyłania formularza. Masz jakiś problem z nim napewno. Gdzieś nie zamknołeś apostrofa, czy nie ma =. Pokaż jaki kod html Ci się generuje. tzn. wejdź na stronę, kliknij prawym przyciskiem myszki i daj "Pokaż źródło strony". Powinno się okazać co jest nie tak z formularzem. :]
PawelC
To:
  1. <?php
  2. echo '<P align=left><form method="post" action="job.php?action=products_edit_save&id=';
  3. echo $_GET['id'];
  4. echo ">
  5. ?>

Zamien na to:
  1. <?php
  2. echo '<P align=left><form method="post" action="job.php?action=products_edit_save&id=$_GET['id']">';
  3. ?>

Lub to któryś powinien działać:
  1. <?php
  2. $id=$_GET['id'];
  3. echo '<P align=left><form method="post" action="job.php?action=products_edit_save&id='$id'">';
  4. ?>
l0ud
@ExPlOiT, powiedz mi co to zmienia, za wyjątkiem pierwszego przykładu, który nie będzie działał?
servs
Proszę bardzo.

  1. <P align=left><form method="post" action="job.php?action=products_edit_save&id=3 enctype="multipart/form-data"">
  2. <strong>Nazwa: </strong>
  3. <input name="nameprod" type="text" value="fajny produkt" /><br><strong>Opis: </strong><div><input type="hidden" id="desc" name="desc" value="&lt;p&gt;ngdnyu&lt;/p&gt;" style="display:none" /><input type="hidden" id="desc___Config" value="" style="display:none" /><iframe id="desc___Frame" src="/oknomar/mar/editor/editor/fckeditor.html?InstanceName=desc&amp;Toolbar=Default" width="100%" height="300" frameborder="0" scrolling="no"></iframe></div><br><P align=left><strong>Cena: </strong>
  4. <input name="price" type="text" value="54.00" /><br><strong>Kategoria: </strong>
  5. <select name="category"><option value="root">blabla</option><option value="1">- srutututu</option><option value="root">ble ble</option></select>
  6. <br><strong>Zdjęcie: </strong>
  7. <input name="plikuzytkownika" type="file"><br>
  8. <input type="submit" value="Zapisz!">
  9. </form></p>


Kodu nie podmieniałem bo jak widze pierwszy rzeczywiście nie będzie działał - jest źle napisany i to nie jest SMARTY a drugi to niemalże to samo co ja mam, a błąd nie leży po stronie odsyłacza.
PawelC
W action masz błąd nie masz " po id=3, sprawdź jeden z tych kodów co wklejałem mi normalnie wyświetla po id=3 cudzysłów, używając te kody które wkleiłem.
servs
ale czemu patrzycie na takie rzeczy które z tym nie są całkowicie związane?
Błąd popełniłem niedawno.

proszę co mam teraz:
  1. <P align=left><form method="post" action="job.php?action=products_edit_save&id=3" enctype="multipart/form-data">
  2. <strong>Nazwa: </strong>
  3. <input name="nameprod" type="text" value="fajny produkt" /><br><strong>Opis: </strong><div><input type="hidden" id="desc" name="desc" value="&lt;p&gt;ngdnyu&lt;/p&gt;" style="display:none" /><input type="hidden" id="desc___Config" value="" style="display:none" /><iframe id="desc___Frame" src="/oknomar/mar/editor/editor/fckeditor.html?InstanceName=desc&amp;Toolbar=Default" width="100%" height="300" frameborder="0" scrolling="no"></iframe></div><br><P align=left><strong>Cena: </strong>
  4. <input name="price" type="text" value="54.00" /><br><strong>Kategoria: </strong>
  5. <select name="category"><option value="root">blabla</option><option value="1">- srutututu</option><option value="root">ble ble</option></select>
  6. <br><strong>Zdjęcie: </strong>
  7. <input name="plikuzytkownika" type="file"><br>
  8. <input type="submit" value="Zapisz!">
  9. </form></p>
PawelC
pisałem od ręki ale mi działa:
  1. <?php
  2. $plik_tmp = $_FILES['plikuzytkownika']['tmp_name'];
  3. $plik_nazwa = $_FILES['plikuzytkownika']['name'];
  4. $plik_rozmiar = $_FILES['plikuzytkownika']['size'];
  5.  
  6. if(is_uploaded_file($plik_tmp)) {
  7.  move_uploaded_file($plik_tmp, "pliczki/$plik_nazwa");
  8. echo "Plik: <strong>$plik_nazwa</strong> został przesłany na serwer!";
  9. } else {print "Błąd podczas uploadu pliku";
  10. }
  11. ?>

ok zmieniłem teraz będziesz uploadował do folderu pliczki smile.gif
l0ud
servs, kod formularza, którego podałeś mi działa. Albo inny element na stronie przeszkadza w jego wysłaniu, albo coś nie tak z tym skryptem (w job.php po prostu dołączasz ten odpowiedni kod?)
servs
ExPlOiT jesteś wielki!
Wielkie dzięki!
Kurcze zawsze podczas uploadu mam jakiś problem nie wiem dlaczego ale sprawia to kłopot i wstrzymuje prace na kilka godzin jak nie lepiej :]

Jeszcze raz dzięki!
PawelC
jeżeli możliwośc uploadu będą mieli użytkownicy to sprawdzaj typ pliku aby nikt Ci żadnego złośliwego kodu nie wrzucił.
servs
spoko dorzuce tylko żeby to była grafika smile.gif
PawelC
Jeżeli chcesz uploadować samą grafike w formacie jpg,jpeg, gif i png to najprościej wygląda to tak:
  1. <?php
  2. $plik_tmp = $_FILES['plikuzytkownika']['tmp_name'];
  3. $plik_nazwa = $_FILES['plikuzytkownika']['name'];
  4. $plik_rozmiar = $_FILES['plikuzytkownika']['size'];
  5.  
  6. if($_FILES['plikuzytkownika']['type']=="image/jpeg" || $_FILES['plikuzytkownika']['type']=="image/jpg" || $_FILES['plikuzytkownika']['type']=="image/gif" || $_FILES['plikuzytkownika']['type']=="image/png")
  7. {if(is_uploaded_file($plik_tmp)) {
  8.  move_uploaded_file($plik_tmp, "pliczki/$plik_nazwa");
  9. echo "Plik: <strong>$plik_nazwa</strong> został przesłany na serwer!";
  10. } else {print "Błąd podczas uploadu pliku";
  11. }
  12. } else {print "Błędny format pliku";
  13. }
  14. ?>
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.