Php-Mysql veritabanı silme işlemi
11242 3

Sql "DELETE" Deyimi

DELETE deyimi sql dilinde silme işlemleri için kullanılır. Bu deyimin yazım şekli şöyledir.

DELETE FROM tablo_adi
WHERE sart_ifadesi

Önceki derslerde kullandığım tablo örneğini üzerinde "DELETE" deyiminin kullanımıyla ilgili bir kaç uygulama yapalım. Tablo aşağıdaki gibiydi ve adı "ogrenciler" olarak belirtilmişti.

id ad_soyad okul_no yas cinsiyet
1 Zeynep Çimen 125 15 Bayan
2 Emrah Yalaz 127 16 Erkek
3 Ahmet Topuz 128 15 Erkek
4 Elif Duman 130 16 Bayan
5 Hasan Durmaz 132 17 Erkek

Örneğin id'si "4" olan kaydı silmeye çalışalım.

DELETE FROM ogrenciler
WHERE id='4'

Yada yaşı 15'ten büyük olan kayıtların silinmesi için; 

DELETE FROM ogrenciler
WHERE yas>'15'

2 şartımız olsun, yaşı 15'ten büyük olan erkek öğrencileri silelim.

DELETE FROM ogrenciler
WHERE yas>'15' && cinsiyet='erkek'

Şimdi de veritabanı işlemleri için hazırladığımız uygulamaya yeni bir dosya ekleyelim ve adı "sil.php" olsun. Daha önce listeleme işleminde yazmış olduğumuz kodları yine kullanacağız ve biraz daha üzerine ekleyeceğiz. Videoda bahsetmediğim bazı şeylerden burada bahsedeyim. 

  • GET yöntemi ile link oluştururken "index.php?sayfa=sil" demek yerine "?sayfa=sil" ifadesi de kullanılabilir. Bunu söylememdeki sebep başka bir yerde görürseniz şaşırmayın.
  • Form elementinde action özelliğine "index.php?sayfa=sil" yerine hiç birşey yazmasanız da olur. "action" boş bırakılırsa şu an bulunduğun sayfaya gönder anlamına gelir.
  • Uygulamada çalışsa da mantık olarak yaptığımız bir hata! aynı isme sahip birden fazla form elemanı olamaz, yani her kaydın dışında bulunan formların ismi form1 olarak kalıyor. Bunun yerine yardımcı bir değişken kullanıp her formun adının değişik olması sağlanmalı. Aşağıda bu şekilde yazılacak.

Açıklamaları ile birlikte kodları aşağıya yazalım.

POST yöntemi ile;

<?php
if ($_POST){//post metodu ile değer gönderildiyse
    $id=$_POST["id"];//hidden ile gönderilen id değerini al
    $sor=mysql_query("delete from deneme where id='$id'");//id değerine eşit id'li kaydı sil
    if ($sor){
        echo "Kayıt silindi";
    }else{
	    echo "Kayıt Silinemedi";
    }
}else{//post metodu ile değer gönderilmediyse
    $sorgu=mysql_query("select * from deneme");//Tüm kayıtları seç
    echo '<table>';
    echo '<tr><td>Ad</td><td>Soyad</td><td>E-Posta</td><td>Silinsin mi?</td></tr>';
    $sayac=1;//Formların isimleri farklı olsun diye kullanılacak
    while($kayit=mysql_fetch_array($sorgu)){
	    echo '<form action="" method="post" name="form'.$sayac.'">';
    	echo '<tr>';
    	echo '<td>'.$kayit["ad"].'</td>';
    	echo '<td>'.$kayit["soyad"].'</td>';
    	echo '<td>'.$kayit["e_posta"].'</td>';
    	echo '<td><input type="submit" name="gonder" value="Evet"/></td>';
    	echo '<input type="hidden" name="id" value="'.$kayit["id"].'"/>';
    	echo '</tr>';
    	echo '</form>';
        $sayac++;
    }
echo '</table>';
}
?>

GET yöntemi ile;

<?php
if (isset($_GET["id"])){//get metodu ile id değeri gönderildiyse
    $id=$_GET["id"];
    $sor=mysql_query("delete from deneme where id='$id'");//id değerine eşit id'li kaydı sil
    if ($sor){
        echo "Kayıt silindi";
    }else{
	    echo "Kayıt Silinemedi";
    }
}else{//get metodu ile id değeri gönderilmediyse
    $sorgu=mysql_query("select * from deneme");
    echo '<table>';
    echo '<tr><td>Ad</td><td>Soyad</td><td>E-Posta</td><td>Silinsin mi?</td></tr>';
    while($kayit=mysql_fetch_array($sorgu)){
	    echo '<tr>';
    	echo '<td>'.$kayit["ad"].'</td>';
    	echo '<td>'.$kayit["soyad"].'</td>';
    	echo '<td>'.$kayit["e_posta"].'</td>';
    	echo '<td><a href="?sayfa=sil&id='.$kayit["id"].'">Evet</a></td>';
    	echo '</tr>';
    }
    echo '</table>';
}
?>

 

Yorumlar
bozok 1 yıl önce dedi ki;
Hocam bu silme işlemini daha önceki verileri listeleme işlemin ile birlikte yapabilirmiyiz ayrı bir sayfa olmadan. Yani listelediğimiz verilerin yanında sil seçeneği olsa. Ayrıca silmek için başka sayfaya gidilmse çok daha pratik olur. Cevapla
bozok 1 yıl önce dedi ki;
Birde hocam birde çalışmada düzenleme sayfasıda var onuda anlatımını yapabilirmisiniz. Konular çok iyi anlatımlı olmuş ve çok yerinde mühim konuları anlarmışsınız bunun içinde tebrik ediyor. Derslerinizin devamını bekliyorum. Cevapla
emirsiriner 1 yıl önce dedi ki;
Kolay gelsin hocam... Bu dersinize istinaden birşey sormak istiyorum. Veritabanında Klasor/AltKlasor diye bir dosya yolumuz var. Her türlü kaydı yapabiliyoruz sorun yok, ama altklasörleri içindeki resimlerle birlikte silebiliyoruz da ilk Klasörün içi doluysa silme komutunu bulamıyorum. Dosyayolunu klasör gibi okuyamıyorum dolu mu boş mu. Bana bu konuda yardımcı olur musunuz... Teşekkürler... Saygılar... Cevapla
^
X