2011 本站教學範例已全面更新~ 新教學請看 http://www.flycan.com/article/   【到新的教學討論區】
【飛肯設計學苑】- 回首頁 -
回首頁最新開課訊息企業包班教育訓練範例教學區問題討論區交流分享區程式下載區
Photoshop影像達人專修班 Photoshop 遮色片 & 色版創作進階班 CSS 版面設計專修班 ActionScript 3.0 程式設計入門班 ActionScript & XML 進階整合應用班 Dreamweaver & CSS網頁版型設計班

 

本站已全面更新~ 2011年 新教學範例請看 → http://www.flycan.com/article/

 

【DW PHP 資料庫教學】範例區
【教學】PHP一次刪除複數檔案

發表新主題   回覆主題
【飛肯】教學網站 首頁 » 【DW PHP 資料庫教學】範例區
上一篇主題 :: 下一篇主題  
發表人 內容
YOGO
【班長】
【班長】


註冊時間: 2005-12-09
文章: 103

發表【教學】PHP一次刪除複數檔案 引言回覆

發表於: 2005-12-28 22:22 
  很多朋友都在問,要如何一次刪除複數檔案,小弟看一直無人寫教學,所以野人獻曝一下,於是寫了一篇PHP刪除複數檔案的教學,與各位大大分享討論,廢話不多說,馬上進入主題;我這個範例資料庫名稱為"delfile",資料表名稱為"file_id",欄位1名稱為"del_id"(主鍵、自動編號), 欄位2名稱為"del_photo"(用以記錄檔案名稱及副檔名),而圖片檔案放在"photo"這個資料夾底下。

步驟1:新增一個資料集,查詢" file_id" 資料表中的檔案資料。

步驟2:新增一個核取方塊欄位,名稱為"del_id[]",核取值為資料庫的"del_id"欄位 (主鍵)。

註:因為刪除複數檔案需用到陣列,而"[]"在PHP中代表的意思就是陣列,所以名稱為"del_id[]"。

步驟3:設定表單接收的頁面,範例是"ok_del.php"。

步驟4:在"ok_del.php"頁面新增一個資料集,篩選條件為"del_id"欄位等於表單變數,再來按進階。

步驟5:找到"$_POST['del_id']"。

步驟6:把原本的"$_POST['del_id']"換成"$photo_id"。

註:"$_POST['del_id']"是PHP接收表單變數的方法,不過因為我們等下要用一個PHP專屬處理陣列的迴圈,所以要把"$_POST['del_id']"換成"$photo_id",原因我稍後會說明。

步驟7:找到下面這一段程式。

★:

<?php

$colname_recphoto = "1";

if (isset($photo_id)) {

$colname_recphoto = (get_magic_quotes_gpc()) ? $photo_id : addslashes($photo_id);

}

mysql_select_db($database_recdelfile, $recdelfile);

$query_recphoto = sprintf("SELECT * FROM file_id WHERE del_id = %s", $colname_recphoto);

$recphoto = mysql_query($query_recphoto, $recdelfile) or die(mysql_error());

$row_recphoto = mysql_fetch_assoc($recphoto);

$totalRows_recphoto = mysql_num_rows($recphoto);

?>

步驟8:在"$colname_recphoto = "1";"上方新增下面一段程式。

foreach($_POST['del_id'] as $photo_id) { 接著在 "?>" 上方新增一個 "}" 符號,使程式變成如下列所示。

★:

<?php

foreach($_POST['del_id'] as $photo_id) {

$colname_recphoto = "1";

if (isset($photo_id)) {

$colname_recphoto = (get_magic_quotes_gpc()) ? $photo_id : addslashes($photo_id);

}

mysql_select_db($database_recdelfile, $recdelfile);

$query_recphoto = sprintf("SELECT * FROM file_id WHERE del_id = %s", $colname_recphoto);

$recphoto = mysql_query($query_recphoto, $recdelfile) or die(mysql_error());

$row_recphoto = mysql_fetch_assoc($recphoto);

$totalRows_recphoto = mysql_num_rows($recphoto);

?>

我解釋一下新增這二行程式碼的意思好了。"foreach()" 是專屬PHP特有的迴圈,專門用於處理陣列,它的用法就是"foreach(陣列名稱 指派給 變數名稱 )",範例如下:

foreach($_POST['del_id'] as $photo_id) ,這一段程式碼的意思就是把"$_POST['del_id']"這個陣列的值指派給"$photo_id"這個變數,而這也就是為什麼在步驟6的時候,要把原本的"$_POST['del_id']"換成"$photo_id"的原因,因為"$_POST['del_id']"的指已經指派給"$photo_id"所以要用"$photo_id"當篩選條件,而不是"$_POST['del_id']",那為什麼要用"foreach()"迴圈,而不用其他的迴圈呢?其實要用其他的迴圈一樣可以,只是就如我先前所言,"foreach()" 是專屬PHP特有的迴圈,專門用於處理陣列,那我們用它來處理陣列是最好不過的,它會自動讀取下一筆資料,直到陣列內沒有資料為止,而在 "?>" 上方新增一個 "}" 符號的意思,代表迴圈內的程式到此結束,不過要注意一點,"foreach()"迴圈是從php4後才有的函式,不過應該沒有人在用php4之前的版本了吧!

步驟9:新增二行程式於"$totalRows_recphoto = mysql_num_rows($recphoto);"下方。

★:

$photo = $row_recphoto['del_photo'];

unlink("photo/$photo");

我解釋一下新增這二行程式碼的意思好了。

新增一個"$photo"變數,而它的值為資料集中的"del_photo"欄位,也就是說把圖片檔案名稱與副檔名指派給"$photo"這個變數。

而"unlink()"這個函式是用於刪除檔案用的,其語法為"unlink("要刪除的檔案存放路徑與要刪除的檔案名稱");",範例如下:

★:

unlink("photo/$photo");

因為我們圖片檔案放在"photo"資料夾底下,而"$photo"的值等於圖片檔案名稱與副檔名,所以"unlink("photo/$photo");"的意思即為刪除

"photo"資料夾底下指定的圖片檔案。

步驟10:複製下列程式碼,貼於 unlink("photo/$photo"); 後方。

★:

mysql_select_db($database_recdelfile, $recdelfile);

$query_recphoto = sprintf("SELECT * FROM file_id WHERE del_id = %s", $colname_recphoto);

$recphoto = mysql_query($query_recphoto, $recdelfile) or die(mysql_error());

$row_recphoto = mysql_fetch_assoc($recphoto);

$totalRows_recphoto = mysql_num_rows($recphoto);

接著把程式改成

★:

mysql_select_db($database_recdelfile, $recdelfile);

$query_recphoto2 = sprintf("DELETE FROM file_id WHERE del_id = %s", $colname_recphoto);

$recphoto2 = mysql_query($query_recphoto2, $recdelfile) or die(mysql_error());

$row_recphoto2 = mysql_fetch_assoc($recphoto2);

$totalRows_recphoto2 = mysql_num_rows($recphoto2);

我解釋一下所新增程式碼的意思好了。

這段程式碼的重點在於 "$query_recphoto2 = sprintf("DELETE FROM file_id WHERE del_id = %s", $colname_recphoto);" 這一段。

這一段是SQL敘述句,是用以刪除資料庫中的記錄,我們在之前已經把圖片檔案刪除了,再來就是要把資料庫中的記錄也刪除,這樣的話整個刪除作業才算完成,而這一段的意思是說,去刪除" file_id"這個資料表中,"del_id"欄位內容的值等於變數"$colname_recphoto"的值,而變數

"$colname_recphoto"的值又是什麼呢?我們往上看找到"$colname_recphoto = (get_magic_quotes_gpc()) ? $photo_id : addslashes($photo_id)";這一段,它的意思就是說把變數"$colname_recphoto"的值等於變數"$photo_id"的值,也就是說把變數"$photo_id"的值指派給變數"$colname_recphoto",而變數"$photo_id"的值就是等於前面"$_POST[del_id']"(表單變數)的值,也就是" file_id"這個資料表中的主鍵,這樣了解嗎?好了,這下圖片檔案與資料表中的記錄都刪除了,這樣就大功告成了,接下來我們就測試一下程式是否可正常執行。

步驟11:我們的資料庫與photo資料夾中各有10筆資料及10張圖片檔案,我們勾選最後三張作為刪除測試。

步驟12:果然,看見"檔案刪除成功!!"的字樣,嗯!我們回index.php看看檔案是不是真的刪除了。

步驟13:果然,原本的10張圖片檔案,現在只剩7張,圖片檔案刪除作業成功,那資料庫的記錄有一併刪除嗎?我們去確認一下。

步驟14:這是未執行刪除作業時"file_id"資料表的畫面(也就是說未執行步驟11時,資料表中的記錄),果然有10筆記錄。

步驟15:這是執行刪除作業後"file_id"資料表的畫面(也就是說執行步驟11後,資料表中的記錄),果然只剩7筆記錄,刪除記錄作業成功。

就先教到這裡,若有問題大家再提出來討論



輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題     1頁(共1頁)
【飛肯】教學網站 首頁 » 【DW PHP 資料庫教學】範例區

 
所有的時間均為 台北時間 (GMT + 8 小時)
前往:  

回首頁】【最新開課訊息】【企業委訓】【範例教學分享區】【問題討論區