• 17-10-2017, 16:24:22
    #1
    Arkadaşlar şöyle bir sıkıntım var. Emlak ilanı yayınlıyorum. Vitrin resmini "emlak" tablosundan diğer resimleri "ilangaleri" isimli tablodan çekiyorum. Buraya kadar herşey normal. Yalnız ilanı sildiğimde vitrin resmini sunucudan sildirebiliyorum ama aynı sorguya diğer resimleri sildirmek için nasıl bir kod eklemeliyim çözemedim. Kodlara gelecek olursak;
    Sil butonunun kodları şu şekilde;
    <a href="admin/connect/islem.php?ilansil=ok&emlak_resim=<?php echo $emlakcek['emlak_resim']; ?>&emlak_id=<?php echo $emlakcek['emlak_id'];?><?php while($galericek=$galerisor->fetch(PDO::FETCH_ASSOC)) {?>&galeri_resimyol=<?php echo $galericek['galeri_resimyol'];}?>&emlakgaleri_id=<?php echo $emlakcek['emlak_id'];?>"
                                class="action-btn" data-toggle="tooltip" data-placement="top" title="Sil"><span style="text-align: center" class="label label-danger"><i class="fa fa-trash"></i> İlanı Sil</span></a>
    Bu kodlarla emlak_resim ile vitrin görselini, while döngüsü ile de galeri_resimyol daki diğer resimleri islem.php ye gönderiyorum.
    islem.php deki kodlar ise şu şekilde;
    if ($_GET['ilansil']=="ok") { 
      $sil=$db->prepare("DELETE from emlak where emlak_id=:emlak_id");
      $kontrol=$sil->execute(array(
        'emlak_id' => $_GET['emlak_id']
        ));
      if ($kontrol) {
        $resimsilunlink=$_GET['emlak_resim'];
        unlink("../../$resimsilunlink");
        header("Location:../../ilanlarim.php?sil=ok");
      }
      else {
        header("Location:../../ilanlarim.php?sil=no");
      }
    }
    islem.php deki bu kodlar ile ilanı ve sunucudan emlak_resim dediğim vitrin görselini sildirebiliyorum. Buraya nasıl bir düzenleme yapmam lazım ki galeri_resimyol daki diğer görselleride silsin.
    Umarım derdimi anlatabilmişimdir. Şimdiden teşekkürler.
  • 17-10-2017, 16:27:14
    #2
    Kodları inceleyemedim yolda olduğum için. Bu tür birden fazla işlem yapmak için transaction kullanmalısın. Ayrıca böyle bir sistemi framework kullanarak yapmalısın. Kodlar spagetti olmuş.


    Tapatalk Pro kullanarak iPhone aracılığıyla gönderildi
  • 17-10-2017, 16:34:12
    #3
    nsgnc adlı üyeden alıntı: mesajı görüntüle
    Kodları inceleyemedim yolda olduğum için. Bu tür birden fazla işlem yapmak için transaction kullanmalısın. Ayrıca böyle bir sistemi framework kullanarak yapmalısın. Kodlar spagetti olmuş.


    Tapatalk Pro kullanarak iPhone aracılığıyla gönderildi
    Hocam o kadar bilgi sahibi değilim maalesef. Framework ya da transaction nasıl kullanılır bilmiyorum. Eğitim videoları ve biraz da araştırmayla birşeyler yapmaya çalışıyorum bende. Benim kullanığım yapı dışında farklı bir şekilde ilana galeri ekleyip, ilanı sildiğimde de komple sunucdan silecek bir yöntem varsa (örnek kodların da olması lazım yoksa bilgim yetersiz kalır) onu da kullanabilirim.
  • 18-10-2017, 10:46:00
    #4
    Bu : "Mysql trigger" konuyu araştırmalısın.
  • 18-10-2017, 18:12:12
    #5
    @uykusuzz35;

    emlak tablosundan ilgili kaydı sildikten sonra bir sorgu daha yazıp ilgili emlak id ye ait diğer resimleri galeri tablosundan çektirip döngü ile sildirmelisiniz. Tek sorguda trigger vb. yöntemlerle mysql kısmını halletseniz bile galerideki resimler ftpde kalmaya devam edecektir tam anlamıyla silme işlemi için 2. bir sorgu şarttır. Aşağıda basit bir örnek veriyorum, birebir kopyala ile çalışmayabilir ama mantığını anlamanız için kendinize göre uyarlayabilirsiniz.
    Aşağıdaki örnekte diğer resimlerin "digerresimler" isimli tabloda tutulduğunu ve digerresimler isimli tabloda "emlak_id" sutününün olduğunu ve resim adlarının "resim" isimli sutünda tutulduğunu varsaydım.
    Örnek:
    if ($_GET['ilansil']=="ok") { 
      $sil=$db->prepare("DELETE from emlak where emlak_id=:emlak_id");
      $kontrol=$sil->execute(array(
        'emlak_id' => $_GET['emlak_id']
        ));
      if ($kontrol) {
        $resimsilunlink=$_GET['emlak_resim'];
        unlink("../../$resimsilunlink");
        
        //diğer resimleri sorguyla çekip ftpden siliyoruz
            $diger_resimler_prepare = $db->prepare("Select resim From digerresimler where emlak_id=:emlak_id");
            $diger_resimler_execute = $diger_resimler_prepare->execute(array('emlak_id' => $_GET['emlak_id']));
            
            $diger_resimler_dizi = $diger_resimler_execute->fetchAll();
            foreach ($diger_resimler_dizi as $key=>$value)
            {
                $foto = $value['resim'];
                 unlink("../../$foto"); //ftpden sil
            }
        //
        
        //ilgili emlak_idye ait diğer resimleri veritabanındaki digerresimler isimli tablodan siliyoruz
            $sil=$db->prepare("DELETE from digerresimler where emlak_id=:emlak_id");
              $kontrol=$sil->execute(array('emlak_id' => $_GET['emlak_id']));
        //
        
        header("Location:../../ilanlarim.php?sil=ok");
      }
      else {
        header("Location:../../ilanlarim.php?sil=no");
      }
    }
  • 20-10-2017, 12:15:28
    #6
    yasarkemaldag adlı üyeden alıntı: mesajı görüntüle
    @uykusuzz35;

    emlak tablosundan ilgili kaydı sildikten sonra bir sorgu daha yazıp ilgili emlak id ye ait diğer resimleri galeri tablosundan çektirip döngü ile sildirmelisiniz. Tek sorguda trigger vb. yöntemlerle mysql kısmını halletseniz bile galerideki resimler ftpde kalmaya devam edecektir tam anlamıyla silme işlemi için 2. bir sorgu şarttır. Aşağıda basit bir örnek veriyorum, birebir kopyala ile çalışmayabilir ama mantığını anlamanız için kendinize göre uyarlayabilirsiniz.
    Aşağıdaki örnekte diğer resimlerin "digerresimler" isimli tabloda tutulduğunu ve digerresimler isimli tabloda "emlak_id" sutününün olduğunu ve resim adlarının "resim" isimli sutünda tutulduğunu varsaydım.
    Örnek:
    if ($_GET['ilansil']=="ok") { $sil=$db->prepare("DELETE from emlak where emlak_id=:emlak_id"); $kontrol=$sil->execute(array( 'emlak_id' => $_GET['emlak_id'] )); if ($kontrol) { $resimsilunlink=$_GET['emlak_resim']; unlink("../../$resimsilunlink"); //diğer resimleri sorguyla çekip ftpden siliyoruz $diger_resimler_prepare = $db->prepare("Select resim From digerresimler where emlak_id=:emlak_id"); $diger_resimler_execute = $diger_resimler_prepare->execute(array('emlak_id' => $_GET['emlak_id'])); $diger_resimler_dizi = $diger_resimler_execute->fetchAll(); foreach ($diger_resimler_dizi as $key=>$value) { $foto = $value['resim']; unlink("../../$foto"); //ftpden sil } // //ilgili emlak_idye ait diğer resimleri veritabanındaki digerresimler isimli tablodan siliyoruz $sil=$db->prepare("DELETE from digerresimler where emlak_id=:emlak_id"); $kontrol=$sil->execute(array('emlak_id' => $_GET['emlak_id'])); // header("Location:../../ilanlarim.php?sil=ok"); } else { header("Location:../../ilanlarim.php?sil=no"); } }
    İlginiz için çok teşekkür ederim. Mantığı anladım. Kendime göre düzenledim. Fakat sil butonuna bastığımda yine sadece emlak tablosuna göre mysql den ilanı ve sunucudan da vitrin görselini (emlak_resim) siliyor. Diğer resimler hem sunucuda hemde mysql de ilangaleri tablosunda duruyor. Bir de sil butonuna tıkladığımda boş sayfada şu linke yönlenip kalıyor. "islem.php?ilansil=ok&emlak_resim=images/ilan-detay/295296-deryap-01.jpg&emlak_id=59&emlakgaleri_id=59" yani islem.php den geri dönmüyor. Sizin verdiğiniz kod yapısına göre kendime uyarlamış olduğum hali şu şekilde;
    if ($_GET['ilansil']=="ok") { 
      $sil=$db->prepare("DELETE from emlak where emlak_id=:emlak_id");
      $kontrol=$sil->execute(array(
        'emlak_id' => $_GET['emlak_id']
        ));
      if ($kontrol) {
        $resimsilunlink=$_GET['emlak_resim'];
        unlink("../../$resimsilunlink");
         
        //diğer resimleri sorguyla çekip ftpden siliyoruz
            $diger_resimler_prepare = $db->prepare("SELECT galeri_resimyol From ilangaleri where emlakgaleri_id=:emlakgaleri_id");
            $diger_resimler_execute = $diger_resimler_prepare->execute(array('emlakgaleri_id' => $_GET['emlakgaleri_id']));
             
            $diger_resimler_dizi = $diger_resimler_execute->fetchAll();
            foreach ($diger_resimler_dizi as $key=>$value)
            {
                $foto = $value['galeri_resimyol'];
                 unlink("../../$foto"); //ftpden sil
            }
        //
         
        //ilgili emlak_idye ait diğer resimleri veritabanındaki digerresimler isimli tablodan siliyoruz
            $sil=$db->prepare("DELETE from ilangaleri where emlakgaleri_id=:emlakgaleri_id");
              $kontrol=$sil->execute(array('emlakgaleri_id' => $_GET['emlakgaleri_id']));
        //
         
        header("Location:../../ilanlarim.php?sil=ok");
      }
      else {
        header("Location:../../ilanlarim.php?sil=no");
      }
      
    }
    Diğer resimlerim "ilangaleri" isimli tabloda ve bu tabloda "emlak_id" değil de "emlakgaleri_id" sutünu var ve emlak_id ile aynı değeri alıyor zaten. resim adları da "galeri_resimyol" isimli sutünda bulunuyor. Sil butonundaki kodlarda mı bir hata yapıyorum acaba? Sil butonunun güncel kodu da şu şekilde;
    <a href="admin/connect/islem.php?ilansil=ok&emlak_resim=<?php echo $emlakcek['emlak_resim']; ?>&emlak_id=<?php echo $emlakcek['emlak_id'];?>&emlakgaleri_id=<?php echo $emlakcek['emlak_id'];?>"
                                class="action-btn" data-toggle="tooltip" data-placement="top" title="Sil"><span style="text-align: center" class="label label-danger"><i class="fa fa-trash"></i> İlanı Sil</span></a>




    yasarkemaldag adlı üyeden alıntı: mesajı görüntüle
    @uykusuzz35;

    emlak tablosundan ilgili kaydı sildikten sonra bir sorgu daha yazıp ilgili emlak id ye ait diğer resimleri galeri tablosundan çektirip döngü ile sildirmelisiniz. Tek sorguda trigger vb. yöntemlerle mysql kısmını halletseniz bile galerideki resimler ftpde kalmaya devam edecektir tam anlamıyla silme işlemi için 2. bir sorgu şarttır. Aşağıda basit bir örnek veriyorum, birebir kopyala ile çalışmayabilir ama mantığını anlamanız için kendinize göre uyarlayabilirsiniz.
    Aşağıdaki örnekte diğer resimlerin "digerresimler" isimli tabloda tutulduğunu ve digerresimler isimli tabloda "emlak_id" sutününün olduğunu ve resim adlarının "resim" isimli sutünda tutulduğunu varsaydım.
    Örnek:
    if ($_GET['ilansil']=="ok") { $sil=$db->prepare("DELETE from emlak where emlak_id=:emlak_id"); $kontrol=$sil->execute(array( 'emlak_id' => $_GET['emlak_id'] )); if ($kontrol) { $resimsilunlink=$_GET['emlak_resim']; unlink("../../$resimsilunlink"); //diğer resimleri sorguyla çekip ftpden siliyoruz $diger_resimler_prepare = $db->prepare("Select resim From digerresimler where emlak_id=:emlak_id"); $diger_resimler_execute = $diger_resimler_prepare->execute(array('emlak_id' => $_GET['emlak_id'])); $diger_resimler_dizi = $diger_resimler_execute->fetchAll(); foreach ($diger_resimler_dizi as $key=>$value) { $foto = $value['resim']; unlink("../../$foto"); //ftpden sil } // //ilgili emlak_idye ait diğer resimleri veritabanındaki digerresimler isimli tablodan siliyoruz $sil=$db->prepare("DELETE from digerresimler where emlak_id=:emlak_id"); $kontrol=$sil->execute(array('emlak_id' => $_GET['emlak_id'])); // header("Location:../../ilanlarim.php?sil=ok"); } else { header("Location:../../ilanlarim.php?sil=no"); } }
    Sorunu çözdüm hocam. Sizin yol göstermeniz sayesinde oldu. Çok teşekkür ederim. Kodlarda biraz değişiklik yaptım. Belki ihtiyacı olan olur diye paylaşıyorum. İlgi gösteren herekese teşekkürler.
    if ($_GET['ilansil']=="ok") { 
      $sil=$db->prepare("DELETE from emlak where emlak_id=:emlak_id");
      $kontrol=$sil->execute(array(
        'emlak_id' => $_GET['emlak_id']
      ));
      if ($kontrol) {
        $resimsilunlink=$_GET['emlak_resim'];
        unlink("../../$resimsilunlink");
        //diğer resimleri sorguyla çekip ftpden siliyoruz
        $galerisor=$db->prepare("SELECT galeri_resimyol from  ilangaleri where emlak_id=:emlak_id");
        $galerisor->execute(array(
          'emlak_id' => $_GET['emlak_id']
        ));
       
        while ( $galericek=$galerisor->fetch(PDO::FETCH_ASSOC)) {
         
          $resimsilgaleri=$galericek['galeri_resimyol'];
            unlink("../../$resimsilgaleri");
               } 
        //
        //ilgili emlak_idye ait diğer resimleri veritabanındaki digerresimler isimli tablodan siliyoruz
               $sil=$db->prepare("DELETE from ilangaleri where emlak_id=:emlak_id");
               $kontrol=$sil->execute(array('emlak_id' => $_GET['emlak_id']));
        //
               header("Location:../../ilanlarim.php?sil=ok");
             }
             else {
              header("Location:../../ilanlarim.php?sil=no");
            }
          }