Kapat

php ile nasıl resim upload scripti hazırlayabiliriz bizim için neler gerekli bunları anlatacağım.
yüklenen resimlerin kıydını tutmak için veritabanına ihtiyaç duyacağız.
bir veritabanımızın olduğunu varsayalım.
localhost üzerinde veritabanınızı oluşturabilirsiniz?
her zamanki gibi bizlere gerekenleri sıralayılım.
upload adında bir klasör oluşturalım.
resimler isimli klasörümüzü açalım yüklenen resimnler buraya yüklenecek.
vtbaglan.php dosyamızı oluşturalım bu dosyamızda veritabanı ayarlarımız yer alacak.
fonksiyonlar.php dosyamızı oluşturalım bu dosyamızda php programının kullanacağı fonksiyonlar yer alacak.
index.php dosyamızı oluşturalım burada ise html sayfası yer almakta. yükleme formu burada yer alacak.
mysql tablosu için gerekli kodlar.
-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Anamakine: localhost
-- Üretim Zamanı: 26 Şubat 2011 saat 22:20:18
-- Sunucu sürümü: 5.1.41
-- PHP Sürümü: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Veritabanı: `ornekler`
--

-- --------------------------------------------------------

--
-- Tablo yapısı: `resimler`
--

CREATE TABLE IF NOT EXISTS `resimler` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`resim_url` text NOT NULL,
`resim_boyutu` varchar(10) NOT NULL,
`resim_turu` varchar(10) NOT NULL,
`eklenme` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5 AUTO_INCREMENT=1 ;

--
-- Tablo döküm verisi `resimler`
--

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

sql kodlarımızı oluşturduk. bu kodları mysql.sql olarak kayıt edebilir ardındanda phpmyadmin üzerinden yükleyebilirsiniz.
scriptimiz ile veritabanımız arasındaki bağlantıyı kurmak için önceden oluşturduğumuz vtbaglan.php dosyamızı açalım.
veritabanı kodları buraya gelecek:
<?php
##################################################
# Veritabanı Ayarları
#
# $vt_host = Veritabanı Hostu
# $vt_kullanici = Veritabanı Kullanıcı Adı
# $vt_sifre = Veritabanı Şifresi
# $vt_adi = Veritabanı Adı
#
##################################################

$vt_host = "localhost";
$vt_kullanici = "root";
$vt_sifre = "";
$vt_adi = "ornekler";

//Veritabanı bağlantısını yapıyoruz
$vtbaglan = @mysql_connect($vt_host,$vt_kullanici,$vt_sifre) or die("Veritabanı bağlantısı sağlanamadı!");
mysql_select_db($vt_adi,$vtbaglan) or die("Veritabanı bulunamadı!");
@mysql_query("SET NAMES 'latin5'"); //MySQL Türkçe Karakter Sorunu
?>

artık scriptimiz ile veritabanı arasında ilişki kurulmuş oldu.
resimleri yüklemek için kullanılması gereken php fonksiyonlarını yazalım.
fonksiyonlar.php dosyasını açıp şu kodları ekleyelim.

<?php
/*
Bu yazdığımız fonksiyon sayesinde yüklenen dosyanın boyutunu
string değer olarak değiştirirz.
*/
//Veri boyutlarını değiştirme
function strBoyut($bayt) {
if($bayt < 1024) {
return "$bytes byte"; //Byte cinsini alıyoruz
}else{
$kb = $bayt / 1024;
if ($kb < 1024){
return sprintf("%01.2f", $kb)." KB"; //KB cinsine dönüştürüyoruz
}else{
$mb = $kb / 1024;
if($mb < 1024){
return sprintf("%01.2f", $mb)." MB"; //MB cinsine dönüştürüyoruz
}else{
$gb = $mb / 1024;
return sprintf("%01.2f", $gb)." GB"; //GB cinsine dönüştürüyoruz
}
}
}
}
?>

evet php programımızı genel olarak oluşturmuş olduk son olarakta form sayfamızı yapalım.
bunun için index.php dosyasını açalım ve şu kodları yazalım.

<?php
//Veritabanı bağlantı dosyamızı çekiyoruz
require_once("vtbaglan.php");
//Fonksiyonlar dosyamızı çekiyoruz
require_once("fonksiyonlar.php");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
<title>PHP ve MySQL Resim Upload</title>
</head>

<body>
<?php
/*
Bir string değişken oluştururp bu değişken sayesinde başka sayfa oluşturup
işlem yapacağımıza tek bir sayfada string değişkenimiz sayesinde işlem yapabiliriz.
Ayrıca bu string değişken başka sayfalara taşınıp kullanılabilir.
*/
$i = $_GET['i']; //Bir string değişken oluşturuyoruz
switch($i){
case "": //$i string değişkeni boş ise yani sayfaya ilk girildiğinde
?>
<h3>Resim Upload Formu...</h3>
<form action="index.php?i=upload" method="post" enctype="multipart/form-data">
<label>Resim: <input name="file_resim" type="file" /></label>
<br /><br />
<input type="submit" value="Yükle!" />
</form>

<h3>Yüklenen Resimler...</h3>
<?php
echo '<table width="500" border="1">'; //Reesimlerimizi listelemek için bir tablo oluşturduk
$resim_cek = mysql_query("SELECT * FROM resimler ORDER BY id DESC"); //Resimleri en son eklenenden başlayarak çekmemiz için gerekli mysql kodumuz
while($resim_cek_yeni = mysql_fetch_array($resim_cek)){ //while döngüsü ile resimlerimizi listeliyoruz
$id = $resim_cek_yeni['id']; //Resmin id'sini alıyoruz
$gy_al = getimagesize($resim_cek_yeni['resim_url']); //Resmin genişlik ve yüksekliğini alıyoruz
//Resimlerimizi tablonun satırlarına ekleyip listeliyoruz
echo '
<tr>
<td width="150"><a href="'.$resim_cek_yeni['resim_url'].'"><img src="'.$resim_cek_yeni['resim_url'].'" width="150" height="150" border="0" /></a></td>
<td width="334" valign="top">
<b>Boyutu:</b> '.$resim_cek_yeni['resim_boyutu'].'<br />
<b>Türü:</b> '.$resim_cek_yeni['resim_turu'].'<br />
<b>Eklenme:</b> '.$resim_cek_yeni['eklenme'].'<br />
<b>Genişlik ve Yükseklik:</b> '.$gy_al[0].' x '.$gy_al[1].'<br /><br />
Resimi <a href="index.php?i=sil&id='.$id.'">Silin</a> veya <a href="'.$resim_cek_yeni['resim_url'].'">Büyütün</a>
</td>
</tr>';
}
echo '</table>';
break;

case "upload": //$i isminde oluşturduğumuz string değişkenin değeri yani upload yapmamız için gerekli kodlamaların bulunduğu değişken
//Resim Upload aracından verileri alıyoruz
$resim_isim = $_FILES["file_resim"]["name"]; //Resmin ismini çekiyoruz
$resim_turu = $_FILES["file_resim"]["type"]; //Resmin türü. Örn; JPEG, PNG, GIF vs.
$resim_boyut_orj = $_FILES["file_resim"]["size"]; //Resmin orjinal boyutunu alıyoruz
$resim_boyut_str = strBoyut($_FILES["file_resim"]["size"]); //Resmin dönüştürülmüş boyutunu alıyoruz
$resim_kaynak = $_FILES["file_resim"]["tmp_name"]; //Resmin hangi kaynaktan geldiğini alıyoruz
$resim_hedef = "resimler/"; //Resmin yükleneceği yolu bir değişkene atadık
$eklenme_tarih = date("d.m.Y"); //Bir tarih formatı oluşturduk

if($resim_kaynak == ""){ //Eğer resmin kaynağı boş iste yani hiç resim seçilmemiş ise hata mesajı verdiriyoruz
echo '<script type="text/javascript">alert("Üzgünüz! Bir resim seçmelisiniz.");</script>';
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
}elseif(($resim_turu != "image/jpeg") and ($resim_turu != "image/png") and ($resim_turu != "image/gif")){ //Eğer seçilen resimlerin türü JPEG, PNG veya GIF değilse bir hata mesajı verdiriyoruz
echo '<script type="text/javascript">alert("Seçtiğiniz dosya jpeg, png ve gif formatlarında olmalıdır!");</script>';
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
}elseif($resim_boyut_orj > 960000){
echo '<script type="text/javascript">alert("Resim boyutu çok büyük maximum 960kb boyutunda resim yükleyebilirsiniz!");</script>';
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
}else{ //Eğer resim seçilmişse ve türüde uygunsa resmi hem sunucumuza yüklüyoruz(upload) hemde veritabanımıza kaydediyoruz
$rasgele_isim = rand(1,10000); //1 ile 10.000 sayıları arasında rasgele bir sayı üretiyoruz
//Resmi sunucuya yüklememiz(upload) için gereken php kodumuz ayrıca rasgele ürettiğimiz sayı ile resmimizin yanına ürettiğimiz sayıyı ekleyip aynı resimden olma ihtimalini yok ediyoruz
$resim_upload = move_uploaded_file($resim_kaynak,$resim_hedef.'/'.$rasgele_isim . "-" . $resim_isim);
//Veritabanına kaydedilirken sadece resmin ismi değilde resmin yolu, rasgele sayı ürettiğimiz kodumuz ile resmin ismini birleştirerek veritabanına kaydetmemiz için yeni bir değişken oluşturduk
$resim_isim_yeni = "resimler/" .$rasgele_isim. "-".$resim_isim."";

$kaydet = mysql_query("INSERT INTO resimler (resim_url,resim_boyutu,resim_turu,eklenme) VALUES ('$resim_isim_yeni','$resim_boyut_str','$resim_turu','$eklenme_tarih')"); //Veritabanına eklememiz için gereken mysql kodumuz
if($kaydet){ //Eğer işlem başarılı olursa onay mesajı verdiriyoruz
echo '<script type="text/javascript">alert("Resim başarıyla eklendi.");</script>';
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
}else{ //Eğer bir sorun olursa hata mesajı verdiriyoruz
echo '<script type="text/javascript">alert("Hata! Resim eklenemedi.");</script>';
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
}
}
break;

case "sil":
$id = $_GET['id']; //Resimleri listelerken çektiğimiz resmin id'si
$silincek_resim = mysql_query("SELECT * FROM resimler WHERE id=$id"); //Silincek resmin ismini çekmek için gerekli mysql kodumuz
$silincek_resim_yeni = mysql_fetch_array($silincek_resim); //Silincek resmin ismini çekmek için mysql_fetch_array() fonksiyonumuzu kullanıyoruz

$resim_sil = mysql_query("DELETE FROM resimler WHERE id=$id"); //Resmi silmek için gerekli mysql kodumuz
if($resim_sil){ //Eğer resim başarıyla silinirse onay mesajı verdiriyoruz
echo '<script type="text/javascript">alert("Resim başarıyla silindi.");</script>';
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
@unlink($silincek_resim_yeni['resim_url']); //Resmi sunucudan silmek için gerekli fonksiyonumuz
}else{ //Eğer resim silinirken bir sorun olursa hata mesajı verdiriyoruz
echo '<script type="text/javascript">alert("Hata! Resim silinemedi.");</script>';
echo '<meta http-equiv="refresh" content="0;URL=index.php">';
}
break;
}
?>
</body>
</html>

bu sayfamızda veritabanı bağlantı dosyamızı ve fonksiyonları çektik ve fonksiyonların çalışmasını sağladık. resmimizin özelliklerini belirledik.
evet arkadaşlar bu şekilde resim upload kodlarını sizlere anlatmaya çalıştım hatam olduysa afola.
soru ve sorunlarınızı yazımın altına yorumlarda ekleyebilirsiniz.
iyi bloglamalar herkese.

Bir önceki yazımız olan php ile ziyaretçi defteri yapımı başlıklı makalemizde php ile ziyaretçi defteri yapımı, php ziyaretçi defteri ve sadık özdoğan ziyaretçi defteri yapımı hakkında bilgiler verilmektedir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

code


Kapat