Php İle Toplu Fotoğraf Upload Etme

PHP bilenler için çok kolay ama benim gibi bilmeyenler için çok zor olan bir konuya değineceğim. PHP yardımı ile class.upload kütüphanesini kullanarak toplu olarak fotoğrafları upload edeceğiz. Upload ettiğimiz fotoğrafları istediğimiz ebatta küçültüp artı olarak thumbnial oluşturup, fotoğrafımıza watermark ekleyeceğiz, sunucuya yüklediğimiz fotoğrafları PDO kullanarak veri tabanına kaydedip istediğimiz fotoğrafları da sileceğiz. (Ayrıca bu makalede bana yardımcı olan tbt müritlerine teşekkür ederim ederim. @rakkoc hocam gerçekten çok bilgi verdi.)

PHP tagları yüzünden copy/past yapanlar sıkıntı yaşar kaynaktaki demoyu indiriniz.

Resim Tablomuz

Yukardaki gibi bir tablo oluşturuyoruz.

Kodlama Kısmı

İlk önce class.upload kütüphanesini indirip projemize dahil edeceğiz.

Functions.php

Bu dosya ile db bağlantımızı oluşturuyoruz.

<?php set_time_limit(0); error_reporting(0); ini_set("display_errors",0); try { $db = new PDO("mysql:host=localhost;dbname=zulfumeh_mobilya", "zulfumeh_site", "sifre",array(PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8",PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8",array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )));
} catch ( PDOException $e ){
print $e->getMessage();
}
$limit = 10;
$sitedomain = "zulfumehmet.tk";
?>

Yukarıdaki dosya sayesinde her sayfada db bağlantısı gerçekleştirmeye gerek kalmadan db bağlantımızı oluşturuyoruz.

index.php?id=xxx

Bu sayfada fotoğraf yükleme ve görüntüleme işlemlerini gerçekleştireceğiz. Kodlarımız şu şekilde.

<?

$parametreler = strtolower($_SERVER['QUERY_STRING']); //Adres satırından gelen tüm sorguları aldık.
$yasaklar="%¿¿'¿¿`¿¿insert¿¿concat¿¿delete¿¿join¿¿update¿¿select¿¿\"¿¿\\¿¿<¿¿>¿¿tablo_adim¿¿kolon_adim"; //Buraya tablo adlarınızı da ekleyiniz. Her ekleme sonrasını ¿¿ ile ayırmalısınız.
$yasakla=explode('¿¿',$yasaklar);
$sayiver=substr_count($yasaklar,'¿¿');
$i=0;
while ($i<=$sayiver) {
if (strstr($parametreler,$yasakla[$i])) {
header("location:http://www.zulfumehmet.com/"); //Sql injection girişimi yakalandığında yönlendiriyoruz.
exit;
}
 
$i++;	
}
 
if (strlen($parametreler)>=90) {
header("location:http://www.zulfumehmet.com/");
exit;	
}
// yukardaki komutlar sql injection onlemek maksatli
include 'functions.php'; // db baglantisini yapalim
?>

<?php $gelen_kod = $_GET["id"]; //atadigimiz id numarasini cagiralim index.php?id=xx hangi numara verdigimizi bilelim?>

<!DOCTYPE html>
<html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Resimler </title>
        <link rel="stylesheet" href="assets/css/styles.css" />
        <script src="assets/js/script.js"></script>
		<script src="assets/js/albumPreviews.js"></script>
        <script src="http://cdn.tutorialzine.com/misc/adPacks/v1.js"></script>
        <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
	    <script type="text/javascript" src="jquery/jquery.js"></script>
	    
	    <style>
body,html{width:100%;height:100%;,margin:0; padding:0}
div.container{min-height:100%; height:auto !important; height:100%;}

/* test */
div.container{background:white;
    z-index:2;
}
#alan img {
    display: table-cell;
    vertical-align: middle;
}
#ana_div {
	height: auto;
	width: auto;
	margin-right: auto;
	margin-left: auto;
	background-color: #666666;
	z-index:1;
}

.div {
	float: left;
	height: auto;
	width: auto;
	margin: 10px;

}
input[type=button], input[type=submit], input[type=file] { 
 
    background-color: #346fed;
 
    border: none;
 
    color: white;
 
    padding: 18px 36px;
 
    margin: 5px 3px;
 
    cursor: pointer;
}
	    </style>
    </head>
    <body>
        
       
<script>
    function Goster()
    {
        document.getElementById("alan").hidden = false;
    }
</script>    
        
        
 <div hidden class="container" id="alan" >
            <center><img src="loading.gif" alt="yukleniyor" title="yukleniyor"/></center>
        </div>        
        
<div id="ana_div">
     
      
<div class="div" id="div"><p>Lütfen resim seçip Yükle butonuna tıklayınız. Resim Yükleme işleminin bitmesini bekleyiniz.</p>
<form action="aupload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="adi" value="<?php echo $gelen_kod; ?>">
<input type="file" name="image[]" accept="image/png, image/jpeg" multiple /><hr />
<input type="submit" name="submit" value="Yükle" onclick="Goster()" />
</div>
<!--Yukarilar susleme sanati ile alakali -->
<div class="div" id="div2"><?php
$query= $db -> prepare("SELECT * FROM resimler where ilanID='$gelen_kod'"); // resimler tablaosunda bulunan atadigimiz id ait bilgi varsa resimleri gostersin.
$query-> execute();
$musteriler = $query -> fetchAll(); ?>
  
<?php 
        foreach($musteriler as $dizi){
       ?>
       
       	<a href="sil.php?id=<?=$dizi["Id"]?>" class="album">
				   <img src="files/<?php echo $gelen_kod ?>/thumbnail/<?=$dizi["kucuk"]?>" alt="<?=$dizi["kucuk"]?>" />
				   <p class="button">Sil</p></a>
				
      
       <?php } 
       // dongu olusturup resimlerin hepsini siralamasini istedik. Arti olarak silmek icinde resmin idsini kullanacagiz
       ?></div>
</div>
 
</body>
</html>

Yukarda ana sayfamızı oluşturduk.

aupload.php

Fotoğrafları yükleyip düzenleme yapacağımız kısım burası. Neden aupload diye isim verdim diye soran olacaklar için. Ajax kullanarak upload yapmayı planladım ama olmadı. Şimdi gerekli komutları girelim.

<?
include 'functions.php'; // db baglantisi
$tarihsaat = time(); // tarihi alalim
$gelen_kod = $_POST["adi"]; // pos ile gelen id degisken atayalim

?>
<!DOCTYPE html>
<html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Resimler </title>
        <link rel="stylesheet" href="assets/css/styles.css" />
        <script src="assets/js/script.js"></script>
		<script src="assets/js/albumPreviews.js"></script>
        <script src="http://cdn.tutorialzine.com/misc/adPacks/v1.js"></script>
        <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
	    <script type="text/javascript" src="jquery/jquery.js"></script>
	    <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="w3.css">

	    </head>
	    <body>
<div class="w3-container">
    <h1>Yükleme İşleminiz bitti ise Devam butonuna tıklayınız.</h1>
<a href="index.php?id=<?php echo $gelen_kod; ?>"><p class="button">Yeni Resim ekle</p></a>
  <p>Yüklenen resimler:</p>
  <ul class="w3-ul w3-card-4">

<?php
if( isset( $_POST[ 'submit' ] ) !== false )
{
 include('class.upload.php'); //kutuphaneyi dahil edelim

$files = array();
foreach ($_FILES['image'] as $k => $l) {
  foreach ($l as $i => $v) {
    if (!array_key_exists($i, $files))
      $files[$i] = array();
    $files[$i][$k] = $v;
  }
}

// create an array here to hold file names
$uploaded = array();

foreach ($files as $file) {
  $handle = new Upload($file);
  if ($handle->uploaded) {
    // Resimleri olusturalim
    $this_upload = array();
      
    $handle->file_name_body_add = '_thumbnial'; // kucuk resimleri yeniden adlandiralim
    $handle->file_auto_rename   = true;
    $handle->image_resize       = true;
    $handle->image_x            = 150;
    $handle->image_ratio_y      = 113;
    $handle->Process('files/'.$_POST["adi"].'/thumbnail'); // kucuk resimleri nereye kaydedecegimizi bildirek gelen post ile id alalım id adinda klasor olusturalim
    
    if ($handle->processed) {
      
      // Buyuk resim adi  
      $this_upload['small'] = $handle->file_dst_name;
    } else {
      echo 'error : ' . $handle->error;
    }
    
    $handle->jpeg_quality       = 70;
	$handle->file_max_size      = '10240000';
	$handle->image_watermark    = 'watermark.png'; // watermark ekleyelim
    $handle->file_auto_rename   = true;
    $handle->image_resize       = true;
    $handle->image_x            = 1020;
    $handle->image_ratio_y      = true;
    $handle->Process('files/'.$_POST["adi"].'/');
    
    if ($handle->processed) {
    
      // Kucuk Resim adi  
      $this_upload['large'] = $handle->file_dst_name;
        
        //Limitlendirme
        $limit = $db->query("SELECT * FROM resimler where ilanid='$gelen_kod'");
        $limit = $limit->rowCount(); 
        if ($limit<10) // burasi ile 10 fotograftan fazla resim yuklemesine izin vermeyelim limitide resim ilan id si ile yapiyoruz. Cunku resim ilan id aynı olanlari sinirlayabiliriz. resim id si her fotograf icin bir tanedir.
        {
        // Burasi da her bir resim icin calisin.
        $sorgu = $db->prepare("INSERT INTO resimler(ilanId, resim_adi, tarih, kucuk) VALUES(?, ?, ?, ?)");
        $sorgu->bindParam(1, $gelen_kod, PDO::PARAM_STR);
        $sorgu->bindParam(2, $this_upload[large], PDO::PARAM_STR);
        $sorgu->bindParam(3, $tarihsaat, PDO::PARAM_STR);
        $sorgu->bindParam(4, $this_upload[small], PDO::PARAM_STR);

        $sorgu->execute();
        
         echo ' <li class="w3-bar"><span  class="w3-bar-item w3-button w3-white w3-xlarge w3-right">Yüklendi</span><img src="tick_blue.png" class="w3-bar-item w3-circle w3-hide-small" style="width:85px"><div class="w3-bar-item"><span class="w3-large">Resim:'.$this_upload[large].' </span><br><span>Thumbnail: '.$this_upload[small].'</span> </div></li>'; // 10 adet fotoğraf varsa kaydetsin
        } else {
        echo '<li class="w3-bar"><span  class="w3-bar-item w3-button w3-white w3-xlarge w3-right">Yüklenmedi!!!</span><img src="no.png" class="w3-bar-item w3-circle w3-hide-small" style="width:85px"><div class="w3-bar-item"><span class="w3-large">Bir Sorun Oluştu </span><br><span>En Fazla 10 adet fotoğraf yükleyebilirsiniz.</span> </div></li>';// 10 dan fazla ise kaydır durdursun.
        }
        
        // buraya kadarki bolumde de db kayit islemler
        
      $handle->clean();
    } else {
      echo 'error : ' . $handle->error;
    }
    $uploaded[] = $this_upload;
  }
}
}
?>
  </ul>
</div>
</html>

Sil.php

Bu dosya yardımı ilede db kayıtlı olan ilanları hem sunucudan hem db den sileceğiz. Kodlarımız şu şekilde.

<html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Resimler </title>
        <link rel="stylesheet" href="assets/css/styles.css" />
        <script src="assets/js/script.js"></script>
		<script src="assets/js/albumPreviews.js"></script>
        <script src="http://cdn.tutorialzine.com/misc/adPacks/v1.js"></script>
        <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
	    <script type="text/javascript" src="jquery/jquery.js"></script>
	    <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="w3.css">

	    </head>
	    <body>
      
<?php
$parametreler = strtolower($_SERVER['QUERY_STRING']); //Adres satırından gelen tüm sorguları aldık.
$yasaklar="%¿¿'¿¿`¿¿insert¿¿concat¿¿delete¿¿join¿¿update¿¿select¿¿\"¿¿\\¿¿<¿¿>¿¿tablo_adim¿¿kolon_adim"; //Buraya tablo adlarınızı da ekleyiniz. Her ekleme sonrasını ¿¿ ile ayırmalısınız.
$yasakla=explode('¿¿',$yasaklar);
$sayiver=substr_count($yasaklar,'¿¿');
$i=0;
while ($i<=$sayiver) {
if (strstr($parametreler,$yasakla[$i])) {
header("location:http://www.zulfumehmet.tk/"); //Sql injection girişimi yakalandığında yönlendiriyoruz.
exit;
}
$i++;	
}
if (strlen($parametreler)>=90) {
header("location:http://www.zulfumehmet.tk/");
exit;	
}
include 'functions.php';

?>
<?php
$id = $_GET['id']; 
?>
<?php

// veri cekme
{
  $veri = $db->prepare('SELECT * FROM resimler WHERE id = :sira');
  $veri->bindValue(':sira', $id, PDO::PARAM_INT); 
  $veri->execute();
  $dizi = $veri->fetchAll(PDO::FETCH_ASSOC);
  
    $kucuk = $dizi[0]['kucuk']; 
    $resimid = $dizi[0]['Id']; 
    $resim_adi = $dizi[0]['resim_adi']; 
    $ilanid = $dizi[0]['ilanId']; 
   } // verilere degisken atadik
?> 
<div class="w3-container">
    <h1>İlan Resmi silme.</h1>
<a href="index.php?id=<?php echo $ilanid; ?>"><p class="button">Başka Resim Sil</p></a>
   <ul class="w3-ul w3-card-4">
<?php

// kaydi silme
$kullanici_rutbe=$ilanid;
if ($kullanici_rutbe==$ilanid) // eger ilan idsi ile kullaci idsi uyuyorsa silme yetkisi verdik. Bu sadece mantik olsun diye. uyelik sistemi yarpasaniz uye idsini cagirip burda fotografi yukleyen kisi silme yetkisi verebilirsiniz. Obur turlu herkes silme yetkisine sahip olur.
{ 
echo " ";
{
$sorgu = $db->query("DELETE FROM resimler WHERE id = '$resimid'");

    if ($sorgu->rowCount() > 0) {
        echo $sorgu->rowCount() . '<li class="w3-bar"><span  class="w3-bar-item w3-button w3-white w3-xlarge w3-right">Silindi</span><img src="cop.jpg" class="w3-bar-item w3-circle w3-hide-small" style="width:85px"><div class="w3-bar-item"><span class="w3-large">';
    } else {
        echo '<li class="w3-bar"><span  class="w3-bar-item w3-button w3-white w3-xlarge w3-right">Silinmedi !!!</span><img src="no.png" class="w3-bar-item w3-circle w3-hide-small" style="width:85px"><div class="w3-bar-item"><span class="w3-large">Bir Sorun Oluştu </span><br><span>Herhangi bir kayıt silinmedi</span> </div></li>';
    }
// resim silindiyse verilecek cevaplar
} 
// sunucudan silme kismi
unlink("files/$ilanid/$resim_adi"); // sunucudan silme islemleri
echo 'Resim';

unlink("files/$ilanid/thumbnail/$kucuk");
echo ':'.$kucuk.' </span><br><span>Thumbnail: '.$resim_adi.'</span> </div></li>';

} else {
echo '<li class="w3-bar"><span  class="w3-bar-item w3-button w3-white w3-xlarge w3-right">Silinmedi !!!</span><img src="no.png" class="w3-bar-item w3-circle w3-hide-small" style="width:85px"><div class="w3-bar-item"><span class="w3-large">Bir Sorun Oluştu </span><br><span>Bu resmi silme yetkiniz yoktur</span> </div></li>';
}
// yetkisi olmayan kisiye verilecek cevap
?>

 </ul>
</div>
</body>
</html>

İşlemlerimiz bu kadar takıldığınız yerde sormaya çekinmeyiniz. Demo için aşağıdaki butonu kullanınız. Demo ilan olarak index.php?id=166 kullanabilirsiniz.

Örnek çalışmayı indirmek için aşağıdaki kaynak linkine tıklayabilirsiniz.

Kaynak: zulfumehmet.com
Tarih:
Hit: 3461
Yazar: x-files

Taglar: php resim upload toplu işlemleri


Yorumlar


Yorum yapabilmek için üye girişi yapmalısınız.

Yorumlar

Mycity tarafından yazıldı. Tarih: 05/Nis/19 03:38
Süpersin üstad
x-files tarafından yazıldı. Tarih: 28/Eki/18 20:50
Rica ederim üstat
dcpromo tarafından yazıldı. Tarih: 28/Eki/18 18:07
Eline sağlık mehmet ağabey.