Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php i jquery] Dodawanie plików na serwer
Forum PHP.pl > Forum > PHP
Mayka
Witam wszystkich ponownie, mam kolejny dziwny problem, potrzebuje zrobić dodawanie zdjęć na serwer.. Przejzałem sporo róznych dziwnych rozwiązań i zdecydowałem sie na jquery z php tylko teraz chciałbym was zapytać jak to zrobić inaczej. Potrzebuje żeby skrypt sprawdził najpierw czy pliki wogole są dodane przez urzytkownika, a jeśli tak to żeby sprawdził czy sie dodały poprawnie i dopiero dodał to co sie dodało do bazy mysql.
Zrobiłem to tak..
  1. if ($_FILES['file']['size']>0 || $_FILES['file2']['size']>0){
  2. if (((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg"))
  3. && ($_FILES["file"]["size"] < 200000)) || ((($_FILES["file2"]["type"] == "image/gif") || ($_FILES["file2"]["type"] == "image/jpeg")
  4. || ($_FILES["file2"]["type"] == "image/jpg")) && ($_FILES["file2"]["size"] < 200000)))
  5. $uploaddir = 'upl/';
  6. $rozszerzenie = explode(".", $_FILES['file']['name']);
  7. $rozszerzenie2 = explode(".", $_FILES['file2']['name']);
  8. $liczby=mt_rand(0,999999);
  9. $liczby2=mt_rand(0,999999);
  10. $za='.';
  11. $plik1=$liczby.$za.$rozszerzenie[1];
  12. $plik2=$liczby2.$za.$rozszerzenie2[1];
  13. if(move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir.$liczby.$za.$rozszerzenie[1]))
  14. {
  15. echo 'Plik został załadowany poprawnie: ';
  16. echo $plik1;
  17. echo '<br>';
  18. mysql_query("UPDATE zdjecia SET url_zdj1 = '$plik1' WHERE id='$ident'");
  19. tworzminiature($plik1);
  20. }
  21. else{
  22. if($_FILES["file"]["error"] = '4' || $_FILES["file"]["error"] = '0')
  23. {echo '';}
  24. else{
  25. echo "Błąd dodawania pliku: " . $_FILES["file"]["error"] . "<br />";
  26. }
  27. }
  28. if(move_uploaded_file($_FILES['file2']['tmp_name'], $uploaddir.$liczby2.$za.$rozszerzenie2[1]))
  29. {
  30. echo 'Plik został załadowany poprawnie: ';
  31. echo $plik2;
  32. echo '<br>';
  33. mysql_query("UPDATE zdjecia SET url_zdj2 = '$plik2' WHERE id='$ident'");
  34. tworzminiature($plik2);
  35. }
  36. else{
  37. if($_FILES["file2"]["error"] = '4' || $_FILES["file2"]["error"] = '0'){echo '';}else{
  38. echo "Błąd dodawania pliku: " . $_FILES["file2"]["error"] . "<br />";
  39. }
  40. }
  41. }
  42. else{
  43. echo "Plik jest za duży lub ma nie odpowiedni format";
  44. }
  45. }
  46. else{
  47. echo"Nie dodano plików na serwer";
  48. }


Samo dodawnie jest już walidowane przez jquery przy pomocy Multiple File upload, ale to nie wiele daje(nie liczac tego że mam wstepnie zabezpiecznie przed *.exe itp.), można zrobić np coś takiego że w momęcie dodawania jakiegoś zdjecia java dodawała pole typu hidden ? np. jeśli dodane zostanie jakiekolwiek zdjecia to przesyłane jest również pole <input type="hidden" name="czyjest" value="jest"> ?
Ew. jak by ktoś mogł pomoc jak to inaczej zrobić ?

Widzę że albo namotałem strasznie albo nikt niema pomysłu.. A może można zrobić to za pomocą javascriptu? Znaczy java sprawdza ile plików zostało dodane i dodaje do ukrytego pola wartość (1-3) i wtedy w pętli po kolei dodawane są pliki ?
CuteOne
if($_FILES["file"]["error"] = '4' || $_FILES["file"]["error"] = '0')

nie = tylko ==

Cytat
żeby sprawdził czy sie dodały poprawnie i dopiero dodał to co sie dodało do bazy mysql

.... ?

Dodawanie wielu plików masz opisane w manualu pod move_uploaded_file bo to co napisałeś jest z deczka bezsensu
Mayka
Cytat(CuteOne @ 11.11.2011, 10:53:09 ) *
if($_FILES["file"]["error"] = '4' || $_FILES["file"]["error"] = '0')

nie = tylko ==


.... ?

Dodawanie wielu plików masz opisane w manualu pod move_uploaded_file bo to co napisałeś jest z deczka bezsensu


Chodziło mi o to żeby dodać nazwe pliku do bazy mysql, ale przejże to o jest w tym manualu, dzieki. Może coś innego wymyśle w takim razie..

To znalazłem w manualu, reszte sobie dorobie co potrzebuje..
  1. foreach ($_FILES["pictures"]["error"] as $key => $error) {
  2. if ($error == UPLOAD_ERR_OK) {
  3. $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
  4. $name = $_FILES["pictures"]["name"][$key];
  5. move_uploaded_file($tmp_name, "$uploads_dir/$name");
  6. }


Tylko teraz powiedzcie mi co z formularzem ?
Jeśli będzie kilka plików ?
  1. echo "<form enctype='multipart/form-data' action='multiple.php' method='POST'>";
  2. echo "File:<input name='pictures' type='file'/><input name='pictures' type='file'/><input type='submit' value='Upload'/>";
  3. echo "</form>";

I już ? czy to jakaś bardziej skomplikowana operacja ?
CuteOne
name='pictures' podmień na name='pictures[]' dzięki temu tworzysz tablice

a w php
  1. foreach($_FILES['pictures'] as $k => $v) { }

Mayka
Dobra wymodziłem sobie takie coś tylko teraz mam pytanie jak zrobić żeby on najpierw sprawdził te pliki a pozniej dopiero zrobił ich upload ?
Czy tutaj tylko JS albo coś takiego ?

  1. $uploads_dir = './tst';
  2. foreach ($_FILES["pictures"]["error"] as $key => $error) {
  3. if ($error == UPLOAD_ERR_OK) {
  4. $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
  5. $userfile = $_FILES['pictures']['name'][$key];
  6. $randomizer = rand(0000, 9999);
  7. $userfile = $randomizer.$userfile;
  8. $file_type = $userfile;
  9. $file_type_length = strlen($file_type) - 3;
  10. $file_type = substr($file_type, $file_type_length);
  11. $file_type = strtolower($file_type);
  12. $files = array();
  13. $files[] = 'jpeg';
  14. $files[] = 'jpg';
  15. $files[] = 'gif';
  16. $files[] = 'png';
  17. $keay = array_search($file_type, $files);
  18. if($keay) {
  19. $MAXFILESIZE = 20024;
  20. $size = $_FILES["pictures"]["size"][$key];
  21. if($size<$MAXFILESIZE){
  22. if(move_uploaded_file($tmp_name, "$uploads_dir/$userfile")){
  23. echo 'ok';
  24. }
  25. else{echo 'blad';
  26. }
  27.  
  28. }
  29. else{
  30. echo 'Plik '.$key.' za duzy';
  31. exit();
  32. }
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.