Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Upload wielu plików + dodawanie do bazy
Krkol
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 9.03.2018

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


Witam.
Od paru godzin głowię się nad stworzeniem skryptu, który prześle kilka plików na serwer oraz zapisze do bazy informacje o nich.

Formularz:
  1. <form method="POST" name="add" action="add.php" enctype="multipart/form-data" accept="jpg, jpeg, png, gif">
  2. <tr>
  3. <td>
  4. <input type="text" name="tytul" placeholder="Tytuł">
  5. </td>
  6. </tr>
  7. <tr>
  8. <td>
  9. Zdjęcie główne
  10. </td>
  11. <td>
  12. <input type="file" name="obraz-glowny" />
  13. </td>
  14. </tr>
  15. <tr>
  16. <td>
  17. Zdjęcia do galerii
  18. </td>
  19. <td>
  20. <input type="file" name="file[]" multiple="multiple" />
  21. </td>
  22. </tr>
  23. <tr>
  24. <td>
  25. <input type="submit" name="submit" value="Wyślij">
  26. </td>
  27. </tr>
  28. </table>
  29. </form>


Tu sprawa jest prosta... Zdjęcie główne ładnie się uploaduje i zapisuje do bazy. Problem jest, gdy chcę wrzucić kilka zdjęć przez "Zdjęcia do galerii".
Skrypt obsługujący wysyłkę:

  1. function losuj () {
  2. $znaki = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
  3. $i3 = 0;
  4. while ($i3 <= 25) {
  5. $numer3 = rand() % 33;
  6. $tmp3 = substr($znaki, $numer3, 1);
  7. $haslo3 = $haslo3 . $tmp3;
  8. $i3++;
  9. }
  10. return $haslo3;
  11. }
  12.  
  13. foreach ($_FILES['file']['name'] as $filename) {
  14.  
  15. $nazwa2 = explode( '/' , $filename );
  16. $ile2 = count( $nazwa2 );
  17. $rozszerzenie2 = $nazwa2[$ile2-1];
  18.  
  19. losuj ();
  20.  
  21. $filename = $haslo3 . '.' . $rozszerzenie2;
  22. move_uploaded_file($filename, $_SERVER['DOCUMENT_ROOT'] . 'uploads/' . $haslo2 . '/' . $filename);
  23.  
  24. mysql_query("INSERT INTO `images` (`dir`, `url`)
  25. VALUES ('".$haslo2."', '".$filename."');");
  26. }


Skrypt tworzy losową nazwę katalogu ($haslo2) i tam uploaduje wszystkie obrazy. Zmienna $haslo3 to kolejny losowy ciąg znaków, który ma być nazwą pliku. Problem w tym, że do bazy dodaje się wszystko z wyjątkiem `url` - czyli nazwą pliku. Dodaje się samo rozszerzenie. Podejrzewam, że funkcja losuj() nie zwraca mi $haslo3, tylko nie wiem dlaczego :/

Ten post edytował Krkol 2.05.2018, 16:59:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Neutral
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


  1. <form method="post" name="add" action="" enctype="multipart/form-data">
  2. <tr>
  3. <td>You write name picture(s):</td>
  4. <td><input type="text" name="own_name" style="background:green"/></td>
  5. </tr>
  6. <tr>
  7. <td>Picture 1 - Galerry, Picture 2 - Main</td>
  8. <td><input type="file" name="pictures[]" multiple="multiple" /></td>
  9. </tr>
  10. <tr>
  11. <td><input type="submit" name="submit" value="send" /></td>
  12. </tr>
  13. </table>
  14. </form>


  1. <?php
  2.  
  3. function random_name_file() {
  4.  
  5. if(!empty($_FILES['pictures']['name'][0])){
  6. $extension = (explode('.',$_FILES['pictures']['name'][0]));
  7.  
  8. $arr = ['a','b','c','d','e','f','g'];
  9. $randomed_characters = 'x'.$arr[rand(0,6)].'yuo'.$arr[rand(0,6)];
  10.  
  11. if(getcwd()=='C:\xampp\htdocs\forumphp' && !file_exists($randomed_characters.'.'.$extension[1])){
  12. return $randomed_characters;
  13. }else if(getcwd()=='C:\xampp\htdocs\forumphp' && !file_exists($_POST['own_name'].'.'.$extension[1]) && !empty($_POST['own_name']) && ctype_alpha($_POST['own_name'])){
  14. return $_POST['own_name'];
  15. }else if(getcwd()=='C:\xampp\htdocs\forumphp' && !file_exists($extension[0].'.'.$extension[1])){
  16. return $extension[0];
  17. }else{
  18. return 1;
  19. }
  20. }else {
  21. return 1;
  22. }
  23. }
  24.  
  25. $arr_empty = [random_name_file()];
  26.  
  27. if(!empty($_FILES['pictures']['name'][0])){
  28. $extension = (explode('.',$_FILES['pictures']['name'][0]));
  29. if($arr_empty[0]==1){
  30. echo 'This name is busy or consist from disallowed characters, please choose other';
  31. }else{
  32. if(move_uploaded_file($_FILES['pictures']['tmp_name'][0],$arr_empty[0].'.'.$extension[1])===true){
  33. echo 'Successfully uploaded!';
  34. }else{
  35. echo 'Failed uploaded!';
  36. }
  37. }
  38. }else{
  39. echo 'Not send file to server, because you don\'t clicked to "send" and you don\'t choose file to upload';
  40. }
  41. ?>


Trzeba to lekko poprawić, aby było zgodne z zasadą DRY (Don't Repeat Yourseflt (Nie powtarzaj się)). Chodzi mi o tę linię:

  1. if(!empty($_FILES['pictures']['name'][0])){ // ...


w funkcji i poza nią. Chyba, żeby przenieść tę linijkę przed funkcję i żeby to był jeden wielki if. Skrypt napisałem pod plik pojedynczy, nie multiple, gdybyś chciał wiele plików upload'ować, to musiałbyś przerobić ten skrypt.

Ten post edytował Neutral 8.05.2018, 13:19:13
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 4.10.2025 - 12:00