Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]Jednym formularze wrzucic kilka plikow - problem z PHP
Forum PHP.pl > Forum > Przedszkole
tejek
Witam,

Po przeczytaniu kilkunastu postów stworzyłem sobie formularz wysyłający pliki na serwer oto działający kod z formularzem:

FORMULARZ:
  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  2. <title>Untitled Document</title>
  3.  
  4. <link href="style.css" rel="stylesheet" type="text/css" media="all" />
  5. </head>
  6.  
  7. <!-- Formularz wysyłania plików -->
  8. <form enctype="multipart/form-data" action="upload2.php" method="POST">
  9. <!-- pole nikc - potrzebne do utworzenie katalogu o takiej samej nazwie jak nick -->
  10. Nick allegrowicza: <input type="text" name="nick"/><br /><br>
  11. <!-- MAX_FILE_SIZE zadeklarowanie wilkosci pliku -->
  12. <input type="hidden" name="MAX_FILE_SIZE" value="300000" />
  13. <!-- pola z nazwa pliku i roz. dododawane tablicy $_FILES array -->
  14. Send this file: <br />
  15. <input name="userfile" type="file" /><br />
  16. <input name="userfile" type="file" /><br />
  17. <!-- Przyciska wyslij -->
  18. <input type="submit" value="Send File" />
  19. </form>
  20. </body>
  21. </html>


PLIK PHP: upload2.php
  1. <?php
  2. // In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
  3. // of $_FILES.
  4. $upfolder = $_POST['nick'];
  5. $uploaddir = './img/';
  6. if(!is_dir($uploaddir . $upfolder)) mkdir($uploaddir . $upfolder, 0755);
  7. $uploadsrc = $uploaddir . $upfolder . '/';
  8.  
  9. $uploadfile = $uploadsrc . basename($_FILES['userfile']['name']);
  10.  
  11. echo '<pre>';
  12. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  13.  echo "File is valid, and was successfully uploaded.\n";
  14. } else {
  15.  echo "Possible file upload attack!\n";
  16. }
  17.  
  18. echo 'Here is some more debugging info:';
  19. print_r($_FILES);
  20.  
  21. print "</pre>";
  22.  
  23. ?>


Powyższe kody działają idealnie jednak mi to nie wystarcza i chciałbym alby ten formularz wysyłał dowolną ilość plików. Poniżej jest moja próba rozwiązania tego problemu jednak nie działa taka jak ma:

FORMULARZ DLA WIELU PLIKOW (taka szybka prowizorka:
  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  2. <title>Untitled Document</title>
  3.  
  4. <link href="style.css" rel="stylesheet" type="text/css" media="all" />
  5. </head>
  6.  
  7. <!-- Formularz wysyłania plików -->
  8. <form enctype="multipart/form-data" action="upload.php" method="POST">
  9. <!-- pole nikc - potrzebne do utworzenie katalogu o takiej samej nazwie jak nick -->
  10. Nick allegrowicza: <input type="text" name="nick"/><br /><br>
  11. <!-- MAX_FILE_SIZE zadeklarowanie wilkosci pliku -->
  12. <input type="hidden" name="MAX_FILE_SIZE" value="300000" />
  13. <!-- pola z nazwa pliku i roz. dododawane tablicy $_FILES array -->
  14. Send this file: <br />
  15. <input name="userfile" type="file" /><br />
  16. <input name="userfile" type="file" /><br />
  17. <input name="userfile" type="file" /><br />
  18. <!-- Przyciska wyslij -->
  19. <input type="submit" value="Send File" />
  20. </form>
  21. </body>
  22. </html>


PLIK PHP DO TEGO FORMULARZA: upload.php
  1. <?php
  2. // In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
  3. // of $_FILES.
  4. $upfolder = $_POST['nick'];
  5. $uploaddir = './img/';
  6. if(!is_dir($uploaddir . $upfolder)) mkdir($uploaddir . $upfolder, 0755);
  7. $uploadsrc = $uploaddir . $upfolder . '/';
  8.  
  9. echo '<pre>';
  10. for($i=0; $i<2; $i++)
  11. {
  12. $uploadfile[$i] = $uploadsrc . basename($_FILES['userfile']['name']);
  13. if ($upload[$i] = move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile[$i])) {
  14. echo "File is valid, and was successfully uploaded.\n";
  15. } else {
  16. echo "Possible file upload attack!\n";
  17. }
  18. }
  19. echo 'Here is some more debugging info:';
  20. print_r($_FILES);
  21.  
  22. print "</pre>";
  23.  
  24. ?>


Jednak nie działa poprawnie bo wysyła mi jedynie ostatni plik z grupy wybranych w formularzu. A po wybraniu SEND wyskakuje mi błąd:
  1. File is valid, and was successfully uploaded.
  2. Possible file upload attack!
  3. Here is some more debugging info:Array
  4. (
  5. [userfile] => Array
  6. (
  7. [name] => id.jpg
  8. [type] => image/jpeg
  9. [tmp_name] => /tmp/phpabQt0P
  10. [error] => 0
  11. [size] => 2734
  12. )
  13.  
  14. )


Proszę o pomoc.
wojckr
Cytat
  1. <input name="userfile" type="file" /><br />
  2. <input name="userfile" type="file" /><br />
  3. <input name="userfile" type="file" /><br />


Na pierwszy rzut oka powinno być tak:

  1. <input name="userfile[]" type="file" /><br />
  2. <input name="userfile[]" type="file" /><br />
  3. <input name="userfile[]" type="file" /><br />


Wtedy PHP odbiera każdy plik i wrzuca do tablicy $_FILES['userfile'] jako jej kolejne elementy.
tejek
Już sobie poradziłem i masz racje formularz powinien wygladać tak jak tyto napisałes:

A ja dodam od siebie gotowy kod PHP.
  1. <?php
  2. /*Mozna tak:*/
  3. $upfolder = 'dowona_nazwa';
  4. /*albo tak: (taki dodatkowy bajer)*/
  5. /* $upfolder = $_POST['nick']; */
  6. $uploaddir = './img/';
  7. if(!is_dir($uploaddir . $upfolder)) mkdir($uploaddir . $upfolder, 0755);
  8. $uploadsrc = $uploaddir . $upfolder . '/';
  9.  
  10. foreach ($_FILES["pictures"]["error"] as $key => $error) {
  11. if ($error == UPLOAD_ERR_OK) {
  12. $name = $uploadsrc.basename($_FILES["pictures"]["name"][$key]);
  13. $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
  14. move_uploaded_file($tmp_name, $name);
  15. $stat = 0;
  16. } else {
  17. $stat = 1;
  18. }
  19. }
  20. echo '<pre>';
  21. if($stat==0)
  22. {
  23. echo 'Wszystko działa<br>';
  24. echo '<a href="index.html">< wstecz</a><br>';
  25. } else {
  26. echo 'Wystapił bład<br>';
  27. echo '<a href="index.html">< wstecz</a><br>';
  28. }
  29.  
  30. echo '<br><b>Here is some more debugging info:</b><br>';
  31. print_r($_FILES);
  32. echo '</pre>';
  33. ?>
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.