Beberapa teman nanya ke aku gimana cara ngeload dan nyimpan gambar dari/ke database. Wah, banyak cara... ada yang sukanya makae path, ada yang pengen pake BLOB. Untuk aplikasi single-user mempergunakan database lokal (misal : access/sqlite), main-main images mempergunakan path sih masih oke... tapi gimana dengan database remote? Kalo file images nya di-store ngga di kompie ndiri? DBMS Engine menyediakan fitur BLOB - kepanjangannya lupa aku (hehehe) yang jelas ada Binary2nya dan Object2nya...
Untuk website, sebenarnya ngeload images lewat path juga merupakan pilihan bagus... toh penyimpanan images bisa ditaroh di subdirektori website kita.. Tapi, berhubung (lagi2) yang nanya ke aku tema-nya tentang BLOB, nih kukasih contoh tutorialnya...
Pertama, siapkan dulu tabel nya di MySQL :
CREATE TABLE gambar(id integer not null auto_increment,nama varchar(255) not null,tipe varchar(100) not null,size longint not null,image blob not nullPRIMARY KEY (id))tipe di atas ntar diisikan "GIF"/"JPEG"/"PNG", yang cara mudahnya, deteksi aja secara otomatis MIME-Type nya trus dikonversi ke GIF/JPEG/PNG/etc... (akan dijelaskan di bawah)
Kedua, coba bikin HTML form utk upload gambar :
< form method="post" action="filename.php"
enctype="multipart/form-data">
< input type="hidden" value="204800" name="MAX_FILE_SIZE">
filename: < input name="imgfile" type="file">
< input type="submit" value="OK" name="submitbtn">
< /form> di situ kita akan coba batasin, gambar yang di upload maksimal ukurannya 200KB. didefinisikan dengan variabel MAX_FILE_SIZE = 204800... merasa kurang besar? naikin value nya sendiri..
file gambar yang di-upload akan dikasih nama "imgfile" dengan tipe "file", cara manggilnya nanti pake
$_FILES['imgfile'];
nah, coding di
filename.php nya kya gini nih :
pertama, kita akan "bedah" post_variable
$imgfile tersebut ke dalam beberapa value :
$imgfile= $_FILES['imgfile'];$name = $imgfile['name']; //nama file (tanpa path)$type = $imgfile['type']; //tipe filenya (langsung detect MIMEnya)$size = $imgfile['size']; //ukuran file (dalam bytes)$uperr = $imgfile['error']; //error number (0 = no error)$tmpfile= $imgfile['tmp_name']; //nama local temp file di serverups, apa maksut baris terakhir? koq di server? berarti pas kita klik submit itu gambar udah di-upload?
hehehe..., iya. tapi itu cuman temporary file yang dibuatkan otomatis ama web server. file tersebut ntar akan dibaca ama PHP Script misalnya dengan
fopen atau
fread. Dan file temporary itu ostosmastis akan di-delete sama webserver setelah script PHP di-eksekusi... otomatis.. kita ngga usah doeloe pikirin hal-hal gituan...
yang perlu kita lakukan, sementara ini, adalah validasi aja... entah apakah ada error (di variabel catch
$uperr) atau gambarnya kosong, atau mungkin apakah file itu udah ke-upload ke local temp file, yang caranya makae
function is_uploaded_file().kodenya kurang lebih sebagai berikut :
if(!$tmpfile or $uperr or !is_uploaded_file($tmpfile))echo "error ...\n";else {... // proses penyimpanan dilakukan di sini...}>> nah, tahap persiapan dan upload selesei, skrg gimana nih caranya masukin ke database?
silakan nikmati code di bawah ini :
$file = fopen($tmpfile, "rb"); // open file (read-only, binary)$imgdata = fread($file, $size); // read filefclose($file);// utk ngonvert MIME-Type ke tipe file...switch ($type)
{ case "image/gif": $mime = "GIF Image"; break; case "image/jpeg": case "image/pjpeg": $mime = "JPEG Image"; break; case "image/png": case "image/x-png": $mime = "PNG Image"; break; default: $mime = "unknown";
}$mysqli->query("INSERT INTO gambar (nama,tipe,image,tanggal) " ."VALUES ('".$name."','".$mime."','" . $mysqli->escape_string($imgdata) . "',".$size.")");selesei deh tahap penyimpanan... coba cek aja di tabel gambar, insya Allah udah masuk tuh gambar ke database..
>> trus cara ngeload nya?
begini : buat satu file :
pictures.php// PHP-Script pictures.phpecho "< img src=\"showpic.php?id=$id"\" /> ";yang nantinya akan ngirimin variabel GET sesuai dengan id gambar yang mau di load. misalnya id=1, maka ntar link tag lengkapnya sama browser akan diterjemahkan sebagai :
showpic.php?id=1.
dan ini adalah code di
showpic.php// PHP-Script showpic.php$result = $mysqli->query("SELECT tipe, image FROM images WHERE id = $id");$row = $result->fetch_object();header($row->tipe); // type fileecho $row->image;Oia, sblm ada output apa2 ke screen, kirim
header() sesuai dengan MIME-Type biar ntar halaman
showpic.php akan nge-parse gambar dengan tipe file yang sesuai...
kata kuncinya, utk nge-load BLOB di php, pergunakanlah
fetch_object(). Kalo pake
fetch_row() biasa, wah... dia ngga support binary object tuh.. row hanya utk mode text...
begitu saja.. silakan kembangin ndiri code nya yak. teknik gini ini aku dapet dari bukunya
Michael Kofler - The Definitive Guide to MySQL5. So, kemiripan code, nama, pelaku, dan peristiwa dalam sampel code di atas, harap dimaklumi... yach, namanya juga ilmu yang didapat dari rahasia nenek moyang secara turun-temurun... hehehe....
oke, kembangin ndiri yak? jangan mentok sampe sini doank... oke-oke? tetep semangat belajar!
9 comments:
wah ini nih yg dicari2, nampilin pict dari blob-nya mysql. mudah2an bisa deh, trims ya pak bos ;)
asllm. yah ini dia neh. blob, bwt simpan gambar/ pic apa aja didatabase.. trus bisa preview. blob!? duh sempat lupa.. :-), makasih yah dah ngingatin lagi.., thanks ya bwt blognya.
dfgfvcvdgddfgfgfgfg
zhank zyu za mazzz.. ini berzuna zkalee buatz ku.. zkaleee lazi zhank za...
a
nice artikel...
Cocok banget buat yang baru pengen nyobain make BLOB untuk research/projectnya..
Satu lagi ky untuk nympurnain..
BLOB VS NON BLOB
Kan lo abis mbaca2 tuh, denger2 dari icha ada yang lo risetin juga... bisa dong didokumentasiin tuh didokumentasiin hasil riset & baca-bacanya
ngeloadnya pictnya koq gagal ya??ksi sintak lengkap load pict yg dah sukses dooong...ane lagi perlu bwt TA nie....makasi
query("SELECT tipe, image FROM gambar WHERE kode_panggil_buku ='$kode_panggil_buku'");
$row = $result->fetch_object();
header($row->tipe); // type file
echo $row->image;
?>
sintaks saya seperti itu. tapi koq gambarnya gak mw tampil ya??saya cek2 gara2 $kode_panggil_buku
apa mungkin $_get gak bs dipake di mysqli??
ini artikel ga jelas amat c !
yang jelas dong kalau bikin artikel !
Posting Komentar