29 Ocak 2014 Çarşamba

PHP ile MySQL veritabanına image upload etme ve okuma

3 comments
PHP'de resimleri saklamak gerekebilir. Bu durumda genellikle resmin yolu veritabanında tutulur ve bu şekilde resim yolu saklanır. Ancak bu sorunlar çıkarabilir. Örneğin programı başka bir kullanıcı yüklediğinde resim dosyalarını da kopyalaması, hatta aynı dosya yoluna kopyalaması gerekir. Bu da oldukça sağlıksız bir yöntemdir.

Bu yazıda image dosyalarının veritabanında nasıl saklanacağını anlatacağım.

Veritabanında resim tutabilmek için tabloda ilgili alan blob veya long blob olarak seçilmeli. Adından da anlaşılacağı üzere long blob daha büyük dosyaları tutabiliyor.

NOT : resimupload.php - resimgoster.php ve siteler.sql dosyalarını yazının sonunda indirebilirsiniz.

Artık uygulamaya geçiyorum. Öncelikle bir tablo oluşturuyorum.


Şimdi yeni bir php dosyası oluşturarak içine kodlarımı yazmaya başlıyorum. Veritabanına resim upload edeceğimiz için form içinde File inputu ve submit inputu eklemem gerekiyor. Aşağıdaki kodları ekliyorum.

<form action="resimupload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image" /><br />
<input type="submit" name="submit" value="Yükle" />
</form>


Şimdi php kodlarını yazıyorum.

<?php

if(isset($_POST['submit']))
{
mysql_connect("localhost","root","");
mysql_select_db("blog");

$resim_adi = mysql_real_escape_string($_FILES["image"]["name"]);
$resim_veri = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));

echo $resim_veri;
}

?>

Sayfayı çalıştırıyorum ve bir resim seçip Yükle butonuna tıklıyorum. Karşıma aşağıdaki gibi resmin kodları geliyor. Yapmam gereken bu kodu yani $resim_veri değişkenini blob türündeki tabloya kaydetmek.


Yukarıdaki kod yerine aşağıdakini yazıyorum. Böylece veritabanına resim ekleniyor.

<?php

if(isset($_POST['submit']))
{
mysql_connect("localhost","root","");
mysql_select_db("blog");

$resim_adi = mysql_real_escape_string($_FILES["image"]["name"]);
$resim_veri = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));
$resim_turu = mysql_real_escape_string($_FILES["image"]["type"]);

if(substr($resim_turu,0,5) == "image")
{
mysql_query("insert into siteler(site_adi,resim) values('Google','$resim_veri')");

}

else
{
echo "Sadece resim yüklenebilir.";
}
}

?>

Eklenen resim tabloda aşağıdaki gibi gözüküyor.


Şimdi veritabanına eklediğimiz veriyi sayfada gösterelim. Yeni bir php sayfası oluşturuyorum. (resimgoster.php) Aşağıdaki kodları yazıyorum.

<?php

mysql_connect("localhost","root","");
mysql_select_db("blog");

if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
$sorgu = mysql_query("select * from siteler where id='$id'");
while($cek = mysql_fetch_assoc($sorgu))
{
$resim_veri = $cek["resim"];
}
header("content-type: image/png");
echo $resim_veri;
}

else
{
echo "Hata !!!";
}

?>

Son olarak ilk upload işleminin gerçekleştiği sayfaya giderek

<img src="resimgoster.php?id=5" />

satırını ekliyorum. Sayfayı çalıştırdığımda veritabanındaki resim gözükecektir.



İyi çalışmalar ...

Dosyalar (resimupload.php, resimgoster.php, siteler.sql)
If You Enjoyed This, Take 5 Seconds To Share It

3 yorum:

Adsız dedi ki...

bunu tinymce editörde nasıl kullanabiliriz?

netmelih dedi ki...

meraba ben bu kodu kullanamam
"header("content-type: image/png");"
bütün sayfayı değiştiremem onun yerine ne kullanabilirim

Adsız dedi ki...

Hocam resmi yüklüyorum. Resim geliyor. Peki ikinci resim gelince sayfa bozuluyor bunları daha düzgün nasıl getiririm sayfama. Mesela alt satırda gostersin