• 12-10-2023, 12:23:17
    #1
    Merhaba arkadaşlar, şimdi musteri adında bir tablom var silme işlemi gerçekleşince silinen verinin silinenmusteri tablosuna geçmesini istiyorum fakat bir türlü beceremedim. Aşağıdaki şekilde silme işlemini gerçekleştiriyorum.

    if (isset($_GET['sil'])) {
        $sorgu=$db->prepare("DELETE FROM musteri WHERE musteri_id={$_GET['musteri_id']}");
        $sonuc=$sorgu->execute()
    ;
  • 12-10-2023, 12:27:05
    #2
    dev
    Kurumsal Üye
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar, şimdi musteri adında bir tablom var silme işlemi gerçekleşince silinen verinin silinenmusteri tablosuna geçmesini istiyorum fakat bir türlü beceremedim. Aşağıdaki şekilde silme işlemini gerçekleştiriyorum.

    if (isset($_GET['sil'])) {
        $sorgu=$db->prepare("DELETE FROM musteri WHERE musteri_id={$_GET['musteri_id']}");
        $sonuc=$sorgu->execute()
    ;
    Su sql ornegi size yardimci olabilir https://stackoverflow.com/a/31532239/5682338
    Eger ozel bir neden yoksa ise hic silmek ile ugrasmayin. Soft delete isinizi cozecektir.
  • 12-10-2023, 12:31:04
    #3
    if (isset($_GET['sil']) && isset($_GET['musteri_id'])) {
        $musteri_id = $_GET['musteri_id'];
    
        // Adım 1: Sileceğiniz verileri seçin
        $selectSorgu = $db->prepare("SELECT * FROM musteri WHERE musteri_id = :musteri_id");
        $selectSorgu->bindParam(':musteri_id', $musteri_id, PDO::PARAM_INT);
        $selectSorgu->execute();
        $silinenVeri = $selectSorgu->fetch(PDO::FETCH_ASSOC);
    
        // Adım 2: Veriyi orijinal tablodan silin
        $silSorgu = $db->prepare("DELETE FROM musteri WHERE musteri_id = :musteri_id");
        $silSorgu->bindParam(':musteri_id', $musteri_id, PDO::PARAM_INT);
        $silSonuc = $silSorgu->execute();
    
        if ($silSonuc) {
            // Adım 3: Silinen veriyi "silinen kayıtlar" tablosuna ekleyin
            $ekleSorgu = $db->prepare("INSERT INTO silinen_musteri (musteri_id, sutun1, sutun2, ...) VALUES (:musteri_id, :sutun1, :sutun2, ...)");
            // 'sutun1', 'sutun2', ...'leri, 'musteri' tablosundan gelen gerçek sütun adlarıyla değiştirin
            $ekleSorgu->bindParam(':musteri_id', $silinenVeri['musteri_id'], PDO::PARAM_INT);
            $ekleSorgu->bindParam(':sutun1', $silinenVeri['sutun1'], PDO::PARAM_...); // Tüm sütunları bağlayın
            $ekleSonuc = $ekleSorgu->execute();
    
            if ($ekleSonuc) {
                echo "Kayıt başarıyla silindi ve silinen kayıtlar tablosuna taşındı.";
            } else {
                echo "Kaydı silinen kayıtlar tablosuna eklemekte başarısız oldum.";
            }
        } else {
            echo "Kaydı orijinal tablodan silmede başarısız oldum.";
        }
    }
    Bu kod sana yardımcı olacaktır hocam
  • 12-10-2023, 12:38:05
    #4
    Silinecek müşterinin bilgilerini saklayarak silme işlemi
    DELETE FROM musteri
    OUTPUT DELETED.musteri_id, DELETED.ad, DELETED.soyad INTO silinenmusteri
    WHERE musteri_id = [SILINECEK_MUSTERI_ID];


    düzenleyerek deneyebilirsin denemeden önce mutlaka yedek almayı unutmayın
  • 12-10-2023, 12:51:15
    #5
    daha basit mantıkla şunuda yapabilirsiniz.

    Verilerinizi listelerken where durum=1 dersiniz. Silme işleminde de herhangi bir veri silmeden update ile durum kısmını 0 yaparsınız. bu sayede sistemden silinmez ve kimseyede görünmez.
  • 12-10-2023, 13:15:07
    #6
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar, şimdi musteri adında bir tablom var silme işlemi gerçekleşince silinen verinin silinenmusteri tablosuna geçmesini istiyorum fakat bir türlü beceremedim. Aşağıdaki şekilde silme işlemini gerçekleştiriyorum.

    if (isset($_GET['sil'])) {
        $sorgu=$db->prepare("DELETE FROM musteri WHERE musteri_id={$_GET['musteri_id']}");
        $sonuc=$sorgu->execute()
    ;
    SNDizayn adlı üyeden alıntı: mesajı görüntüle
    daha basit mantıkla şunuda yapabilirsiniz.

    Verilerinizi listelerken where durum=1 dersiniz. Silme işleminde de herhangi bir veri silmeden update ile durum kısmını 0 yaparsınız. bu sayede sistemden silinmez ve kimseyede görünmez.
    en güzel ve stabil yöntem bu sayade karmaşanında önüne geçilmiş oluyor
  • 12-10-2023, 15:01:06
    #7
    Trigger kullanman daha mantıklı kod yazmana da gerek kalmaz. Müşteriyi ilk sisteme eklediğinde sql oluşturmuş oldugun musteri_log tablosuna trigger ile insert islemi yaptırırsın yani sen uyeyi sildigin gibi mysql otamatik olarak üyeyi musteri_log tablosuna kayıt eder.
    INSERT INTO musteri_log(musteri_adi_log,musteri_telefon_log ,stun3_log ,stun4_log ) VALUES (NEW.musteri_adi ,NEW.musteri_telefon,stun3 , stun4 ) şekinde
  • 12-10-2023, 17:05:04
    #8
    Üyeliği durduruldu
    Ufak bir tavsiye vereyim bununla ilgili,

    1 Tane tablo oluştur TrashTable diye;
    - TrashID => int(11)
    - TableName => varchar(255)
    - TrashData => json
    - DeleteAdminID => int(11)
    - DeleteDate => now()
    - Status => tinyint(1)

    1 tane fonksiyon oluştur misal;
    (Bu fonksiyon her tablodan veri sildiğinizde kullanabilirsiniz ve istediğiniz zaman tekrar tabloya aynı şekilde koyabilirsiniz. TrashData içerisinde direk o satırı alıp json olarak koyuyoruz.)
    public static function deleteData($identityColumn,$identityID,$tableName){
      // misal laravel db builder kullanıyoruz diyelim
      $getData = DB::table($tableName)
      ->select("*")
      ->where($identityColumn,"=",$identityID)
      ->first();
    
      if($getData != false){
        DB::beginTransaction();
        try{
          DB::table("TrashTable")
          ->insert(array(
            "TableName"=>$tableName,
            "TrashData"=>json_encode($getData,JSON_UNESCAPED_UNICODE)
            "DeleteAdminID"=>session('adminID')
          ));
    
          DB::table($tableName)
          ->where($identityColumn,"=",$identityID)
          ->delete();
    
          DB::commit();
          return true;
        }catch(Exception $e){
          DB::rollBack();
          return $e;
        }
      }else{
        return false;
      }
    }
  • 12-10-2023, 17:10:14
    #9
    Silmeden önce diğer tabloya veriyi aktarınız, daha sonrasında silme işlemini yapınız.
    INSERT INTO YeniTablo SELECT * FROM EskiTablo WHERE id = veriIdBuraya