2016-08-13 82 views
0

這是一個好方法,從SQL表中刪除所有選定的行?刪除行與AJAX和PHP

該代碼工作正常,但也許有其他或更好的方法來做到這一點。真正的escape_string函數是在好的地方,或者我應該放在foreach循環,在sql查詢之前?

$('.deleteRows').click(function(e) 
{ 
    e.preventDefault(); 
    var val = []; 
    if(confirm("Biztos, hogy törölni szeretné a kijelölt sorokat?")) 
    { 
     $(':checkbox:checked').each(function(i){ 
      val[i] = $(this).val(); 
     }); 
     $.ajax({ 
      data: { val:val }, 
      type: 'POST', 
      url: 'files/delete_all_uzenet.php', 
      success: function(data) 
      { 
       var result = $.trim(data); 
       $('#newsletterResult').html(data); 
       $('#newsletterModal').modal('show'); 
      }, 
      complete: function() 
      { 
       setTimeout(function() 
       { 
        location.reload(); 
       }, 4000); 
      } 
     }); 
    } 
    return false; 
}); 

php文件:如果你在一個查詢合併所有業務

<?php 
include_once("../../files/connect.php"); 
if(isset($_POST['val'])) 
{ 
    foreach($_POST['val'] as $v) 
    { 
     mysqli_query($kapcs, $sql = "DELETE FROM kapcsolatfelvetel WHERE kapcsolat_id = '".mysqli_real_escape_string($kapcs, $v)."'") or die(mysqli_error($kapcs)); 
    } 
    echo 'Rows deleted'; 
} 
else 
{ 
    exit("No rows selected."); 
} 
?> 
+0

不,不是真的,使用準備好的參數化查詢來避免SQL注入 – RiggsFolly

回答

2

您的代碼將執行速度快了很多。一旦確認您有要刪除的值,請執行以下操作:

然後,您可以運行查詢以一次刪除所有行。 PS:你使用字符串轉義來清理你的字符串;這總比沒有好,但不如準備好的語句和參數化查詢。

PPS:您還應該檢查您的查詢是否成功執行。假設僅僅因爲你叫mysqli_query,行被刪除是錯誤的。

+0

謝謝,我明天會檢查它。 $ p =&$ _ POST ['val'] - &是什麼意思? And ... $ values ='('.implode(','$ p)。')'; 在內存中,爲什麼你編寫$ p?不是$ v? –

+0

@TakácsZoltán'&'設置'$ _POST'和'$ p'爲內存中的同一個引用。沒有它,'$ p'只是一個副本,這意味着如果你爲一個值添加一個值,它不會被添加到另一個。有了它,它們用不同的名稱來表示相同的東西,所以改變一個也會改變另一個。至於你的第二個問題,看看'implode'的文檔。它需要具有要粘貼在一起的值的數組。所以我使用了'$ p',因爲這是數組。 – BeetleJuice

+0

我得到了sytax錯誤:$ values ='('.implode(','$ p)。')'; –

0

@BeetleJuice

那麼,這是正確的方法嗎?

<?php 
include_once("../../files/connect.php"); 
if(isset($_POST['val'])) 
{ 
    $p = &$_POST['val']; 
    foreach($p as &$v) 
    { 
     $v = "'". mysqli_escape_string($kapcs, $v) ."'"; 
    } 
    $values = '('.implode(',',$p).')'; 

    mysqli_query($kapcs, $sql = "DELETE FROM kapcsolatfelvetel WHERE kapcsolat_id IN $values") or die(mysqli_error($kapcs)); 
    echo 'Rows deleted ok.'; 
} 
else 
{ 
    exit("No rows selected."); 
} 
?>