<?php
require_once("Config/Config.php");
$listele = $db->query("SELECT * FROM hit");
$dizi = $listele->fetchAll(PDO::FETCH_ASSOC);
?>
<ul>
<form action="" method="POST">
<?php
foreach ($dizi as $row) {
?>
<li><input type="checkbox" name="id[]" value="<?php echo $row["id"];?>"><?php echo $row["ip"];?></li>
<?php
}
if($_POST)
{
$id1 = $_POST["id"];
echo "<pre>";
print_r ($id1);
echo "</pre>";
}
if($_POST)
{
$id = $_POST["id"];
$in = str_repeat('?,', count($id) - 1) . '?'; // Dizideki veri sayısı kadar soru işareti koy
$sil = $db->prepare("DELETE FROM hit WHERE id IN($in)"); // Soru işaretlerini sorguya ekle
$sil->execute($id); // Seçilen id değerlerini gönder
$hata = $sil->errorInfo();
if($hata[2])
{
echo "Silme işlemi başarısız";
}else
{
echo "Silme işlemi başarılı";
}
}
?>
<button type="submit">Seçilenleri sil</button>
</form>
</ul> PHP - PDO Çoklu Veri Silme
5
●1.114
- 01-03-2019, 22:58:45Kimlik doğrulama veya yönetimden onay bekliyor.Merhaba arkadaşlar, veritabanımda 33000 küsür kayıt var bu kayıtların hepsini tek tıkla silmek istiyorum. Listeliyorum checkbox atıyorum ama checkboxları toplu seçmenin yolunu bulamadım hepsini nasıl rahatça silebilirim?
- 01-03-2019, 23:12:54Yazmış olduğum sorgu fonksiyonu ile çoklu silme işlemi yapabilirsiniz.Tabi bazı kodları düzenlemeniz gerekiyor.
function _deleteArray($table, $where) { foreach($where as $wfield => $wrow) { $wheres[] = "`{$wfield}` = '{$wrow}'"; } $query = $db->exec("DELETE FROM {$table} WHERE ".implode('AND ', $wheres).""); return $query; }Kullanımı:
_deleteArray('tablo', ['id' => $id]);Sorguyu foreach içine atarsanız çalışması lazım. - 01-03-2019, 23:15:29Scarecrow adlı üyeden alıntı: mesajı görüntüle
Değiştirmem gereken bir yer var mı hocam? Biraz garip geldi açıkcası tam anlayamadım mantığı
- 01-03-2019, 23:17:59Ben kendi projelerimde kullanıyorum array ile silme işlemi yapmak için ama sizinde işinize yarar diye düşündüm burada.Değiştirmeniz gereken yer olarak, $db-> object'i olabilir kendi pdo değişkeninize göre ayarlarsınız.Sizin yazdığınız kodda sorgu foreach içinde olmaması gerekiyor, problem orada.Implode ile virgülleyip foreach dışında yaparsanız çalışır.Benim attığım sorgu da foreach içinde de çalışır.ScriptEvin adlı üyeden alıntı: mesajı görüntüle
- 01-03-2019, 23:23:40
if($_POST){ foreach($_POST["id"] as $row){ $sil = $db->prepare("DELETE FROM hit WHERE id = " . $row); $sil->execute($id); $hata = $sil->errorInfo(); if($hata[2]){ echo "Silme işlemi başarısız"; }else{ echo "Silme işlemi başarılı"; } } }*SQL sorgusunu kendinize sınıfıza göre düzenleyip deneyin lütfen.
Verileri checkbox olarak almayın, type hidden verin.