Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Upload system - co tu jest nie tak
Forum PHP.pl > Forum > Przedszkole
Kam1k
Wycinek kodu, co tu jest nie tak. Chciałbym aby podczas przesyłania tego samego pliku pokazywało że TAKI PLIK JUŻ ISTNIEJE, a pokazuje mi komunikat SUKCESYWNY :/

  1. <?php
  2. if(isset($_FILES['image'])){
  3. $errors= array();
  4. $target_dir = "images/";
  5. $target_file = $target_dir . basename($_FILES["image"]["name"]);
  6. $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
  7.  
  8. $checking = 1;
  9.  
  10. // Dodatki
  11. $pU_url = 'xxx/upload/images/';
  12. $pU_bbcode_1 = 'xxx/upload/images/';
  13. $pU_bbcode_2 = 'xxx';
  14.  
  15. // Glowne zmienne
  16. $file_name = $_FILES['image']['name'];
  17. $file_size = $_FILES['image']['size'];
  18. $file_tmp = $_FILES['image']['tmp_name'];
  19. $file_type = $_FILES['image']['type'];
  20.  
  21. $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
  22.  
  23. //Rozszerzenia dostepne
  24. $expensions= array("jpeg","jpg","png", "gif", "bmp");
  25.  
  26.  
  27. // Sprawdzanie = Czy plik istnieje?
  28. if (file_exists($target_file)) {
  29. $errors[]= "<p><font color=red>Zmien nazwe pliku, poniewaz jest juz taki w bazie</font></p>";
  30. $checking = 0;
  31. }
  32.  
  33. // Sprawdzenie = Czy plik ma odpowiedni rozmiar?
  34. if($file_size > 52428800) {
  35. $errors[]='<p><font color=red>Maksymalny rozmiar pliku to 50MB, w ciagu 24h mozesz przeslac 100MB!</font></p>';
  36. $checking = 0;
  37. }
  38.  
  39. // Sprawdzenie = Czy plik ma odpowiednie rozszerzenie?
  40. if(in_array($file_ext,$expensions)=== false){
  41. $errors[]="<p><font color=red>Rozszerzenie pliku nie jest poprawne, obslugujemy tylko formaty zawarte w regulaminie</font></p>";
  42. $checking = 0;
  43. }
  44.  
  45. if ($checking == 0) {
  46. echo implode('<br>', $errors); // Pierw sprawdza czy nie ma bledow
  47. } else { // Jeśli CHECKING = 1 - wszystko jest OK - pokaze komunikat sukcesywny
  48. if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
  49. echo "<p><font color='green'>Brawo! Twoj plik zostal pomyslnie przeslany, ponizej wypisano szczegoly<br>Uploaduj wiecej jesli tylko chcesz!</font></p>";
  50. }
  51. }
  52. }
  53. ?>
  54. <br>
  55. <form action = "" method = "POST" enctype = "multipart/form-data">
  56. <input type = "file" name = "image" />
  57. <input type = "submit" title = "Przeslij plik!"/>
  58. <hr>
  59. <ul>
  60. <li>Twoj plik:<br>
  61. <?php echo $_FILES['image']['name']; ?>
  62. <li>Rozmiar:<br>
  63. <?php echo $_FILES['image']['size']; ?>
  64. <li>Typ:<br>
  65. <?php echo $_FILES['image']['type'] ?>
  66. <li>Link:<br>
  67. <?php echo $pU_url.$_FILES['image']['name'] ?>
  68. <li>BBCode IMG:<br>
  69. <?php echo $pU_bbcode_1.$_FILES['image']['name'].$pU_bbcode_2 ?>
  70. </ul>
  71.  
  72. </form>
Pyton_000
Bo masz sprawdzać czy $target_file instnieje a nie $_FILE
Kam1k
Nawet po poprawce

  1. Notice: Undefined index: url in xxxxxupload\index.php on line 48
  2.  
  3. Notice: Undefined index: bbcode in xxxxxupload\index.php on line 49
  4.  
  5. Warning: Illegal string offset 'image' in xxxxx\upload\index.php on line 67
  6.  
  7. Warning: Illegal string offset 'name' in xxxxx\upload\index.php on line 67
  8.  
  9. Brawo! Twoj plik zostal pomyslnie przeslany, ponizej wypisano szczegoly
  10. Uploaduj wiecej jesli tylko chcesz!
nospor
Od kiedy pola FILES maja URL czy BBCODE??

Przenosze. I nie uzywaj bbcode MANUAL do wklejania komunikatow bledow:/
Kam1k
Cytat(nospor @ 8.06.2017, 12:25:40 ) *
Od kiedy pola FILES maja URL czy BBCODE??

Przenosze. I nie uzywaj bbcode MANUAL do wklejania komunikatow bledow:/


Wiem wiem, mój bład z tym manual ale od razu poprawiłem.
Z tym url i bbcode to robiłem dla testu bo chciałem coś sprawdzić, więc na to nie ma co patrzeć.

Chciałbym tylko aby zwracało komunikat jeśli plik już jest w folderze images
nospor
Cytat
więc na to nie ma co patrzeć.
To moze nie marnuj juz wiecej naszego czasu i pokaz poprawny wg ciebie kod, dokladnie bledy jakie zwraca, ze wskazaniem w kodzie, ktore to linie.
Kam1k
Cytat(nospor @ 8.06.2017, 12:58:08 ) *
To moze nie marnuj juz wiecej naszego czasu i pokaz poprawny wg ciebie kod, dokladnie bledy jakie zwraca, ze wskazaniem w kodzie, ktore to linie.


Powtórzę po raz kolejny

Kod
Warning: Illegal string offset 'image' in C:\xampp\htdocs\phpBB3\upload\index.php on line 66

Warning: Illegal string offset 'name' in C:\xampp\htdocs\phpBB3\upload\index.php on line 66

Brawo! Twoj plik zostal pomyslnie przeslany, ponizej wypisano szczegoly
Uploaduj wiecej jesli tylko chcesz!


Linia 66, jednak że jest to wycinek całości to tutaj jest to w Lini 35, a cały kod jest w temacie, jednak dla ułatwienia:

Kod
     // Sprawdzanie pliku
     if (file_exists($target_file['image']['name'])) {
        echo "<p><font color=\'red\'>Zmien nazwe pliku, poniewaz jest juz taki w bazie</font></p>";
        $checking = 1;
     }


I powtórzę po raz kolejny. Chodzi mi tylko i wyłącznie o to, gdy wrzucamy plik na upload i jest już taki w folderze /images/ to zamiast pokazywać SUKCES, ma pokazywać, że JEST JUŻ TAKI W BAZIE. Ewentualnie aby zmieniał nazwę kodując, ale taki wymagający nie jestem.
Pyton_000
nie `$target_file['image']['name']` a `$target_file`
Kam1k
Cytat(Pyton_000 @ 8.06.2017, 13:12:34 ) *
nie `$target_file['image']['name']` a `$target_file`


Dzięki wielkie, pomogło. Jednak komunikaty są błędne, pokazuje:

Kod
Zmien nazwe pliku, poniewaz jest juz taki w bazie

Brawo! Twoj plik zostal pomyslnie przeslany, ponizej wypisano szczegoly
Uploaduj wiecej jesli tylko chcesz!


Pierwsze zdanie - jak najbardziej!
Jednak zwraca także ten komunikat o sukcesie :/

Ogólnie cały skrypt tak samo nie przestrzega limitów i reguł, że ma obsługiwać tylko te formaty

Kod
      $expensions= array("jpeg","jpg","png", "gif", "bmp");


A cokolwiek bym wrzucił to dodaje, pewnie także omija filtr limitu 50MB

//edit
Poprawiłem cały kod w temacie
nospor
Co z tego ze robisz IFy na rozszerzenia i rozmiar jak potem nic z tym nie robisz. UPLOAD robisz bezwarunkowo.
To samo z takim samym plikiem. Najpierw robisz UPLOAD, wyswietlasz ze ok, a dopiero potem sprawdzasz czy plik istnieje ... Gdzie logika? Tak, plik bedzie istnial, bo dopiero co go tam wrzuciles
Kam1k
Spróbowałem jeszcze w ten sposób, jednak zwraca mi tylko Zmien nazwe pliku, poniewaz jest juz taki w bazie

  1. if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
  2.  
  3. // Limity
  4. if(in_array($file_ext,$expensions)=== false){
  5. $errors[]="<p><font color=red>Rozszerzenie pliku nie jest poprawne, obslugujemy tylko formaty zawarte w regulaminie</font></p>";
  6. }
  7.  
  8. if($file_size > 52428800) {
  9. $errors[]='<p><font color=red>Maksymalny rozmiar pliku to 50MB, w ciagu 24h mozesz przeslac 100MB!</font></p>';
  10. }
  11.  
  12. // Sprawdzanie pliku
  13. if (file_exists($target_file)) {
  14. echo "<p><font color=red>Zmien nazwe pliku, poniewaz jest juz taki w bazie</font></p>";
  15. }
  16.  
  17. } else {
  18. echo "<p><font color='green'>Brawo! Twoj plik zostal pomyslnie przeslany, ponizej wypisano szczegoly<br>Uploaduj wiecej jesli tylko chcesz!</font></p>";
  19. }
nospor
Pozwol ze zacytuje ciebie
I powtórzę po raz kolejny.

Najpierw masz sprawdzac, czy mozna robic upload, dopiero potem masz robic upload a nie na odwrot.
Kam1k
Cytat(nospor @ 8.06.2017, 15:08:09 ) *
Pozwol ze zacytuje ciebie
I powtórzę po raz kolejny.

Najpierw masz sprawdzac, czy mozna robic upload, dopiero potem masz robic upload a nie na odwrot.


Wiem o co chodzi, widzę to, tylko problem w tym, że nie wiem jak to napisać, zamienić, ale rozumiem że

  1. if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {


Musi być na samym końcu. No ale dobra, zacznę od początku, człowiek na błędach się uczy.

Chyba mi się udało, dodałem checking = 0 aby sprawdzał zrobiłem coś takiego:

  1. // Sprawdzanie = Czy plik istnieje?
  2. if (file_exists($target_file)) {
  3. echo "<p><font color=red>Zmien nazwe pliku, poniewaz jest juz taki w bazie</font></p>";
  4. $checking = 0;
  5. }
  6.  
  7. // Sprawdzenie = Czy plik ma odpowiedni rozmiar?
  8. if($file_size > 52428800) {
  9. $errors[]='<p><font color=red>Maksymalny rozmiar pliku to 50MB, w ciagu 24h mozesz przeslac 100MB!</font></p>';
  10. $checking = 0;
  11. }
  12.  
  13. // Sprawdzenie = Czy plik ma odpowiednie rozszerzenie
  14. if(in_array($file_ext,$expensions)=== false){
  15. $errors[]="<p><font color=red>Rozszerzenie pliku nie jest poprawne, obslugujemy tylko formaty zawarte w regulaminie</font></p>";
  16. $checking = 0;
  17. }
  18.  
  19. if ($checking == 0) {
  20. echo " ";
  21. } else { // Jeśli sprawdzenie = OK = plik zostanie przeslany na serwer
  22. if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
  23. echo "<p><font color='green'>Brawo! Twoj plik zostal pomyslnie przeslany, ponizej wypisano szczegoly<br>Uploaduj wiecej jesli tylko chcesz!</font></p>";
  24. }
  25. }


Zwraca mi komunikat gdy sukcesywny oraz negatywny jednak jest ostatni problem przy przesyłaniu pliku z innym rozszerzeniem - wtedy nie pokazuje nic sad.gif
nospor
No a co ma ci niby zwracac skoro dla bledow dales
echo " ";
Kam1k
Cytat(nospor @ 8.06.2017, 16:01:39 ) *
No a co ma ci niby zwracac skoro dla bledow dales
echo " ";


Nie do końca rozumiem jak chcesz mnie nakierować, zamiast echo mam dać $errors[]=" "; ?
Skoro tak.. spróbuje, zobaczę i dam znać
Pyton_000
Ehh..

Skoro dodajesz błędy do tablicy `$errors[]` to wypadałoby wyświetlić je np.

`echo implode('<br>', $errors);`
Kam1k
DZIĘKI POMOGŁO!

Została ostatnia rzecz

Jak wchodzę na ten swój upload to pokazuje mi błędy, a jeszcze nic nie jest że tak powiem robione. Pytanie czemu?
Jednak już teraz cały skrypt działa prawidłowo

  1.  
  2. Twoj plik:
  3.  
  4. Notice: Undefined index: image in C:\xampp\htdocs\phpBB3\upload\index.php on line 88
  5. Rozmiar:
  6.  
  7. Notice: Undefined index: image in C:\xampp\htdocs\phpBB3\upload\index.php on line 90
  8. Typ:
  9.  
  10. Notice: Undefined index: image in C:\xampp\htdocs\phpBB3\upload\index.php on line 92
  11. Link:
  12.  
  13. Notice: Undefined index: image in C:\xampp\htdocs\phpBB3\upload\index.php on line 94
  14.  
  15. Notice: Undefined variable: pU_url in C:\xampp\htdocs\phpBB3\upload\index.php on line 94
  16. BBCode IMG:
  17.  
  18. Notice: Undefined index: image in C:\xampp\htdocs\phpBB3\upload\index.php on line 96
  19.  
  20. Notice: Undefined variable: pU_bbcode_1 in C:\xampp\htdocs\phpBB3\upload\index.php on line 96
  21.  
  22. Notice: Undefined variable: pU_bbcode_2 in C:\xampp\htdocs\phpBB3\upload\index.php on line 96


Te błędy mam na stronie głównej jak tylko wejdę :/
Pyton_000
Przecież masz wyjaśnione...
Kam1k
Cytat(Pyton_000 @ 9.06.2017, 09:01:13 ) *
Przecież masz wyjaśnione...


Zamieniłem wszystko, jedyne echo które zostało to już na HTML'u
  1. <li>Twoj plik:<br>
  2. <?php echo $_FILES['image']['name']; ?>
  3. <li>Rozmiar:<br>
  4. <?php echo $_FILES['image']['size']; ?>
  5. <li>Typ:<br>
  6. <?php echo $_FILES['image']['type'] ?>
  7. <li>Link:<br>
  8. <?php echo $pU_url.$_FILES['image']['name'] ?>
  9. <li>BBCode IMG:<br>
  10. <?php echo $pU_bbcode_1.$_FILES['image']['name'].$pU_bbcode_2 ?>



//Zaktualizowałem cały kod w temacie na początku
Pyton_000
Przecież zanim wyślesz plik to nie masz nic w $_FILES.
Kam1k
Cytat(Pyton_000 @ 9.06.2017, 11:45:48 ) *
Przecież zanim wyślesz plik to nie masz nic w $_FILES.


No dobrze rozumiem, ale jak to usunę to nic nie będzie się wyświetlać
Pyton_000
No Ty chyba sobie żarty robisz?
Ujmij cały blok <ul> w warunek sprawdzający czy jest coś prezsłane i tyle...
Kam1k
Git majonez. Dzięki wielkie, dopiero co zaczynam w temacie PHP, ale troszkę pogłówkowane i jakoś jakoś.
Co zrobiłem dalej:
  1. if ($checking == 0) {
  2. echo implode('<br>', $errors); // Pierw sprawdza czy nie ma bledow
  3. } else { // Jeśli CHECKING = 1 - wszystko jest OK - pokaze komunikat sukcesywny
  4. if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
  5. echo "<p class='alert-box success'>Brawo! Twoj plik zostal pomyslnie przeslany, ponizej wypisano szczegoly<br>Uploaduj wiecej jesli tylko chcesz!</p>";
  6. }
  7. }


Dodałem po echo:
  1. $lastchecking = 1;


oraz na początku kodu
  1. $lastchecking = 0;


Po czym już w ul:
  1. .... <ul>
  2. <li>Twoj plik:<br>
  3. <div id='kod'><font color='white'>
  4. <?php
  5. if (isset ($lastchecking)) {
  6. echo $_FILES['image']['name'];
  7. } else {
  8. echo ' ';
  9. }
  10. ?> ....

I wszystko pięknie gra i buczy wink.gif

Jeszcze jakbyście pokierowali mnie lub pokazali jak zrobić aby użytkownik w ciągu 24h może przesłać maxymalnie 100MB na plikach oraz aby
  1. <li>BBCode IMG:<br>
  2. <div id='kod'><font color='white'>
  3. <?php
  4. while($expensions == array("jpeg","jpg","png", "gif", "bmp")) {
  5. if (isset ($lastchecking)) {
  6. echo $pU_bbcode_1.$_FILES['image']['name'].$pU_bbcode_2;
  7. } else {
  8. echo ' ';
  9. }
  10. }
  11. ?>
  12. </font></div>


Pokazywało się wtedy i tylko wtedy gdy przesłany plik będzie obrazkiem (to wtedy pokazuje się linia BBCode IMG z
bo aktualnie próbuje coś co widać na powyższym kodzie, jednak bez rezultatu
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.