Forum Katalogu Ciekawych Stron Strona Główna  Forum Katalogu Ciekawych Stron Strona Główna  
 
FAQ  FAQ   Szukaj  Szukaj   Użytkownicy  Użytkownicy   Ranking systemów  Ranking systemów   Grupy  Grupy  
 
Rejestracja  ::  Zaloguj Zaloguj się, by sprawdzić wiadomości
 
Forum Katalogu Ciekawych Stron Strona Główna » Tutoriale » Upload grafiki do bazy danych MySQL

Napisz nowy temat  Odpowiedz do tematu
 Upload grafiki do bazy danych MySQL « Zobacz poprzedni temat :: Zobacz następny temat » 
Autor Wiadomość
Martin
PostWysłany: 20 Cze 2005, 00:11    Temat postu: Upload grafiki do bazy danych MySQL Odpowiedz z cytatem Zacytuj zaznaczone

KCS_Admin
KCS_Admin

Dołączył: 17 Cze 2005
Posty: 5566

Skąd: Piaseczno

Wiem, że ludzie nie polecają umieszczania zdjęć wewnątrz bazy danych - jednak ja w firmie musiałem i opracowałem skrypt do uploadu zdjęcia do bazy MySQL oraz sposób wyświetlania zdjęcia.
No ale czasami trzeba robić według wymagań szefa.
Very Happy
Może komuś się to przyda i dzięki temu nie będzie musiał siedzieć godzinami nad pisaniem.

Rozpoczynamy jak zwykle od stworzenia bazy danych:
Kod:
CREATE DATABASES zdjecie;


Tworzymy tabele w bazie:
Kod:
CREATE TABLE zdjecia (id INT NOT NULL auto_increment primary key, pracownik CHAR(10) unique, zdjecie BLOB NOT NULL);


W naszym przykładzie musieliśmy zrobić bazę danych zdjęć pracowników w firmie.

Teraz musimy zrobić formularz do wpisania nazwy pracownika:

formularz.php

Kod:
<FORM ACTION="upload.php" METHOD="POST" ENCTYPE="multipart/form-data">
Nazwa: <INPUT TYPE="text" NAME="pracownik"><br>
Zdjęcie: <INPUT type="file" name="zdjecie"><br>
<button type="submit" name="ok" value="wyślij zdjęcie do bazy">
<img src="zdj/wyslij.jpg" width="50" height="14" alt="wyślij zdjęcie do bazy danych">
</button>


Pole w bazie - zdjecie jest typu BLOB - tak więc może przyjąć plik binarny do 64kB

Formularz wysyła dane do pliku uploadu do bazy:

upload.php

PHP:

<?php
$fhandle 
fopen($HTTP_POST_FILES['zdjecie']['tmp_name'], "r");
$content base64_encode(fread($fhandle$HTTP_POST_FILES['zdjecie']['size']));
fclose($fhandle);

$uzytkownik "root";
$haslo "haslo";
$db "zdjecie";
$ip "127.0.0.1"
$link mysql_connect$ip$uzytkownik$haslo);
if (! 
$link)
die ( 
"nie moge się połączyć z serwerem MySQL" );
mysql_select_db($db$link);

$query sprintf("insert into zdjecia (pracownik, zdjecie) values (\"%s\", \"%s\")"$HTTP_POST_VARS['pracownik'], $content);
$zapytanie mysql_query($query);

if (!
$zapytanie

echo 
sprintf("Nie można dodać zdjęcia! Sad Error : %s"mysql_error()) ; 
}
else 

echo 
"<center>";
echo 
"Twój obrazek został zapisany do bazy danych MySQL";
echo 
"<br><br><a href='formularz.php'>dodaj kolejne zdjęcie</a>"
echo 
"</center>";
}

mysql_close($link);
?>



No i w taki sposób mamy zrobione dodawanie upload zdjęcia.
Very Happy

------------------------------------------------------------------------------
Teraz musimy pobrać nasze zdjęcie z bazy:

Kod był pisany pod stronę wyszukującą w bazie LDAP ActiveDirectory pracowników. Po wyszukaniu według kryteriów podanych w formularzu - wynik wyświetla się w tabeli. Nie będziemy opisywać sposobu działania i wyszukiwania w LDAP, bo nie o to tutaj chodzi.
Oczywiście wy dopracujecie sobie skrypt pod siebie i swoje bazy.
W skrócie pokażemy jak z wyniku wyszukiwania w innej bazie z danymi pracowników przejść do szczegółowej wizytówki ze zdjęciem pracownika.

Oczywiście zrobione jest wyświetlenie zdjęcia bez potrzeby zapisywania za każdym razem zdjęcia do pliku i odczyt na stronę z pliku. Takie metody spotkać można w necie. Motoda zapisu zdjęcia do pliku jest dobra, ale przeciez wiele osob moze wchodzic na ta strone w odstepacha sekundowych i wtedy by powstal chaos przy zapisie grafiki do pliku.

Metoda, która została zastosowana jest o wiele przyjemniejsza i nie wprowadza chaosu w przypadku czestych wizyt na stronie !!
W firmie pracuje ok 3000 pracowników biurowych i została ta metoda przetestowana - nie wprowadza chaosu Razz

Strona wyświetlająca wynik wyszukiwania:

wynik.php

PHP:

<?php
// tutaj jest kod łączenia się do innej bazy w moim przydaku była to baza LDAP
.........................
// wyświetlenie wyników w tabeli
.........................
// przedstawiam tylko komórkę z tabeli posiadającą przekierowanie do strony ze szczegółową wizytówką

echo "<td align=\"center\"><a href=\"wizytowka.php?osoba=".$pracownik."\" title=\"zobacz wizytówkę osoby\">".$pracownik."<br/></td>";

// zamknięcie połączenia z bazą
.......................
?>



A teraz przejdzmy do kodu strony z wizytówką szczegółową osoby oraz ze zdjęciem pobranym i wyświetlonym z naszej bazy ze zdjęciami:

wizytowka.php

PHP:

<?php
//połączenie z bazą LDAP i pobranie danych szczegółowych pracownika
według parametru podanego w poprzedniej stronie wynik.php [$pracownik]
......................
//wyświetlenie danych z bazy w postaci tabeli:
echo "<table width=\"100%\" border=\"0\">";

for (
$i=0$i<$info["count"]; $i++) 
{
echo 
"<TR><TD rowspan=\"9\" align=\"center\" valign=\"top\" width=\"20%\"><img src=\"showImage.php?user_id=".$login."\"></TD>";
echo 
"<TD width=\"20%\"><B>Nazwa Konta:</B></TD><td width=\"60%\">".$pracownik."</td></TR>";
echo 
"<TR><TD><B>Nazwisko:</B></TD><td>".$nazwisko."</td></TR>";
echo 
"<TR><TD><B>Imie:</B></TD><td>".$imie."</td></TR>";
echo 
"<TR><TD><B>Numer telefonu:</B></TD><td>".$telephonenumber"</td></TR>";
echo 
"<TR><TD><B>Adres e-mail:</B></TD><td><a href=\"mailto:".$mail."\" title=\"wyslij e-maila\">".$mail."</a></td></TR>";
echo 
"<TR><TD><B>Lokalizacja:</B></TD><td >".$officename."</td></TR>";
echo 
"<TR><TD align=\"left\"><B>Dzial:</B></TD><td>" $department ."</td></TR>";
echo 
"<TR><TD><B>Funkcja:</B></TD><td>".$funkcja."</td></TR>";
echo 
"<TR><TD><B>Telefon komorkowy:</B></TD><td>".$mobile."</td></TR>";
&
nbsp; &nbsp;}
echo 
"</tr></TABLE>";

//zamknięcie połączenia z bazą i zwolnienie zasobów
...................
?>



Tak jak zapewne wyczytaliście w powyższym kodzie strony wizytówka
zdjęcie umieszczane jest w jednym z pól w wyświetlanej tabeli obok opisu pracownika w standardowym polu dla wyświetlaniu zdjęcia img src:

Kod:
<img src=\"showImage.php?user_id=".$pracownik."\">


Ale źródło zdjęcia nie odwołuje się do pliku na dysku, lecz do innej strony napisanej w PHP: showImage.php, która to odpowiada właśnie za połączenie się z bazą MySQL ze zdjęciami i wyświetlenia zdjęcia według przekazanego parametru $pracownik

showImage.php

PHP:

<?php
 header
("Content-type: image/jpg;");

 if (isset(
$HTTP_GET_VARS['user_id']) &amp;&amp; !empty($HTTP_GET_VARS['user_id']))
 {
&
nbsp$uzytkownik "root"
&
nbsp$haslo "haslo"
&
nbsp$db "zdjecie";
&
nbsp$link mysql_connect"127.0.0.1"$uzytkownik$haslo);
&
nbsp; if (! $link) die ( "nie moge się połączyć z serwerem MySQL" );
&
nbspmysql_select_db($db$link);
&
nbsp$result mysql_query(sprintf("SELECT zdjecie FROM zdjecia WHERE pracownik='%s'"$HTTP_GET_VARS['user_id']));
&
nbsp; if (mysql_num_rows($result) != 0)
&
nbsp; {
&
nbsp; &nbsp;$row mysql_fetch_assoc($result);
&
nbsp; &nbsp;echo base64_decode($row['zdjecie']);
&
nbsp; }
&
nbsp; else 
&
nbsp; {
&
nbsp; &nbsp;$handle fopen("not_image.jpg""r");
&
nbsp; &nbsp;echo fread($handlefilesize("not_image.jpg"));
&
nbsp; &nbsp;fclose($handle);
&
nbsp; }
&
nbspmysql_close();
 }
 else
 {
&
nbsp; &nbsp;$handle fopen("not_image.jpg""r");
&
nbsp; &nbsp;echo fread($handlefilesize("not_image.jpg"));
&
nbsp; &nbsp;fclose($handle);
 }
?>



Strona ta łączy się z bazą MySQL ze zdjęciami i jeżeli w bazie jest rekord o przekazanym parametrze to wyświetla go na stronie.
Jeżeli natomiast nie ma - to pobiera z dysku przygotowane zdjęcie not_image.jpg z informacją "BRAK ZDJECIA"

I to tyle. Skrypt na pewno działa - oczywiście każdy może zmodyfikować go według własnych potrzeb.
Mam nadzieję, że się komuś przydadzą wskazówki i prawie gotowe kody stron.
Cool

Wiem, że zaraz polecą słowa krytyki ze strony przeciwników trzymania zdjęć w bazie - jednak jak mus to mus... Smile

Metoda testowana w intranecie formowym [~3000 pracowników] - zdała egzamin - jeżeli ktoś zastosuje tą metodę w internecie to dajcie znać jak się sprawdza w warunkcha przy milionach użytkowników Laughing

autor: Martin i Jurij

p.s. Katalog Ciekawych stron nie korzysta z tego sposobu. Nie polecam osobiście umieszczanie zdjęć w bazie danych zapisanych binarnie. Kwestia gustu.
_________________
Martin
- Prywatny Katalog Stron
- pizzeria La Nostra zaprasza
- e-Piaseczno i okolice, to najlepsze miejsce dla e-mieszkanca powiatu piaseczynskiego
- najlepsze prywatne przedszkole w Piasecznie
- moj prywatny fotoblog ze zdj?ciami
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
KCS
Wysłany:     Temat postu: Reklama w KCS







Powrót do góry
Alpin19
PostWysłany: 17 Gru 2005, 15:39    Temat postu: Odpowiedz z cytatem Zacytuj zaznaczone

Nowicjusz
Nowicjusz

Dołączył: 17 Gru 2005
Posty: 11

Skąd: Piaseczno

martin napisał:
Pole w bazie - zdjecie jest typu BLOB - tak więc może przyjąć plik binarny do 64kB

Martin - przyjmujemy więc, że plik nie może być większy niż 64Kb ?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora Numer GG
Martin
PostWysłany: 17 Gru 2005, 16:07    Temat postu: Odpowiedz z cytatem Zacytuj zaznaczone

KCS_Admin
KCS_Admin

Dołączył: 17 Cze 2005
Posty: 5566

Skąd: Piaseczno

Jeżeli zrobimy bazę danych z polem BLOB na plik to musimy przyjąć, że nie może być większy niż 64kB.

Typy danych w MySQL:

BLOB, TEXT
Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 65 535 bajtów

MEDIUMBLOB, MEDIUMTEXT
Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 16 777 215 bajtów

LONGBLOB, LONGTEXT
Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 4 294 967 295 bajtów
_________________
Martin
- Prywatny Katalog Stron
- pizzeria La Nostra zaprasza
- e-Piaseczno i okolice, to najlepsze miejsce dla e-mieszkanca powiatu piaseczynskiego
- najlepsze prywatne przedszkole w Piasecznie
- moj prywatny fotoblog ze zdj?ciami
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
Wyświetl posty z ostatnich:   
Napisz nowy temat  Odpowiedz do tematu Strona 1 z 1


Forum Katalogu Ciekawych Stron Strona Główna » Tutoriale » Upload grafiki do bazy danych MySQL
Skocz do:  



Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


katalog stron | forum
Powered by phpBB © 2005 phpBB Group