herşeyi siliyor
class Name {
public function delete($par=0)
{
$Namelistele=$this->prepare("SELECT * FROM name WHERE ustsayfa= ? ");
$Namelistele->execute(array($par));
foreach($Namelistele as $Namei)
{
$Namesil=$this->prepare("DELETE FROM name WHERE psira = ? ");
$Namesil->execute(array($Namei["psira"]));
$this->delete($Namei["psira"]);
}
$Namesill=$this->prepare("DELETE FROM name WHERE psira= ? ");
$Namesill->execute(array($par));
return true;
}
}
bu fonksiyonu içine değer verip çalıştırdığımda tablodaki tüm kayıtları siliyor.
nedeni ne olabilir sizce?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (7)
Hocam şöyle olabilir.
Bir tane sütunu seçebilirsiniz eğer ustsira da onun id si geçen varsa daha sonra onu alabilirsiniz bunu bir döngüye dökebilirsiniz.
(Bir Örnek Oluşturup Atmaya Çalışacağım.)
aynı tabloda oldukları farklı bir tabloya bağlayamıyorum.
<?php
function katbull($par=0,$kategorri=0)
{
$kategorisiz = 0;
$kategorilistele=$GLOBALS["baglan"]->prepare("SELECT * FROM kategoriler WHERE ustkatno= ? ");
$kategorilistele->execute(array($par));
foreach($kategorilistele as $kategorii)
{
$kategorisil=$GLOBALS["baglan"]->prepare("DELETE FROM kategoriler WHERE sira= ? ");
$kategorisil->execute(array($kategorii["sira"]));
katbull($kategorii["sira"],$kategorri);
}
$kategorisill=$GLOBALS["baglan"]->prepare("DELETE FROM kategoriler WHERE sira= ? ");
$kategorisill->execute(array($par));
return true;
}
if(katbull($sira))
{
?>
<div class="alert alert-success">
<strong>Başarıyla Silindi !</strong>Seçtiğiniz Başarıyla Silindi.... <br> Yönlendiriliyorsunuz...
</div>
<script type="text/javascript">
window.open("index.php?menu=kategoriler","_top");
</script>
<?php
}
?>
bu şekilde kullanınca sorun yok lakin class içine alınca çözemedim.
tabloları birbirine bağlayarak yaparsın
inner join ile yaparsın
foringkey ile olur
- tablo işlerimleri
if (işlemoldu)
2.tablo işlemleri
if 2. tablo işemi dolu
3.tablo işmleri
gibi yaparsın.
şimdi şöyle bir tablom var adı tablo_1 olsun bu taploda psira (int-primarykey) , title adlı bir varchar(50) , ustsayfa (int) var
tablo içerkleri şöyle
1 sayfa 0
2 sayfa2 0
3 sayfa1 1
4 sayfa2 3
gibi alt alta sayfalama olarak düşünebiliriz.
ben bir tane sayfayı silince fonksiyonun bu sayfanın alt sayfalarınıda silmesini istiyorum.
mesela psira sı 1 olan sayfa yı silince sisten ustsayfası 1e bağlı olan sayfaları da silsin buna bağlı olarak onun alt sayfalarınıda silsin
örnek sayfa silinince , sayfa1 ve sayfa2 de silinsin
yukardaki çıktı şöyle
-sayfa
--sayfa1
---sayfa2
-sayfa2
Öncelikle yapmak istediğini anlamadım. Sadece silmek gibi duruyor.
Yazdığın kodlar mantığa meydan okuyor resmen. Benim yazdığımı kullan hem daha az yer kaplar hemde daha basit bir kullanımı var.
class Name {
public function delete(string $tableName, string $where,string $value): bool
{
$delete=$this->prepare("DELETE FROM $tableName WHERE $where ='$value'");
$delete->execute();
return $delete->rowCount();
}
}
Kullanım:
require 'Dosya_Adı';
$name = new Name();
$name->delete('name','psira','1');
Yukarıdaki kullanım sadece siler. Bunun silinip silinmediğini kontrol edebilirsin.
Kontrollü:
require 'Dosya_Adı';
$name = new Name();
if ($name->delete('name','psira','1')): //Eğer silinirse devam et
$name->delete('name','psira','2'); //ve devamında bunu da sil
echo 'silindiler';
endif;
-name
--name
--name
---name
----name (bunu silince sadece bunu silmek)
-name2
--name2 (bunu silince bu ve altındakileri silmek.)
---name2
----name2