if (isset($_GET['sil'])) {
$sorgu=$db->prepare("DELETE FROM musteri WHERE musteri_id={$_GET['musteri_id']}");
$sonuc=$sorgu->execute();
PHP Silinen Veriyi Ayrı Bir Tabloya Taşıma
9
●268
- 12-10-2023, 12:23:17Merhaba 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.
- 12-10-2023, 12:27:05Su sql ornegi size yardimci olabilir https://stackoverflow.com/a/31532239/5682338Misafir adlı üyeden alıntı: mesajı görüntüle
Eger ozel bir neden yoksa ise hic silmek ile ugrasmayin. Soft delete isinizi cozecektir. - 12-10-2023, 12:31:04
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:05Silinecek 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, 13:15:07Misafir adlı üyeden alıntı: mesajı görüntüleen güzel ve stabil yöntem bu sayade karmaşanında önüne geçilmiş oluyorSNDizayn adlı üyeden alıntı: mesajı görüntüle
- 12-10-2023, 15:01:06Trigger 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Üyeliği durdurulduUfak 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; } }