Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][HTML][PHP]Przesyłanie pliku na serwer i dodanie linku do pliku do bazy mysql
Forum PHP.pl > Forum > Przedszkole
Exille
Witam, jako że jestem zielony w temacie programowania postanowiłem napisać na forum. Otóż mam taki problem, zmixowałem sobie 2 skrypty czyli upload na serwer i formularz dodający rekord do MysQL, zrobiłem prostą zmienną która wyświetla link do wrzuconego pliku, ale nie wiem jak zrobić by odnośnik wylądował automatycznie w bazie danych, niżej cały kod (proszę o wyrozumiałość jestem zielony w temacie).

  1.  
  2. <html>
  3. <head>
  4.  
  5. <title>Upload</title>
  6. </head>
  7. <body>
  8.  
  9. <div>
  10. <form enctype="multipart/form-data" action="" method="POST">
  11. <input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
  12. <input name="plik" type="file" />
  13. <input name="plikzdj" type="file" />
  14.  
  15. <input type="submit" value="Wyslij plik" />
  16. </form>
  17. </div>
  18. </body>
  19. </html>
  20. <?php
  21. $plik_tmp = $_FILES['plik']['tmp_name'];
  22. $plik_nazwa = $_FILES['plik']['name'];
  23. $plik_rozmiar = $_FILES['plik']['size'];
  24.  
  25. $plikzdj_tmp = $_FILES['plikzdj']['tmp_name'];
  26. $plikzdj_nazwa = $_FILES['plikzdj']['name'];
  27. $plikzdj_rozmiar = $_FILES['plikzdj']['size'];
  28.  
  29. if(is_uploaded_file($plik_tmp) && is_uploaded_file($plikzdj_tmp)) {
  30. move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  31. move_uploaded_file($plikzdj_tmp, "upload/$plikzdj_nazwa");
  32. echo "Plik: <strong>$plik_nazwa</strong> zostal przeslany na serwer!";
  33. echo "Plik: <strong>$plikzdj_nazwa</strong> zostal przeslany na serwer!";
  34.  
  35. $zmienna1 = 'http://localhost/dodawanie/upload/';
  36. echo '<br>';
  37. echo '<br>';
  38.  
  39. $lnk = $zmienna1 . $plik_nazwa;
  40. $lnk2 = $zmienna1 . $plikzdj_nazwa;
  41.  
  42. echo '<div id=cos style="color: red;"><strong><h1>'.$lnk.' </h1></strong></div>';
  43. echo '<div id=cos style="color: red;"><strong><h1>'.$lnk2.' </h1></strong></div>';
  44. }
  45. ?>
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. <html>
  73.  
  74. <form enctype="multipart/form-data" action="" method="POST">
  75.  
  76. Nazwa:<br />
  77. <input type="text" name="title" /><br />
  78. Link do filmu:<br />
  79. <input type="text" name="lnk" /><br />
  80. Link do zdjecia:<br />
  81. <input type="text" name="thumb_url" /><br />
  82. <input type="submit" value="dodaj" />
  83. </form>
  84.  
  85. </html>
  86.  
  87.  
  88. <?php
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95. // odbieramy dane z formularza
  96. $title = $_POST['title'];
  97. $lnk = $_POST['lnk'];
  98. $thumb_url = $_POST['thumb_url'];
  99.  
  100.  
  101. if($title and $lnk and $thumb_url) {
  102.  
  103. // łączymy się z bazą danych
  104. $connection = @mysql_connect('localhost', 'root', 'mateusz')
  105. or die('Brak połączenia z serwerem MySQL');
  106. $db = @mysql_select_db('123', $connection)
  107. or die('Nie mogę połączyć się z bazą danych');
  108.  
  109. // dodajemy rekord do bazy
  110. $ins = @mysql_query("INSERT INTO videos SET title='$title', lnk='$lnk', thumb_url='$thumb_url'");
  111.  
  112. if($ins) echo "Rekord został dodany poprawnie" ;
  113.  
  114. else echo "Błąd nie udało się dodać nowego rekordu";
  115.  
  116. mysql_close($connection);
  117. }
  118.  
  119. ?>
  120.  
  121.  
Lord
  1. <html>
  2. <head>
  3.  
  4. <title>Upload</title>
  5. </head>
  6. <body>
  7.  
  8. <div>
  9. <form enctype="multipart/form-data" action="" method="POST">
  10. <input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
  11. <input name="plik" type="file" />
  12.  
  13. <input type="submit" value="Wyslij plik" />
  14. </form>
  15. </div>
  16.  
  17. <?php
  18. $plik_tmp = $_FILES['plik']['tmp_name'];
  19. $plik_nazwa = $_FILES['plik']['name'];
  20. $plik_rozmiar = $_FILES['plik']['size'];
  21.  
  22.  
  23. // łączymy się z bazą danych
  24. $connection = @mysql_connect('localhost', 'root', 'mateusz')
  25. or die('Brak połączenia z serwerem MySQL');
  26. $db = @mysql_select_db('123', $connection)
  27. or die('Nie mogę połączyć się z bazą danych');
  28.  
  29. if(is_uploaded_file($plik_tmp)) {
  30. move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  31. echo "Plik: <strong>$plik_nazwa</strong> zostal przeslany na serwer!";
  32.  
  33. $zmienna1 = 'http://localhost/dodawanie/upload/';
  34. echo '<br>';
  35. echo '<br>';
  36.  
  37. $lnk = $zmienna1 . $plik_nazwa;
  38.  
  39. echo '<div id=cos style="color: red;"><strong><h1>'.$lnk.' </h1></strong></div>';
  40.  
  41.  
  42. // dodajemy rekord do bazy
  43. $ins = @mysql_query("INSERT INTO videos SET link='$lnk'");
  44.  
  45. if($ins) echo "Rekord został dodany poprawnie" ;
  46.  
  47. else echo "Błąd nie udało się dodać nowego rekordu";
  48. }
  49.  
  50. mysql_close($connection);
  51. ?>
  52. </body>
  53. </html>
  54.  


tak to mniej więcej powinno wygladać, nie sprawdzałem tego, ale przynajmniej wszystko jest tam gdzie powinno. Tylko jak nie potrafisz sam połączyć dwóch prostych czynności to raczej nie dasz rady tego sam zrobić smile.gif
poli25
Ja bym zrobił na Twoim miejscu 2 pliki: na przykład upload.php
  1. <html>
  2. <head>
  3.  
  4. <title>Upload</title>
  5. </head>
  6. <body>
  7.  
  8. <div>
  9. <form enctype="multipart/form-data" action="upl.php" method="POST">
  10. <input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
  11. <input name="plik" type="file" />
  12. <input name="plikzdj" type="file" />
  13. <br />
  14. Nazwa:<br />
  15. <input type="text" name="title" /><br />
  16. Link do filmu:<br />
  17. <input type="text" name="lnk" /><br />
  18. Link do zdjecia:<br />
  19. <input type="text" name="thumb_url" /><br />
  20. <input type="submit" value="dodaj" />
  21.  
  22.  
  23.  
  24. <input type="submit" value="Wyslij plik" />
  25. </form>
  26. </div>
  27.  
  28. </body>
  29. </html>
  30.  
  31.  


i drugi plik z nazwą: upl.php
  1.  
  2. <?php
  3.  
  4. // odbieramy dane z formularza
  5.  
  6.  
  7. $plik_tmp = $_FILES['plik']['tmp_name'];
  8. $plik_nazwa = $_FILES['plik']['name'];
  9. $plik_rozmiar = $_FILES['plik']['size'];
  10.  
  11. $plikzdj_tmp = $_FILES['plikzdj']['tmp_name'];
  12. $plikzdj_nazwa = $_FILES['plikzdj']['name'];
  13. $plikzdj_rozmiar = $_FILES['plikzdj']['size'];
  14.  
  15. if(is_uploaded_file($plik_tmp) && is_uploaded_file($plikzdj_tmp)) {
  16. move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  17. move_uploaded_file($plikzdj_tmp, "upload/$plikzdj_nazwa");
  18. echo "Plik: <strong>$plik_nazwa</strong> zostal przeslany na serwer!";
  19. echo "Plik: <strong>$plikzdj_nazwa</strong> zostal przeslany na serwer!";
  20.  
  21. $zmienna1 = 'http://localhost/dodawanie/upload/';
  22. echo '<br>';
  23. echo '<br>';
  24.  
  25. $lnk = $zmienna1 . $plik_nazwa;
  26. $lnk2 = $zmienna1 . $plikzdj_nazwa;
  27.  
  28. echo '<div id=cos style="color: red;"><strong><h1><a href='.$lnk.'>'.$lnk.' </a></h1></strong></div>';
  29. echo '<div id=cos style="color: red;"><strong><h1><a href='.$lnk2.'>'.$lnk2.' </a></h1></strong></div>';
  30. }
  31.  
  32.  
  33.  
  34. $title = $_POST['title'];
  35. $lnk = $_POST['lnk'];
  36. $thumb_url = $_POST['thumb_url'];
  37.  
  38.  
  39. if($title and $lnk and $thumb_url) {
  40.  
  41. $servername = "localhost";
  42. $username = "admin";
  43. $password = "root";
  44. $dbname = "dodawanie";
  45.  
  46. $conn = new mysqli($servername, $username, $password, $dbname);
  47.  
  48. if ($conn->connect_error) {
  49. die("Connection failed: " . $conn->connect_error);
  50. }
  51.  
  52.  
  53.  
  54. // dodajemy rekord do bazy
  55. $ins = "INSERT into videos (title,lnk,thumb_url)
  56. values('$title','$lnk','$thumb_url')";
  57. $result = $conn->query($ins);
  58.  
  59.  
  60.  
  61. }
  62.  
  63. ?>

Powodzenia i pozdrawiam
Exille
Cytat(Lord @ 31.05.2016, 15:01:56 ) *
  1. <html>
  2. <head>
  3.  
  4. <title>Upload</title>
  5. </head>
  6. <body>
  7.  
  8. <div>
  9. <form enctype="multipart/form-data" action="" method="POST">
  10. <input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
  11. <input name="plik" type="file" />
  12.  
  13. <input type="submit" value="Wyslij plik" />
  14. </form>
  15. </div>
  16.  
  17. <?php
  18. $plik_tmp = $_FILES['plik']['tmp_name'];
  19. $plik_nazwa = $_FILES['plik']['name'];
  20. $plik_rozmiar = $_FILES['plik']['size'];
  21.  
  22.  
  23. // łączymy się z bazą danych
  24. $connection = @mysql_connect('localhost', 'root', 'mateusz')
  25. or die('Brak połączenia z serwerem MySQL');
  26. $db = @mysql_select_db('123', $connection)
  27. or die('Nie mogę połączyć się z bazą danych');
  28.  
  29. if(is_uploaded_file($plik_tmp)) {
  30. move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  31. echo "Plik: <strong>$plik_nazwa</strong> zostal przeslany na serwer!";
  32.  
  33. $zmienna1 = 'http://localhost/dodawanie/upload/';
  34. echo '<br>';
  35. echo '<br>';
  36.  
  37. $lnk = $zmienna1 . $plik_nazwa;
  38.  
  39. echo '<div id=cos style="color: red;"><strong><h1>'.$lnk.' </h1></strong></div>';
  40.  
  41.  
  42. // dodajemy rekord do bazy
  43. $ins = @mysql_query("INSERT INTO videos SET link='$lnk'");
  44.  
  45. if($ins) echo "Rekord został dodany poprawnie" ;
  46.  
  47. else echo "Błąd nie udało się dodać nowego rekordu";
  48. }
  49.  
  50. mysql_close($connection);
  51. ?>
  52. </body>
  53. </html>
  54.  


tak to mniej więcej powinno wygladać, nie sprawdzałem tego, ale przynajmniej wszystko jest tam gdzie powinno. Tylko jak nie potrafisz sam połączyć dwóch prostych czynności to raczej nie dasz rady tego sam zrobić smile.gif



W każdym razie dzięki za pomoc, przetestuje czy działa.
8_pasazer_NOSTROMO
Podłączę się pod wątek.

Pliki pdf, jpg znajdują się w bazie danych w polu LONGBOB. Zaszła zmiana koncepcji, trzeba je wyciągnąć i wrzucić na serwer do katalogu dupa np.
Jak to zrobić, czego użyć, ktoś podpowie. Jest ich trochę.
LowiczakPL
Ja to robię tak:

jeśli masz pliki w bazie i chcesz je wyeksportować do plików a w bazie mieć tylko nazwy

1. listujesz rekordy bazy
2. generujesz jakieś nazwy i zapisujesz je w bazie
3. w zdefiniowanej lokalizacji zapisujesz pliki o wygenerowanej nazwie

koniec


główne pytanie zapis plików na serwer i ich nazw do bazy

robię to w ten sposób,

1. generuje UNIKALNĄ nazwę pliku
2. wgrywam plik do określonej lokalizacji na serwerze
3. zapisuje w bazie oryginalną nazwę pliku oraz ta wygenerowaną
4. aby pobrać/pokazać plik pobieram z lokalizacji ten plik o wygenerowanej nazwie a użytkownikowi serwuję plik o nazwie oryginalnej wtedy kiedy go pobiera lub podgląda np zdjęcie

dzięki temu może być kilka plików o identycznej nazwie
8_pasazer_NOSTROMO
A w jaki sposób wgrać pliki na serwer. Powiedzmy że zawartość danych mam w tablicy $pliki[]. Jak teraz w pętli wrzucać je na serwer do konkretnej lokalizacji. Brakuje mi jakiejś funkcji/polecenia by to wykonać. Resztę zrobię jak pisałeś.
LowiczakPL
... a niby jak wgrałeś pliki do bazy, rób tak samo, po prostu odczyt i zapisujesz je na serwer z bazy

Ty to robiłeś czy nie masz o tym pojęcia i zastanawiasz się jak to rozkminić?

Często i gęsto bibiblioteki albo muzea mają pliki np. eksponatów w bazie bo ktoś to tak zaprojektował aby mieć podglad na zmiany ...
8_pasazer_NOSTROMO
Pliki przesyłane były w taki sposób

  1. $max_rozmiar = 200000000; //w bajtach
  2. if (is_uploaded_file($_FILES['plik']['tmp_name']))
  3. {
  4. $nazwa=''.$_FILES['plik']['name'];//echo"$nazwa<br>";
  5. $typ=''.$_FILES['plik']['type'];//echo"$nazwa<br>";
  6. if ($_FILES['plik']['size'] > $max_rozmiar) { echo 'Błąd! Plik jest za duży!';}else if(($_FILES['plik']['type']!="application/pdf")&&($_FILES['plik']['type']!="image/jpeg")) { echo 'Błąd! Niezgodny typ pliku ('.$_FILES['plik']['type'].') !<br>dopuszczalne są tylko *.pdf i *.jpg';
  7. }
  8. else
  9. {
  10. $zawplik=file_get_contents($_FILES['plik']['tmp_name'],true);
  11. $ilzn=strlen($zawplik); echo"<br>ilość znaków w pliku=$ilzn";
  12. $nplik=addslashes($zawplik);
  13.  
  14. include "baza.php";
  15. $zapytanie = "UPDATE akty set ,tresc='$nplik',nazwa='$nazwa',typp='$typ' where id='$id'";
  16. $wykonaj = mysql_query($zapytanie) or die ("wprowadzenie pliku błędne ".mysql_error());


Pliki wczytywane były pojedynczo formularzem, a teraz trzeba ja w pętli na serwerze zapisać.
Jak to wykonać ?
nospor
No skoro masz je w tablicy, to zapisz teraz na dysku gdzie chcesz

https://www.php.net/manual/en/function.file-put-contents.php
i juz.
8_pasazer_NOSTROMO
Tego szukałem, nie znałem funkcji. Nie wiedziałem jak poznać jej nazwę. Wpisywałem w google różne cuda, nie dało tego wyniku. Dziękuję.

@nospor
A pytanie do Ciebie takie.
Wg Twojej wiedzy/doświadczenia pliki pdf,jpg trzymać lepiej w mysql czy na dysku serwera ?
Chcą u mnie zmienić koncepcję, rozkaz z góry. Chciałbym Ciebie podpytać.
aras785
Wszystko co ma więcej niż kilka KB wrzucaj po prostu na serwer / cdn / s3.. W bazie zapisuj tylko ścieżki do tych plików. Swoją drogą w życiu nie spotkałem się z projektem który trzymałby pliki w bazie danych, jeśli ktoś widzi w tym jakieś plusy to chętnie uzupełnię swoją wiedzę.

Pozdrawiam
nospor
Jak juz aras wspomnial: na serwerze
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.