2015年4月28日

[筆記] PHP:透過核取方塊批次(同時)刪除被選取的資料


我希望撰寫一段語法,讓網友能夠將想要刪除的檔案,透過核取方框一次勾選,然後一次刪除。

print_r( )用來呈現陣列的一種方式。
foreach(陣列 as $value){...}一種用來輸出陣列的方式,或者也可以寫成foreach ( 陣列 as $key => $value )。

基本概念說明

STEP 1HTML表單撰寫
我們先寫一個如下的頁面:


這段的HTML語法為:
<form method="post" name="form1" id="form1" action="delete.php">
  <p>請問你平常搭什麼交通工具?</p>
  <p>
    <label>
      <input type="checkbox" name="checkbox[]" value="火車" id="checkbox_0" />
      火車
    </label>
    <br />
    <label>
      <input type="checkbox" name="checkbox[]" value="機車" id="checkbox_1" />
      機車
    </label>
    <br />
    <label>
      <input type="checkbox" name="checkbox[]" value="高鐵" id="checkbox_2" />
      高鐵
    </label>
    <br />
  <label>
      <input type="checkbox" name="checkbox[]" value="公車" id="checkbox_3" />
      公車
    </label>
  </p>
  <p>
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>

這裡有兩個可以留意的地方:
1.這個頁面的資料將會被傳到delete.php去做確認刪除的動作(action="delete.php)。
2.為了要在送出之後把這些核取方塊的值都存取成一個陣列,我們必須要做一個很重要的步驟,就是把每個INPUT中核取框name的地方加上[ ],所以每個核取框的name都會變成name = "checkbox[ ]",如果沒做這個動作的話,到時候只會收到最後一個核取框的值。

STEP 2讀取表單結果

這時候,我到delete.php這個頁面撰寫PHP語法來獲取表單內容:
<?php
   $check=$_POST['checkbox'];
   echo $check;
?>
這時候會回傳「Array」的結果,意思就是check這個變數是一個陣列。

接著讓我們來看看陣列,我們可以利用print_r( )這個函數來獲取陣列的結果:
<?php 
    $check=$_POST['checkbox'];
 print_r($check);
?>
從下面的結果,我們可以清楚看到陣列的結構,表示網友勾選了機車和高鐵這兩個核取框


另一種輸出陣列的方法,則可以使用foreach,寫法像是這樣
<?php 
    $check=$_POST['checkbox'];
 foreach($check as $value){
  echo $value;
 }
?>
這個語法的意思是,把check這個陣列的函數存取出值來($value可以取為任何名稱),每取一次就幫我echo一次變數$value的值,所以結果會像這樣子:


批次刪除核取檔案的寫法
STEP 1:批次刪除資料

有了上面的基本概念我們就可以瞭解要怎麼進行批次刪除的動作了,我只要在foreach函數裡,加上  mysql_query("delete from 資料表名稱 where 欄位名稱 = $value")這樣的寫法就可以了,像是這樣:
<?php 
    $check=$_POST['checkbox'];
 foreach($check as $value){
  mysql_query("delete from 資料表名稱 where 欄位名稱 = $value");
 }
?>
這麼做的話,每次呼叫出一個被核取的值時,就執行刪除的動作。

STEP 2:批次刪除檔案
如果我們的核取方框同時包含了「檔案名稱」,我們也可以用unlink( )這個指令,把檔案刪除,像是這樣:
<?php 
    $check=$_POST['checkbox'];
 foreach($check as $value){
  mysql_query("delete from 資料表名稱 where 欄位名稱 = $value");
  if(file_exists($value.'.jpg')){
                unlink($value.'.jpg');
            }
 }
?>
我先透過file_exists(檔案名稱)這個語法,判斷檔案是不是存在(這裡指的是「機車.jpg」或「高鐵.jpg」),如果存在的話幫我刪除unlink(檔案名稱)
可參考:[PHP]判斷檔案是否存在,並將檔案刪除

透過這樣的方法,就可以達到讀取核取方框和批次刪除的效果了。
參考資料

香腸炒魷魚:[PHP]如何抓取表單中checkbox的值?
Wibibi


0 意見:

張貼留言