25 Kasım 2017 Cumartesi

Codeigniter-File Uploading Class ve Resim Ekleme-Silme-13

Merhabalar ilk olarak resim bilgilerini tutmak için kullanıcı tablosuna resim_ad ve resim_url sütunlarını ekliyoruz.Resimlerin kaydedileceği "resim" diye bir klasör oluşturuyoruz.Bu klasörü projemizin "C:\xampp\htdocs\ci_blog" kısmına oluşturuyoruz.Tablomuzu aşşağıdaki gibi değiştiriyoruz.







listemizdeki kişilerin yanına Resim Ekle diye bir link ekleyip tıklantığında gideceği yeri  href="<?php echo base_url("welcome/newresim/$kbilgi->id") ?>" şeklinde yazalım.Burda welcome controlerı içindeki newresim metodunu çağırıyoruz ve parametre olarak kullanıcı id sini gönderiyoruz.Bu newresim metodu kısaca bizim dosyadan resim seçip ekle butonunun olduğu sayfayı yükleyip,view e kullanıcının id sini göndermektedir.


Resim ekle linkine tıklandığında dosyadan resim seçebileceği ve kaydet butonunun olduğu bir new_resim.php adında sayfa oluşturuyoruz.Görüntüsü aşağıdaki gibidir.Formun actionuna contolerımızdaki resim ekleme işlemini yapacağımız url yi yazıyoruz ve yine parametre olarak kullanıcı id sini gönderiyoruz.



<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
</head>
<body>
<div id="container">
 <div >
  <form role="form" enctype="multipart/form-data" method="post" action="<?php echo base_url("welcome/add/$id");?>">
                    <label class="" for="first-name">Resim Seç<span class="required">*</span>
                    </label>
                    <input type="file"  required="required" name="resim" >
         <button type="submit" >Ekle</button>
                </form>
                </div>
</div>
</body>
</html>
----------

Şimdi welcome controler daki newresim metodumuzu yazalım.

   public function newresim($id){
            $data["id"] =$id;
            $this->load->view("new_resim",$data);
                  }


welcome controler daki  modelle bağlantı kurup resim ekleme işleminin yapıldığı add metodumuzu yazalım.

 public function add($id){
                //resim ekleneceği klasör
                   $config['upload_path']          = 'resim/';
                //eklenecek resimin tipi
                $config['allowed_types']        = 'gif|jpg|png';
                //ekleme işleminde resmin adını şifreli bir şekilde kaydetmek için
                 $config['encrypt_name']     = true;
                //upload kütüphanesini oluşturduğumuz confige göre yüklüyoruz
                $this->load->library('upload', $config);
//dosya yükleme işlemini yapıyoruz
                if ( ! $this->upload->do_upload("resim"))
                {
                  //eğer yükleme işlemi başarısız olursa 
                  //hata dizimizi oluşturuyoz ve hatamızı alıyoruz
                        $error = array('error' => $this->upload->display_errors());
                  //hataları yazdırıyotuz
                     print_r($error);
                }
                else{
    //resim yükleme işlemi başarılı olursa
     //yüklenen resmin blgilerini alıyoruz
              $data = array('upload_data' =>$this->upload->data());
              //yüklenen resmin adını alıyoruz
              $img_id = $data["upload_data"]['file_name'];
             //veri tabanına yükleme işlemi yapmak için gerekli bilgilerin olduğu diziyi oluşturuyoruz
              $date=array(
              "resim_ad"=>$_FILES["resim"]['name'],
              "resim_url"=>$img_id
                 );
//veritabanında kişinin resim bilgilerini güncellemek için metodumuzu çağırıyoruz.
                 $result=$this->kullanici_model->update(array("id"=>$id),$date);
//veritabanında güncelleme işlemi başarılı ise
                if($result){
                  //controlerımızın adını yazıp yönlendirme yapıyoruz
                 redirect("welcome");
                           }
                      else{
                //yükleme işlmei başarısız ise tekrar resim seçme sayfasını çağırıyoruz    
                   redirect("welcome/newresim/$id");
                         }
}
}

Son olarak eklenen resimleri kişimizin bilgileri ile birlikte gösterelim.Bunun için welcome_message.php viewimize img ekliyoruz.img in src sine de resim klasörümüzdeki yolu yazıyoruz.Kullanıcı bilgilerini zaten çektiğimiz için contorlerda herhangi bir değişiklik yapmamıza gerek yok.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
</head>
<body>
<div id="container">
<h1>Merhaba Dünya!</h1>
<form role="form" action="<?php echo base_url("welcome/add_Kullanici") ?>" method="post">
  <input type="text" name="kullanici_adi"> <br>
  <input type="text" name="kullanici_soyadi"> <br>
 <button type="submit" >Gönder</button>
</form>
</div>
<br><br>
<div>
<?php foreach ($kullnaicilar as $kbilgi) {
?>
<li> <img 
               width="80"
         src="<?php echo base_url("resim") . "/" .$kbilgi->resim_url ?>">      
<div><?php echo $kbilgi->k_ad." ".$kbilgi->k_soyad  ?> <a href="<?php echo base_url("welcome/delete_kullanici/$kbilgi->id") ?>">Sil</a>| <a href="<?php echo base_url("welcome/update_kullaniciPage/$kbilgi->id") ?>">Güncelle</a>|
          <a href="<?php echo base_url("welcome/newresim/$kbilgi->id") ?>">Resim Ekle</a>
</div>
  </li>
<?php } ?>
</div>
</body>
</html>

Ekran çıktımız.



Son olarakte kişi silme işleminde klasöre kaydettiğimiz resmi de silelim.Bunun için delete_kullnaici metodunu aşağıdaki gibi değiştiriyoruz.

  public function delete_kullanici($id){
//ilk olarak silinecek kullanıcı id isne göre kullanıcıyı getiriyoruz
      $kullanici = $this->kullanici_model->get(array("id" => $id));
//kullanıcının resminin url sini alıyoruz
    $file_name = FCPATH ."resim/$kullanici->resim_url";
//resmmi unlink ile kaldırıyoruz
    if(unlink($file_name)){
//eğer resim dosyadan silindi ise veritabanından resmi siliyoruz
        $delete=$this->kullanici_model->delete(array("id"=>$id));
//veritabanından silme işlemi başarıle ile gerçekleştirilirse
if($delete){
       //gelen verileri tutacak sınıf nesnesi üretiyoruz
            $data=new stdClass();
            //gelen verileri nesnemize atıyoruz
           $data->kullnaicilar=$this->kullanici_model->getAll();
           //view i çağırıp gelen verileri view e gönderiyoruz
              $this->load->view('welcome_message',$data);
}
    }     
        }

Model ve controler sınıfımızın son halleri.

kullanici_model.php

<?php 
class kullanici_model extends CI_Model
{
//model yapıcı fonksiyonumuz
public function __construct()
    {
        parent::__construct();
   // ekleme yapacağımız tablomuzun adını burda ekliyoruz
    //her defasında yazmıyalım diye
        $this->table = "kullanici";
    }
//veritabanına ekleme işlemini yaptığımız metotumuz
//parametre olarak bir array alıyor
    public function insert($data=array()){
//ilk parametre eklenecek tablo,ikincisi eklenecek data
    $insert=$this->db->insert($this->table,$data);
    return $insert;
    }
     public function getAll(){
//veri tabanımızdan kullanici adlı tablodan tüm sonuçları getiren sorgu
        $select=$this->db->get($this->table)->result();
        return $select;
    }
//id ye göre kullanıcı getiren metot 
 public function get($where=array()){
//kullanıcıyı getiren satır sadece tek satır döndürür
$row = $this->db->where($where)->get($this->table)->row();
        return $row;
    }
     public function delete($where=array()){
//veri tabanından parametre olarak gelen id deki kişiyi silen kısım
//delete metodunda ilk parametre tablo ismi diğeri where kısmı kisi neye göre silinecekse o biz gelen id değerine göre sileceğiz.
        $delete=$this->db->delete($this->table,$where);
        return $delete;
    }
       public function update($where=array(),$data){
    //veri tabanından parametre olarak gelen id deki kişiyi güncelleyen kısım
     $this->db->where($where);
     $update=$this->db->update($this->table, $data); 
        return $update;
    }
}
 ?>


welcome.php contoler

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
//sınıfımızın yapıcı fonksiyonu
public function __construct()
    {
    //ilk önce üst sınıfın yapıcı fonksiyonu çağrılır
        parent::__construct();
        //model sınıfımızı yüklüyoruz.
        $this->load->model("kullanici_model");
    }
public function index()
{
//url ye controlerımızn ismi yazıldığında ilk olarak index  metodu çağrılır.
    //bir standat sınıf nesnesi oluşturup mddelden gelen değerleri atıyoruz.
    $data=new stdClass();
    $data->kullnaicilar=$this->kullanici_model->getAll();
    //viewimizi çağırıp modelden gelen değerleri viewimize gönderiyoruz
$this->load->view('welcome_message',$data);
}
   public function add_Kullanici(){
        $ad=$this->input->post("kullanici_adi");
        $soyad=$this->input->post("kullanici_soyadi");
//gelen verileri bir diziye aktarıyoruz "k_ad","k_soyad" veritabanımızdaki kolon adları
        $data=array("k_ad" => $ad ,
                    "k_soyad" => $soyad 
        );
//aldığımız değerleri kayıt için model sınıfımızın insert metodunu çağırıyoruz 
//gelen sonucu bir değişkene atıyoruz.
       $insert=$this->kullanici_model->insert($data);
//insert başarılı ise gerçekleşmişse viewimizi çağırıyoruz
      if($insert){
          $this->load->view("kullanici");
         }
        }
        public function delete_kullanici($id){
//ilk olarak silinecek kullanıcı id isne göre kullanıcıyı getiriyoruz
      $kullanici = $this->kullanici_model->get(array("id" => $id));
//kullanıcının resminin url sini alıyoruz
    $file_name = FCPATH ."resim/$kullanici->resim_url";
//resmmi unlink ile kaldırıyoruz
    if(unlink($file_name)){
//eğer resim dosyadan silindi ise veritabanından resmi siliyoruz
        $delete=$this->kullanici_model->delete(array("id"=>$id));
//veritabanından silme işlemi başarıle ile gerçekleştirilirse
if($delete){
       //gelen verileri tutacak sınıf nesnesi üretiyoruz
            $data=new stdClass();
            //gelen verileri nesnemize atıyoruz
           $data->kullnaicilar=$this->kullanici_model->getAll();
           //view i çağırıp gelen verileri view e gönderiyoruz
              $this->load->view('welcome_message',$data);
}
    }     
        }
            public function update_kullaniciPage($id){
              //güncelleyeceğimiz kişinini bilhgilerini tutmak için nesne oluşutruyoruz
              $data=new stdClass();
        //id sini bildiğimiz kişinini bilgileri getiriyoruz
            $data->kullnaicilar=$this->kullanici_model->get(array("id"=>$id));
      //aldığımız bilgileri güncelleme sayfasını yükleyip bilgileri view e gönderiyoruz
              $this->load->view('kullanici_guncellePage',$data);
            }
         public function update_kullanici($id){
          $ad=$this->input->post("kullanici_adi");
          $soyad=$this->input->post("kullanici_soyadi");
//gelen verileri bir diziye aktarıyoruz "k_ad","k_soyad" veritabanımızdaki kolon adları
          $data=array("k_ad" => $ad ,
                    "k_soyad" => $soyad 
           );
          $update=$this->kullanici_model->update(array("id"=>$id),$data);
//UPDATE işlemi başarılı ise kullanıcıları çekip viewimizi çağırıyoruz
           if($update){
            //gelen verileri tutacak sınıf nesnesi üretiyoruz
            $data=new stdClass();
            //gelen verileri nesnemize atıyoruz
           $data->kullnaicilar=$this->kullanici_model->getAll();
           //view i çağırıp gelen verileri view e gönderiyoruz
              $this->load->view('welcome_message',$data);
            }
        }
        public function newresim($id){
            $data["id"] =$id;
            $this->load->view("new_resim",$data);
                  }
        public function add($id){
                //resim ekleneceği klasör
                   $config['upload_path']          = 'resim/';
                //eklenecek resimin tipi
                $config['allowed_types']        = 'gif|jpg|png';
                //ekleme işleminde resmin adını şifreli bir şekilde kaydetmek için
                  $config['encrypt_name']     = true;
                //upload kütüphanesini oluşturduğumuz confige göre yüklüyoruz
                $this->load->library('upload', $config);
//dosya yükleme işlemini yapıyoruz
                if ( ! $this->upload->do_upload("resim"))
                {
                  //eğer yükleme işlemi başarısız olursa 
                  //hata dizimizi oluşturuyoz ve hatamızı alıyoruz
                        $error = array('error' => $this->upload->display_errors());
                  //hataları yazdırıyotuz
                     print_r($error);
                }
                else{
    //resim yükleme işlemi başarılı olursa
     //yüklenen resmin blgilerini alıyoruz
              $data = array('upload_data' =>$this->upload->data());
              //yüklenen resmin adını alıyoruz
              $img_id = $data["upload_data"]['file_name'];
             //veri tabanına yükleme işlemi yapmak için gerekli bilgilerin olduğu diziyi oluşturuyoruz
              $date=array(
              "resim_ad"=>$_FILES["resim"]['name'],
              "resim_url"=>$img_id
                 );
//veritabanında kişinin resim bilgilerini güncellemek için metodumuzu çağırıyoruz.
                 $result=$this->kullanici_model->update(array("id"=>$id),$date);
//veritabanında güncelleme işlemi başarılı ise
                if($result){
                  //controlerımızın adını yazıp yönlendirme yapıyoruz
                 redirect("welcome");
                           }
                      else{
                //yükleme işlmei başarısız ise tekrar resim seçme sayfasını çağırıyoruz    
                   redirect("welcome/newresim/$id");
                         }
}
}}
?>


Umarım faydalı olmuştur.Örneğimizin kodlarını buradan indirebilirsiniz.Bir sonraki dersimizde görüşmek üzere.

Hiç yorum yok:

Yorum Gönder

NodeJS-Socket.io Real Time Chat Uygulaması

Bu chat uygulmasını Node js ve socket.io kullanarak gerçekleştirdim.Veri tabanı olarak MySql kullandım.Kişiler Real time olarak birbirleriyl...