2010-07-20 153 views
0

在Php中,我們都知道,像Asp.Net的GridView等本身沒有內置控件。我使用Html的<table>來構建網格並將行的id保存在一個隱藏字段中。我還在每行的開頭放置了一個複選框,並在網格的底部放置了一個刪除按鈕。我面臨的問題是,我如何獲取所有已選中的ID,以便我可以在DeleteIN條款中通過這些ID?如何一次刪除多條記錄?

回答

0

首先你的名字你所有的複選框通過這樣一個數組被創建在他們的名字後面添加[],以後這就是你如何能得到那些檢查,並採取相應的行動:

for($i = 0; $i < count($_POST['checks']); $i++) 
{ 
    if (isset($_POST['checks'][$i])) 
    { 
    // this was checked !! 
    } 
} 

哪裏checks是名稱所有這些複選框例如:

<input type="checkbox" name="checks[]" value="1" /> 
<input type="checkbox" name="checks[]" value="2" /> 
<input type="checkbox" name="checks[]" value="3" /> 

這就是你如何能得到那些你IN子句中查詢:

$checked_array = array(); 

for($i = 0; $i < count($_POST['checks']); $i++) 
{ 
    if (isset($_POST['checks'][$i])) 
    { 
    $checked_array[] = mysql_real_escape_string($_POST['checks'][$i]); 
    } 
} 

// build comma separated string out of the array 
$values = implode(',', $checked_array); 

現在,您可以在查詢的IN子句中使用$values

+1

您將$ _POST ['checks']複製到$ checked_array?國際海事組織他不能直接在他的查詢中使用數組:o – fabrik 2010-07-20 12:52:14

+0

是的,這是行不通的。另外,它很容易受到SQL注入的影響。 – ceejayoz 2010-07-20 12:54:49

+0

$ IN = implode(',',$ checked_array); – fabrik 2010-07-20 12:55:16

1

看看目前正在提交的內容:

var_dump($_POST); 

你會看到所有的字段值。如果你選擇了正確的複選框,你將有一個要刪除的rowID數組,你可以在構建查詢時簡單地implode(',',$ _ POST ['checkBoxes'])或類似的東西。

安全將成爲一個問題在這裏...我敢肯定別人會深入發表這個,但你一定要驗證用戶可以刪除這些記錄。

1

爲每個複選框命名一個半唯一名稱,如tablerow[numeric_id]。當您提交表格時,您可以簡單地捕獲已檢查的所有已發佈tablerow值。