Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]dodawanie obrazu do bazy danych
Forum PHP.pl > Forum > Przedszkole
hyhyhy
Witam,

Od razu zaznaczam, że w PHP/MySQL jestem początkujący, a że zdarzyło mi się tak, że natrafiłem na konieczność wrzucania obrazu do bazy danych,więc pisze tutaj, bo nie mam pojęcia, jak to ugryźć.

Przede wszystkim, czegośtam szukałem po googlach, ale znalazłem długi, tasiemcowaty skrypt który mnie przeraził. Nie oczekuję żadnego gotowca, tylko wskazówek:

- czy znając podstawy jestem w stanie takie coś zrobić?
- o jakich funkcjach powinienem poczytać?
- jak wrzucic go z formularza razem z innymi zmiennymi tekstowymi (czy tlyko input type="file" starczy)?
- czy moze sie znalezc w zwyklej tabeli ?
- czy to jest faktycznie taki wielki tasiemiec, czy da się problem zrealizować w miarę zgrabnym skryptem, i czy wymaga jakichś zabezpieczeń?

Będę wdzięczny za wskazówki smile.gif
sadistic_son
Tzn nie za bardzo rozumiem co znaczy "wrzucić obraz do bazy". Pliku nie wrzuca się do bazy. Możesz za pomocą formularza uploadować go na serwer a do bazy wrzucić informacje o nim, ścieżkę, rozmiar, właściciela pliku itd.
erix
Zabierz to stąd i przestaw tam.

Tak można podsumować Twojgeo posta.
hyhyhy
no jak mówiłem jestem zielony - teraz wiem, że baza nie ma możliwości przechowywania obrazów, tak? bo coś o polach BLOB czytałem, ale widocznie źle czytałem. W takim razie, gdyby ktoś mógłby mi doradzić, jak zorganizować miejsce dla takich plików na serwerze, tzn stworzyć jakiś folder, a jak je tam umiesczac, i jakimi funkcjami sprawdzac? dodam, ze potrzebuje dopuszczac wylacznie obrazki powiedzmy z 64kb, 50x50 px
sadistic_son
Możesz sobie to wrzucić do dowolnego folderu do którego skrypt php ma dostęp. Nadaj mu prawa np. 655.
W skrypcie musisz plik uploadować i wrzucić do tego folderu. Ważna rzecz: w formularzu musi się znaleźć następująca formuła: enctype="multipart/form-data" . Więcej na ten temat tutaj.
Ogólny szablon skryptu dodawania pliku wygląda tak:
  1. if( is_uploaded_file( $_FILES['nazwa_z_formularza']['tmp_name'] ) )
  2. {
  3. //przykladowa sciezka dostepu do pliku:
  4. $katalog= 'uploads'.$_FILES['nazwa_z_formularza']['name'];
  5. if( move_uploaded_file( $_FILES['nazwa_z_formularza']['tmp_name'], $katalog)){
  6. echo 'Plik został pomyślnie uploadowany!';
  7. }
  8. else
  9. {
  10. echo 'Upload pliku nie powiódł się!';
  11. }
  12. }
  13. else
  14. {
  15. echo 'Wystąpił błąd podczas wysyłania pliku na serwer!';
  16.  
  17. }
To na razie tyle. Spróbuj u siebie i w razie pytań - pytaj.
hyhyhy
wielkie dzięki, działa smile.gif

teraz rozumiem, że podczas dodawania obrazka potrzbuję skopiować nazwę ->sprawdzić, czy taka już jest, jeśli tak, to dodać losowa liczbe na koniec -> wpisać w bazę

No i miałbym 3 pytania:

- jak pobrać nazwę pliku do zmiennej? (sprawdzenie, czy taki już istnieje, bo na pewno wiecej niz 2 ludzi wpadnie na nazwe avatar.gif i juz)
- potem rozumiem nazwe wrzucam do tabeli w bazie w pole link i wywalam jako czesc <img src>
- czy są jakieś funkcje, które w tym temacie mogą być pomocne (chetnie poczytam manual) odnośnie np. filtrowania plikow tylko o okreslonym rozszerzeniu, rozmiarze, objętości kB?
sadistic_son
Jeśli chodzi o wrzucanie obrazków to polecałbym rozwiązać to nieco inaczej. Skoro pliki wrzuca użytkownik, który ma za pewne swój rekord w bazie to najlepiej każdemu userowi stworzyć oddzielny folder nazywający się jego numerem id lub loginem. Wtedy mogą do woli wrzucać pliki o takich nazwach jakie mają inni userzy bo przeciez kazdy ma wlasny folder.
Funkcja do tworzenia katalogów mkdir.
Co do nazwy plików, rozmiaru itd. to przejrzyj zawartość tablicy $_FILES. Np:
  1. echo '<pre>';
  2. print_r($_FILES['nazwa_pliku']);
  3. echo '</pre>';
JEśli każdy użytkownik może wrzucić tylko jeden plik to w ogóle bym pominął dodawanie nazwy pliku do bazy. Zakładając, że tworzysz każdemu userowi oddzielny folder (lub alternatywnie wszystkie pliki wrzucasz do jednego ale każdy plik nazywasz id/loginem usera) to wystarczy, że wczytasz całą zawartość folderu o nazwie id/loginu usera (w tym przypadku będzie tam tylko jeden plik), albo jeśli masz wszystkie pliki userów w jednym folderze wczytasz tylko plik nazwany id/loginem usera.
Funkcje do pobierania zawartości folderu: opendir , readdir , closedir. Używa się ich w tej kolejności. W przykładach w manualu jest to zrozumiale wyjaśnione.

Co do filtrowania plików jakie user może uploadować to sam html daje taką możliwość:
  1. <input type="file" name="..." accept="image/jpeg,image/gif" />
Ale o ile się nie mylę to wystarczy zmienić manualnie rozszerzenie i możesz wrzucać dowolny typ pliku.
Valdi_B
Gdybyś chciał poczytać o przechowywaniu plików w polach typu BLOB, to doradzam:
http://www.webdeveloper.pl/przechowywanie_...213,1,1,pl.html

Poza tym w samej dokumentacji MySQL też coś jest:
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html
- np. opis funkcji LOAD_FILE

Pozostaje pytanie, czy chce Ci się bawić w takie sztuczki (ale poczytać - nikt Ci nie zabroni).
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.