Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Upload plików na serwer i zapis ich do MySQL
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
Chcę zrobić formularz poprzez który będzie można dodawać informacje do bazy danych oraz jednocześnie przesyłać pliki (i zapisywać je do bazy danych MySQL) - jednocześnie.

Zrobiłem coś takiego:
  1. <?
  2.  
  3. if ($_GET[ips] == "dodajklienta" && $_GET[p] == "zapisdanych"){
  4. echo"<font color=\"#008000\"><p align =\"center\">Dane zostały zapisane do systemu!!</p></font><br/>";
  5.  
  6. $path_thumbs = "temp"; // katalog temp
  7. $logo_tmp = $_FILES["umowa"]["tmp_name"];
  8. $logo_name = $_FILES["umowa"]["name"];
  9. $logo_size = $_FILES["umowa"]["size"];
  10. $logo_type = $_FILES["umowa"]["type"];
  11. $path_thumbs = "temp";
  12. $losowa_nazwa = md5(microtime());
  13. $pobierz_rozszerzenie = explode ('.', $logo_name);
  14. $rozszerzenie = $pobierz_rozszerzenie[count($pobierz_rozszerzenie)-1];
  15. $thumb_path = substr($logo_tmp,0,strrpos($logo_tmp, '.')).'_min.'.$rozszerzenie;
  16. $PSize = filesize($thumb_path);
  17. $mysqlPicture = addslashes(fread(fopen($Picture1, "r"), $PSize));
  18.  
  19.  
  20. $SQL = "INSERT INTO baza (`id` ,`imie_nazwisko` ,`nazwa_firmy`, `adres_firmy`, `kod_miasto_firmy`, `pesel`, `nip`, `nr_dowodu`, `dowod_wydany_przez`, `zamieszkaly`, `telefon_kontaktowy`, `email`, `notatka` , `firma_wlasciciel`, `plik1`) VALUES (NULL , '$_GET[imie_nazwisko]', '$_GET[nazwa_firmy]', '$_GET[adres_firmy]', '$_GET[kod_miasto_firmy]', '$_GET[pesel]', '$_GET[nip]', '$_GET[nr_dowodu]', '$_GET[dowod_wydany_przez]', '$_GET[zamieszkaly]', '$_GET[telefon_kontaktowy]', '$_GET[email]', '$_GET[notatka]', '$_SESSION[pfirma]', '$mysqlPicture');";
  21. $res = mysql_query($SQL);
  22. }
  23. ?>
  24. <form action="" method="get">
  25. <table align = "center">
  26. <input type="hidden" name="p" value="zapisdanych" />
  27. <input type="hidden" name="ips" value="dodajklienta" />
  28. <tr><td>Imię i nazwisko:</td><td><input type="text"  name="imie_nazwisko" value="" size="35" maxlength="40"/></td></tr>
  29. <tr><td>Nazwa firmy:</td><td><input type="text"  name="nazwa_firmy" value="" size="35" maxlength="40"/></td></tr>
  30. <tr><td>Adres firmy:</td><td><input type="text"  name="adres_firmy" value="" size="35" maxlength="30"/></td></tr>
  31. <tr><td>Miasto i  kod pocztowy:</td><td><input type="text" name="kod_miasto_firmy" value="" size="35" maxlength="30"/></td></tr>
  32. <tr><td>Pesel:</td><td><input type="text" name="pesel" value="" size="35" maxlength="11"/></td></tr>
  33. <tr><td>Nip:</td><td><input type="text"  name="nip" value="" size="35" maxlength="14"/></td></tr>
  34. <tr><td>Nr. dowodu:</td><td><input  type="text" name="nr_dowodu" value="" size="35" maxlength="12"/></td></tr>
  35. <tr><td>Wydany przez:</td><td><input  type="text" name="dowod_wydany_przez" value="" size="35" maxlength="35"/></td></tr>
  36. <tr><td>Zamieszkały:</td><td><input  type="text" name="zamieszkaly" value="" size="35" maxlength="65"/></td></tr>
  37. <tr><td>Telefon:</td><td><input  type="text" name="telefon_kontaktowy" value="" size="35" maxlength="20"/></td></tr>
  38. <tr><td>Email:</td><td><input  type="text" name="email" value="" size="35" maxlength="35"/></td></tr>
  39. <tr><td>Notatka:</td><td><textarea name="notatka" cols="31" rows="10"></textarea></td></tr>
  40. <tr><td>Skan umowy:</td><td><input name='umowa' type='file'  /></td></tr>
  41. <tr><td>Plik2:</td><td><input name='plik2' type='file'  /></td></tr>
  42. <tr><td>Plik3:</td><td><input name='plik3' type='file'  /></td></tr>
  43. <input type=hidden name=abc value=abc>
  44. <input type='hidden' name='MAX_FILE_SIZE' value='15424000'>
  45. <tr><td></td><td><input type="button"  value="Zapisz"/></td></tr></form>
  46. </table>
  47. <?
  48. }
  49. ?>


Chciałbym żeby skrypt:
1. zapisał dane wprowadzone przez użytkownika
2. zapisał plik dołączony do formularza do bazy danych (mam pola w MySQL typu longbloob).

Próbuje z pobraniem pliku do katalogu tymczasowego na serwerze i zapisem do bazy, ale coś nie działa... skrypt zapisuje tylko dane wprowadzone przez użytkownika (bez plików).

Wiecie może co jest źle zrobione?


Łukasz
erix
Nie zapisuj plików do bazy. Jest to nieoptymalne i bez sensu.

Zapisuj pliki w osobnym katalogu, a w bazie tylko ścieżkę/nazwę.

Cytat
skrypt zapisuje tylko dane wprowadzone przez użytkownika (bez plików).

Może rozmiar przekracza max_packet_size. Ciężko powiedzieć. Ale nie będę się nad tym rozwodził, bo rozwiązanie jest nieoptymalne. winksmiley.jpg
northwest
rozmiar pliku nie przekracza maksymalnego rozmiaru...

Tylko w moim przypadku muszę mieć te dane w bazie... sad.gif wiesz może jak to zrobić?
erix
Cytat
Tylko w moim przypadku muszę mieć te dane w bazie...

Uzasadnij ten przypadek, bo póki co, nie ma on żadnego uzasadnienia.

Cytat
wiesz może jak to zrobić?

Zdumpuj sobie to zapytanie i spróbuj wykonać ręcznie, np. przez konsolkę.
northwest
te zmienne $_FILE są jakby puste... plik nie przechodzi :/

chce mieć te dane w bazie ponieważ moja aplikacja będzie pracowała na różnnym poziomie (localhost,net), aplikacje c# i php...smile.gif

bardzo zależy mi na poprawieniu ww kodu...
erix
Cytat
chce mieć te dane w bazie ponieważ moja aplikacja będzie pracowała na różnnym poziomie (localhost,net), aplikacje c# i php...

Mimo wszystko - baza, to baza, a nie system plików. Już w NTFS jest baza - ale mówimy o dwóch różnych przypadkach; NTFS jest zoptymalizowane do przechowywania w bazie plików MNIEJSZYCH niż 1 KiB, reszta siedzi sobie w klastrach, a w MFT tylko informacje, gdzie jest plik. Ucz się od ekspertów, wiele głów myślało nad FS, a nie tylko kilka. ;]

Jeśli chcesz konkretnie w Twoim zastosowaniu, to możesz przecież via HTTP/FTP pobierać, a będzie efektywniej; zapytania na pewno będą krócej wykonywane.

Cytat
te zmienne $_FILE są jakby puste... plik nie przechodzi :/

A co z formularzem? Na pewno są takie same nazwy pól?

edit@down: +odpowiedni enctype.
nospor
zapoznaj sie dokladnie z tym linkiem:
http://pl2.php.net/manual/pl/features.file...post-method.php
bo twoj formularz jest daleki od formularza, ktory powinien wysylac pliki. Przyjrzyj sie szczegolnie konstrukcji <form ....

POzatym formularz wysylaj metodą post a nie get, a juz w szczegolnosci gdy mają byc przesylane pliki
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.