Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Upload plików z dodaniem ich nazw do bazy danych
Forum PHP.pl > Forum > Przedszkole
d0m1n1k_
Witam,

napisałem - z dużymi trudnościami - poniższy uploader.
  1. <?php
  2. $valid_formats = array("jpg", "png");
  3. $max_file_size = 1280*1024;
  4. $path = "uploads/"; // Miejsce uploadu
  5. $count = 0;
  6.  
  7. if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
  8.  
  9. foreach ($_FILES['files']['name'] as $f => $name) {
  10. if ($_FILES['files']['error'][$f] == 4) {
  11. continue; // Pomin jesli sa bledy
  12. }
  13. if ($_FILES['files']['error'][$f] == 0) {
  14. if ($_FILES['files']['size'][$f] > $max_file_size) {
  15. $message[] = "$name jest za duzy!.";
  16. continue; // Nie dla duzych plikow
  17. }
  18. elseif( ! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats) ){
  19. $message[] = "$name ma zly format";
  20. continue; // Nie dla nie zdjec
  21. }
  22. else{ //Działa to działamy.
  23. if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path.$name))
  24. $count++; // ile sie udalo
  25. }
  26. }
  27. }
  28. }
  29. ?>

  1. <html lang="pl">
  2. <meta charset="UTF-8" />
  3. <title>Multiplikowy uploader</title>
  4. </head>
  5. <form action="" method="post" enctype="multipart/form-data">
  6. <input type="file" id="file" name="files[]" multiple="multiple" accept="image/*" />
  7. <input type="submit" value="Uploaduj!" />
  8. </form>
  9. </body>
  10. </html>


Wszystko działa pięknie.
Ale teraz mam dodatkowy problem.
Chciałbym:
  • ograniczyć liczbę plików do 10 zdjęć;
  • zmieniać nazwy na niepowtarzalne ciągi znaków (np. rand() + md5());
  • wstawić nazwy plików do tabeli (max 10 zdjęć, bo 10 kolumn na zdjęcia);
  • dodać pasek postępu - mało istotne, ale by to poprawiło zrozumienie "mielenie" przy kliknięciu "Uploaduj!";
  • generować miniaturkę, lub przynajmniej powielić wysłanie pierwszego zdjęcia (jako photo0 i thumbnail);


Tabela wygląda następująco
  1. id | usr | productid | photo0 | photo1 | ... | photo5 | ... | photo9 | thumbnail | addeddate
Turson
Cytat
ograniczyć liczbę plików do 10 zdjęć;

wyprintuj sobie tablicę $_FILES po przesłaniu 1 albo 2 plików, znajdź różnicę, Jak znajdziesz, to pomoże warunek
  1. if(count(coś_magicznego_co_musisz_znaleźć) > 10) wywal error

Cytat
zmieniać nazwy na niepowtarzalne ciągi znaków (np. rand() + md5());

no to chyba nie problem dać md5(rand(0,12345).$name)) co nie?
Cytat
wstawić nazwy plików do tabeli (max 10 zdjęć, bo 10 kolumn na zdjęcia);

tam gdzie masz else{} wstawiasz zapytanie INSERT
Cytat
dodać pasek postępu - mało istotne, ale by to poprawiło zrozumienie "mielenie" przy kliknięciu "Uploaduj!";

a tak, zwykłe bajer. Zawsze możesz dać zwykły progress bar odświeżany co ileś ms w javascript nieodwzorowujący uploadu smile.gif
Cytat
generować miniaturkę, lub przynajmniej powielić wysłanie pierwszego zdjęcia (jako photo0 i thumbnail);

Pobierz bibliotekę WideImage i prosto wygenerujesz zeskalowaną dobrze miniaturę.
@rtur
sama zmiana nazwy uploadowanego obrazka data_czas + md5

  1. $plik_tmp = $_FILES['file']['tmp_name'];
  2. $obrazek = $_FILES['file'];
  3. $output_dir = 'uploads/';
  4. if ($obrazek['name']<>'') {
  5. $mtError = true;
  6. if ($obrazek['type']=='image/jpeg') {$ext='jpg';$mtError = false;}
  7. elseif ($obrazek['type']=='image/pjpeg') {$ext='jpg';$mtError = false;}
  8. elseif ($obrazek['type']=='image/gif') {$ext='gif';$mtError = false;}
  9. elseif ($obrazek['type']=='image/png') {$ext='png';$mtError = false;}
  10. if(!$mtError){
  11. $nazwaPliku = md5(strtolower(date('Y-m-d h:i:s'))).'.'.$ext;
  12. if(is_uploaded_file($plik_tmp)) {
  13. move_uploaded_file($plik_tmp, $output_dir.$nazwaPliku);
  14. echo 'Plik: <strong>'.$obrazek['name'].'</strong> został przesłany na serwer! nowa nazwa pliku <strong>'.$nazwaPliku.'</strong>'; }
  15. }
  16. }
d0m1n1k_
Gimnastykowałem się jak tylko mogłem.
Obecnie działa, ale...
Mam nieodparte wrażenie, że tak jak napisałem, jest baaardzo niepoprawne.
Może mi ktoś tu pomóc? I poprawić skrypt?

  1. if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
  2.  
  3. foreach ($_FILES['files']['name'] as $f => $name) {
  4. if ($_FILES['files']['error'][$f] == 4) {
  5. continue; // Pomin jesli sa bledy
  6. }
  7. if ($_FILES['files']['error'][$f] == 0) {
  8. if ($_FILES['files']['size'][$f] > $max_file_size) {
  9. $message[] = "$name jest za duzy!.";
  10. continue; // Nie dla duzych plikow
  11. }
  12. elseif( ! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats) ){
  13. $message[] = "$name ma zly format";
  14. continue; // Nie dla nie zdjec
  15. }else{
  16. if($count <= 9){ //Działa to działamy. I działamy do 10 pliku włącznie.
  17. $rozszerzenie = pathinfo($_FILES["files"]["name"][$f], PATHINFO_EXTENSION);
  18. $newnamee = date('YmdHis') . md5(rand(1,9999999)) . "." . $rozszerzenie;
  19. if(move_uploaded_file($_FILES['files']['tmp_name'][$f], $path.$newnamee))
  20. $newnamss[$count] = array($count => $newnamee);
  21. $count++;
  22. }
  23. }
  24. }
  25. }
  26.  
  27. $zdjecie_00 = $newnamss[0][0];
  28. $zdjecie_01 = $newnamss[1][1];
  29. $zdjecie_02 = $newnamss[2][2];
  30. $zdjecie_03 = $newnamss[3][3];
  31. $zdjecie_04 = $newnamss[4][4];
  32. $zdjecie_05 = $newnamss[5][5];
  33. $zdjecie_06 = $newnamss[6][6];
  34. $zdjecie_07 = $newnamss[7][7];
  35. $zdjecie_08 = $newnamss[8][8];
  36. $zdjecie_09 = $newnamss[9][9];
  37. $db_user = '1'; //dane tymczasowe
  38. $db_idnumber = '207'; //dane tymczasowe
  39. $add_to_db = mysql_query("INSERT INTO `productsphts`(`id`, `usr`, `productid`, `photo0`, `photo1`, `photo2`, `photo3`, `photo4`, `photo5`, `photo6`, `photo7`, `photo8`, `photo9`, `addeddate`, `thumbnail`) VALUES (NULL, '$db_user', '$db_idnumber', '$zdjecie_00', '$zdjecie_01', '$zdjecie_02', '$zdjecie_03', '$zdjecie_04', '$zdjecie_05', '$zdjecie_06', '$zdjecie_07', '$zdjecie_08', '$zdjecie_09', NOW(), '$zdjecie_01')");
  40. }


Będę bardzo wdzięczny za pomoc.
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.