Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] while - objaśnienie na przykładzie
shpaque
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Witajcie - to może paradoksalnie śmieszne, ale nigdy wcześniej nie korzystałem z pętli while smile.gif a podejrzewam, że tutaj będzie jak znalazł. Chodzi o zapętlenie dopóki nazwa pliku nie będzie "wolna"

obecnie jest tak:
  1. if (file_exists('./db/upload/'.$fileName.'.'.$fileExtension)) {$newFileName = $fileName.'[1].'.strtolower($fileExtension);}
  2. else {$newFileName = $fileName.'.'.strtolower($fileExtension);}


jest ok, tylko petla wykona się jeden raz, to znaczy kiedy dam plik 1.txt, to za drugim razem mi stworzy 1[1].txt, ale jesli jeszcze raz dam 1.txt to ZNÓW mi stworzy 1[1].txt i bedzie tu juz duplikat

wiec jak powinna wygladac while? cos takiego?
  1. while (!file_exists('./db/upload/'.$fileName.'.'.$fileExtension)) {
  2. $newFileName = $fileName.'[1].'.strtolower($fileExtension);
  3. })


?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale zastanow sie przez chwile. W petli sprawdzasz ciagle ten sam plik, wiec jakim cudem petla ma kiedys przestac? Zdaje sie masz sprawdzac inny plik co nie? wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


to wie,m dlatego zastanawiam sie czy takie cos przejdzie i czy ma sens:
  1. if (file_exists('./db/upload/'.$fileName.'.'.$fileExtension)) {
  2. $countWhile = 1;
  3. $newFileName = $fileName.'['.$countWhile.'].'.$fileExtension;
  4. while (!file_exists('./db/upload/'.$fileName.'['.$countWhile.'].'.$fileExtension)) {
  5. $countWhile++;
  6. $newFileName = $fileName.'['.$countWhile.'].'.$fileExtension;
  7. }
  8. }


czy jednak trzeba pisac 3 razy wiecej i zapetlac wszystkie pliki w katalogu, robic glob'a sprawdzac nazwy, liczyc te nazwy i dopiero dodawac...
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Wykorzystałbym funkcję glob wyszukując po:
  1. $nazwa . "_*." . $rozszerzenie

Mając liczbę znalezionych plików (count) dodajesz automatycznie licznik do nowej nazwy.


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wywal ten IF. wystarczy tylko to:

  1. $newFileName = $fileName.'.'.$fileExtension;
  2. $ = 1;
  3. while (file_exists($newFileName)) {
  4. $i++;
  5. $newFileName = $fileName.'['.$i.']'.'.'.$fileExtension;
  6. }

i juz
A w petli nie negacja tylko czy plik istnieje


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


super, dziękuję bardzo smile.gif

Cytat(nospor @ 7.01.2021, 16:25:55 ) *
Wywal ten IF. wystarczy tylko to:

  1. $newFileName = $fileName.'.'.$fileExtension;
  2. $ = 1;
  3. while (file_exists($newFileName)) {
  4. $i++;
  5. $newFileName = $fileName.'['.$i.']'.'.'.$fileExtension;
  6. }

i juz
A w petli nie negacja tylko czy plik istnieje

nie jednak to nei dziala - zapisuje mi dwa razy tren sam plik...

daje w razie czego cala klamerke

  1. if (isset($_FILES['uploads'])) {
  2. $filesToUpload = $_FILES['uploads'];
  3. $countFilesToUpload = count($filesToUpload['name']);
  4. $counter = 0;
  5. for ($i = 0; $i < $countFilesToUpload; $i++) {
  6. $newFileId = newStringId(8);
  7. $fileExtension = explode('.', $filesToUpload['name'][$i]);
  8. $fileExtension = strtolower(end($fileExtension));
  9. $fileName = str_replace('.'.$fileExtension, '', $filesToUpload['name'][$i]);
  10. if (in_array($fileExtension, $allowedExtensions)) {
  11. $newFileName = $fileName.'.'.$fileExtension;
  12. $countWhile = 1;
  13. while (file_exists($newFileName)) {
  14. $countWhile++;
  15. $newFileName = $fileName.'['.$i.'].'.$fileExtension;
  16. }
  17. move_uploaded_file($filesToUpload['tmp_name'][$i], './db/upload/'.$newFileName);
  18. // Dodajmy wpis do bazy danych
  19. $newFile = $loadPageDataBase -> files -> addChild('file', $newFileName);
  20. $newFile -> addAttribute('id', $newFileId);
  21. $newFile -> addAttribute('title', '');
  22.  
  23. $counter++;
  24. }
  25. }
  26. }


ło matko jakie przeoczenie az wstyd smile.gif

  1. $newFileName = $fileName.'['.$countWhile.'].'.$fileExtension;


...jednak mimo tej poprawki dalje tworzy caly czas ten sam plik - czyli po prostu while nie dziala
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pokaz kod po poprawkach bo juz nie wiem jaka masz wersje wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


  1. if (isset($_FILES['uploads'])) {
  2. $filesToUpload = $_FILES['uploads'];
  3. $countFilesToUpload = count($filesToUpload['name']);
  4. $counter = 0;
  5. for ($i = 0; $i < $countFilesToUpload; $i++) {
  6. $newFileId = newStringId(8);
  7. $fileExtension = explode('.', $filesToUpload['name'][$i]);
  8. $fileExtension = strtolower(end($fileExtension));
  9. $fileName = str_replace('.'.$fileExtension, '', $filesToUpload['name'][$i]);
  10. if (in_array($fileExtension, $allowedExtensions)) {
  11. $newFileName = $fileName.'.'.$fileExtension;
  12. $countWhile = 1;
  13. while (file_exists($newFileName)) {
  14. $countWhile++;
  15. $newFileName = $fileName.'['.$countWhile.'].'.$fileExtension;
  16. }
  17. move_uploaded_file($filesToUpload['tmp_name'][$i], './db/upload/'.$newFileName);
  18. // Dodajmy wpis do bazy danych
  19. $newFile = $loadPageDataBase -> files -> addChild('file', $newFileName);
  20. $newFile -> addAttribute('id', $newFileId);
  21. $newFile -> addAttribute('title', '');
  22.  
  23. $counter++;
  24. }
  25. }
  26. }
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale panie kolego, jaj sobie ze mnie nie rob tongue.gif

W while sprawdzasz teraz tylko $newFileName a do upload robisz sciezke './db/upload/'.$newFileName... no przeciez to sa dwie rozne lokalizacje. W while tez masz sprawdzac './db/upload/'.$newFileName


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post
Post #10





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Faktycznie niezłe przeoczenie smile.gif Teraz jest bosko i wszystko hula jak powinno - dziękuję bardzo; Zmieniłem jeszcze początkowy count dla while na "0" bo i tak liczy przed sprawdzeniem więc wtedy zaczyna od 1...

Cała klamerka wyglądać powinna właśnie tak:

  1. // W tym kroku sprawdźmy, czy nie należy dodać jakichś plików
  2. if (isset($_FILES['uploads'])) {
  3. $filesToUpload = $_FILES['uploads'];
  4. $countFilesToUpload = count($filesToUpload['name']);
  5. $counter = 0;
  6. for ($i = 0; $i < $countFilesToUpload; $i++) {
  7. $newFileId = newStringId(8);
  8. $fileExtension = explode('.', $filesToUpload['name'][$i]);
  9. $fileExtension = strtolower(end($fileExtension));
  10. $fileName = str_replace('.'.$fileExtension, '', $filesToUpload['name'][$i]);
  11. if (in_array($fileExtension, $allowedExtensions)) {
  12. $newFileName = $fileName.'.'.$fileExtension;
  13. $countWhile = 0;
  14. while (file_exists('./db/upload/'.$newFileName)) {
  15. $countWhile++;
  16. $newFileName = $fileName.'['.$countWhile.'].'.$fileExtension;
  17. }
  18. move_uploaded_file($filesToUpload['tmp_name'][$i], './db/upload/'.$newFileName);
  19. // Dodajmy wpis do bazy danych
  20. $newFile = $loadPageDataBase -> files -> addChild('file', $newFileName);
  21. $newFile -> addAttribute('id', $newFileId);
  22. $newFile -> addAttribute('title', '');
  23.  
  24. $counter++;
  25. }
  26. }
  27. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 06:11