假設現在取出的資料有六十筆
每一個品項都有一個,當勾了 checkbox 後表示我要選中這個品項
稍微示意一下
<input type="checkbox">
<input name="store[]" value="1">
<input name="store[]" value="2">
<input name="store[]" value="3">
<input name="store[]" value="4">....
假設勾選後我會把 store[] 賦值
所以當後端接收時會這樣
foreach ($_POST['store'] as $key => $val) {
...
}
我就會根據 store array 裡面有的東西去 INSERT INTO
表示你選中這些
但如果當我某一個品項不選了呢 我要怎麼知道?
我現在的做法是 INSERT INTO 之前會先將所有有關的 store 清除
再重新 INSERT INTO 一次,就表示你最新要的就是這些
現在遇到一個問題是
資料現在可能有一百筆,於是需要做分頁,分頁事小
但我假設在第一頁也勾了我要勾的按送出(此時正常)
但是當我到第二頁勾好後送出,就會把其他頁的 store 資訊刪除
因為上面那步驟是我 INSERT INTO 前會先清除所有相關 store
所以我很好奇怎麼做才能解決這個問題?
解法可能是需要用比對的?那是怎麼個比對法呢
個人的寫法是判斷 if ($val<>''){它有沒有值,來判斷要不要寫入變數,後續再跟資料庫進行交易。
foreach ($_POST['store'] as $key => $val) {
if ($val<>''){
if ($str=='') {$str=$val;}
else {$str = $str."','".$val;}
}
}
$str = "'".$str."'";
然後一次性跟資料庫比對那些是新增的,那些是要刪除的。
if ($str <>"''" ){
//增加
$l_sql = "....";<--找出原本有,這次要增加的
while(...){
一筆一筆加;
}
//減少
$l_sql="...";<--找出原本有,這次要減少的
while(...){
一筆一筆刪;
}
}
你第一個程式碼怪怪的。正常因該是如下才對
<input type="checkbox" name="store[]" value="1" />
<input type="checkbox" name="store[]" value="2" />
<input type="checkbox" name="store[]" value="3" />
<input type="checkbox" name="store[]" value="4" />
這邊要先了解一下checkbos的特性。一但沒有任意值被選擇的情況下,正常是不會有該post值的。
所以要判斷有無值可以用
if(isset($_POST['store']))
這樣就可以處理了。
再來就是參數,你可以用session記錄下來。這樣就不用擔心參數無法傳送的問題