Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Upload wielu plików z podziałem na kategorie.
Forum PHP.pl > Forum > PHP
toolmaniak
Witam. Mam taki kod jak poniżej, który odbiera pliki z forma, hashuje je ładnie md5, po czym umieszcza w ktalogu nazwijmy to klienta do którego się odnoszą (jeżeli trzeba to tworzy nowy katalog), natomiast wszystke dane jak nazwa,typ MIME, właściciel pliku, rozmiar, i hash po którym ma szukać w katalogu - wszystkie te dane zapisuje w MySQL.

  1. <?php
  2. session_name('PHPSESSID');
  3. ?>
  4. <html>
  5. <head>
  6. <title>Upload File To MySQL Database</title>
  7. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  8. <style type="text/css">
  9. <!--
  10. .box {
  11. font-family: Arial, Helvetica, sans-serif;
  12. font-size: 12px;
  13. border: 1px solid #000000;
  14. }
  15. -->
  16. </style>
  17. </head>
  18.  
  19. <body>
  20. <?
  21. //print $_SESSION['user_db'];
  22. //print $_SESSION['ident'];
  23. if(isset($_POST['upload']))
  24. {
  25. foreach($_FILES['userfile']['error'] as $key => $error) {
  26.  
  27. if ($error == UPLOAD_ERR_OK) {
  28. $fileName = $_FILES['userfile']['name'][$key];
  29. $tmpName = $_FILES['userfile']['tmp_name'][$key];
  30. $fileSize = $_FILES['userfile']['size'][$key];
  31. $fileType = $_FILES['userfile']['type'][$key];
  32.  
  33. if ($fileName==NULL) {print "An error has ocured during sending<script language='javascript'>alert('Nie zaznaczono pliku do wysyłki'); history.back();</script>r"; brak;}
  34. else {
  35.  
  36.  
  37. //move_uploaded_file($tmpName,"upload/$fileName");
  38. //$fileName="upload/$fileName";
  39. $handle = fopen('users.dat','r');
  40. $gets_f = fread ($handle, filesize('users.dat'));
  41. fclose ($handle);
  42. $users_f = explode ("\n",$gets_f);
  43. foreach ($users_f as $values_name) 
  44. {
  45. list ($user_loged, $user_data) = explode (':',$values_name);
  46. if ($user_loged==$_SESSION['user_db']) {
  47. $uzytkownik=substr($user_data,0,30);
  48. }
  49. }
  50.  
  51. $fp = fopen($tmpName, 'r');
  52. $content = fread($fp, $fileSize);
  53. $content = addslashes($content);
  54. fclose($fp);
  55.  
  56. {
  57. $fileName = addslashes($fileName);
  58. }
  59. $root_directory = "./upload/".$_SESSION['ident']."/";
  60.  
  61. if (is_dir($root_directory)) {
  62. if ($dh = opendir($root_directory)) {
  63. $filePath = $root_directory . $fileName;
  64. $ext = substr(strrchr($filename,"."),1);
  65. $randName = md5(rand() * time());
  66.  
  67. //print $randName;
  68. $fullName=$randName.'.'.$ext;
  69. print $fullName;
  70. $filePath = $root_directory . $randName . '.' . $ext;
  71.  
  72. while (file_exists($filePath)) {
  73. $randName = md5(rand() * time());
  74. $fullName=$randName.'.'.$ext;
  75. $filePath = $root_directory . $randName . '.' . $ext;
  76. }
  77. move_uploaded_file($tmpName,$filePath);
  78. }
  79.  
  80. closedir($dh);
  81.  
  82. }
  83. else
  84. {
  85.  
  86. $make_contain = mkdir($root_directory, 0755);
  87.  
  88. if ($make_contain)
  89. {
  90. $filePath = $root_directory . $fileName;
  91. $ext = substr(strrchr($filename,"."),1);
  92. print $ext;
  93. $randName = md5(rand() * time());
  94. //print $randName;
  95. $fullName=$randName.'.'.$ext;
  96. $filePath = $root_directory . $randName . '.' . $ext; 
  97. while (file_exists($filePath)) {
  98. $randName = md5(rand() * time());
  99. $fullName=$randName.'.'.$ext;
  100. $filePath = $root_directory . $randName . '.' . $ext;
  101. }
  102. move_uploaded_file($tmpName,$filePath);
  103. }
  104. }
  105.  
  106. include_once 'library/config.php';
  107. include_once 'library/opendb.php';
  108.  
  109. $query = "INSERT INTO upload (name, size, type, userval,login,id_klienci, hash ) ".
  110.  "VALUES ('$fileName', '$fileSize', '$fileType','$uzytkownik','$_SESSION[user_db]','$_SESSION[ident]','$fullName')";
  111.  
  112. mysql_query($query) or die('Error, query failed');
  113. //include 'library/closedb.php';
  114.  
  115. echo "<br>File $fileName uploaded<br><script>alert('File was uploaded in database'); document.location.href='./download.php';</script>";
  116. }
  117. }
  118. else {
  119.  
  120. print "<script type='text/javascript' language='javascript'>alert('Wystapil Blad:";
  121. switch($_FILES['userfile']['error'][$key]) {
  122. case UPLOAD_ERR_FORM_SIZE:
  123. echo ("Pzrekroczono maksymalny dozwolony rozmiar pliku!");
  124. break;
  125. case UPLOAD_ERR_PARTIAL:
  126. echo ("Odebrano tylko fragment pliku!");
  127. break;
  128. case UPLOAD_ERR_NO_FILE:
  129. echo ("Plik nie zostal pobrany!");
  130. break;
  131. default:
  132. echo ("Nieznany typ bledu!");
  133. }
  134. print "'); history.back();</script>r";
  135. }
  136. }
  137. }
  138. ?>



I tak jak napisałem powyżej, wszystko ładnie działa, z tym, że chciałem teraz dodać również rozróżenienie kategorii do każdego pliku. tzn. formularz powiększył by się o nowe pole lub listę rozwijaną. Teraz jak obsłużyć odbiór kategorii w kodzie powyżej, aby do każdego pliku dodać również odpowiednią kategorię. Jak w ogóle najlepiej obsłużyć to w samym formularzu, gdyż jak się domyślam nie może być pole o takiej samej nazwie category do kliku plików, gdyz skrypt to napewno zinterpretuje źle jeśli chodzi o to co prześle zmienna $_POST[].

  1. function enum($table, $field)
  2. {
  3. $result = @mysql_query("show columns from {$table} like \"$field\"");
  4. $result = @mysql_fetch_assoc($result);
  5. if($result["Type"])
  6. {
  7. preg_match("/(enum((.*?)))/", $result["Type"], $enumArray);
  8. $getEnumSet = explode("'", $enumArray["2"]);
  9. $getEnumSet = preg_replace("/,/", "", $getEnumSet);
  10. $enumFields = array();
  11. foreach($getEnumSet as $enumFieldValue)
  12. {
  13. if($enumFieldValue)
  14. {
  15. $enumFields[] = $enumFieldValue;
  16. }
  17. }
  18. return $enumFields;
  19. }
  20. return "Unable to get enum FIELD {$field} from table {$table}";
  21. }
  22.  
  23. <input type="hidden" name="MAX_FILE_SIZE" value="20000000">
  24. <span id='filearea'><input name="userfile[]" type="file" class="box" id="userfile">
  25. Kategoria:<select name='category' id='category' style='display:inline;'>
  26.  
  27. <?
  28. $category_items=enum("upload","category");
  29.  
  30. foreach ($category_items as $aKeym => $aValuem) 
  31. {
  32. if(!is_array($aValuem)) 
  33. {
  34. print "<option value='".$aValuem."'>".$aValuem."</option>r";
  35. }
  36. }
  37. include 'library/closedb.php';
  38. ?>
  39. </select>
atomp3
ja uzywam klasy IMGMAN jest prosta w konfiguracji i posiada mnostwo funkcji.
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.