• 01-03-2019, 22:58:45
    #1
    Kimlik 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?
    <?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>
  • 01-03-2019, 23:12:54
    #2
    Yazmış 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:29
    #3
    Scarecrow adlı üyeden alıntı: mesajı görüntüle
    Yazmış 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.

    Değiştirmem gereken bir yer var mı hocam? Biraz garip geldi açıkcası tam anlayamadım mantığı
  • 01-03-2019, 23:17:59
    #4
    ScriptEvin 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ığı
    Ben 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.
  • 01-03-2019, 23:23:40
    #5
    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.
  • 02-03-2019, 09:39:25
    #6
    if($_POST){
      $imp = implode(",",$_POST["id"]);
           $sil = $db->exec("DELETE FROM hit WHERE IN (".$imp.")" );
            if($sil){
              echo "Silme işlemi başarılı";
            }else{
              echo "Silme işlemi başarısız";
            }     }