DIY一個PHP留言板之資料存取(四)

呼呼~
接下來是製作刪除檔案的處理,其實這方面只是把之前讀取留言的功能改良而已。
除了改成只「讀主題」和「加入刪除函式」之外,就沒有其他的處理。

首先,在目錄下建立一個 remove.php 的檔案,並且撰寫程式碼(如下)

<?php

function removeComment(array $paths){ //建立移除函式
	foreach($paths as $path){ //將路徑陣列一個一個讀取
		if(!is_file($path)) continue; //如果不是檔案則切到下一個繼續
		unlink($path); //刪除檔案
		++$i;
	}
	return $i;
}

function getSubject($file){ //建立 getSubject 函式
	$data = file_get_contents($file); //讀取檔案內容
	$data = explode(PHP_EOL, $data); //以斷行分割檔案內容( PHP_EOL 會依照作業系統切換 \n 或 \r\n )

	foreach($data as $key => $line){ //將內容陣列放入 foreach 運作
		if($line == ';subject'){ //檢查是否為註解
			$logSubject = (bool) true; //啟動紀錄主旨
			continue; //直接結束本次迴圈
		}

		if(!$logSubject) continue; //如果非主旨則跳過,並且繼續尋找

		$subject = $line; //紀錄主旨
		break; //離開迴圈

	}

	return $subject; //傳回取得之主旨
}

if($_POST['submit']){ //檢查是否有送出表單
	$dels = removeComment($_POST['del']); //傳入移除陣列
	echo "
成功移除{$dels}筆留言
";//產生表單(送出) } $glob = glob('./data/*.txt'); //搜尋資料檔案 sort($glob, SORT_NUMERIC); //排序檔案( 由大到小 ) $_GET['page'] = !$_GET['page'] ? 1 : $_GET['page']; //檢查是否有指定頁碼 $start = ($_GET['page'] - 1) * 15; //設定迴圈開始編號 $end = $_GET['page'] * 15; //設定回圈結束編號 echo '
'; //產生表單 for($i = $start; $i < $end; ++$i){ //從開始編號運作到結束編號。 if(empty($glob[$i])) break; //檢查是否有此筆資料,無則跳出 $subject = getSubject($glob[$i]); //呼叫 getSubject 函式取得主旨 /* 開始產生畫面 */ echo "
主題: {$subject} -
"; } echo '
';//產生表單(送出) echo '
';//產生表單 ?>

上方的 HTML 部份可能會有問題,請各位在使用時稍微注意。

原理大致解說:

顯示部份和 comment.php 無異,只是將讀取部份改為「只讀取標題」
並且為了防止意外,只在「確認為標題時」才會做儲存。

而另外就是加入了「刪除函式」
構造很簡單,將傳入的陣列依序使用 unlink 刪除檔案函式刪除。

而 name="del[]" 為表單的陣列用法,在 PHP 收到為 $_POST['del'] 的陣列(method="post" 狀況)
每個 checkbox 儲存的 value 都是該筆留言路徑,因此刪除時只需將取得的路徑陣列傳入。

到了這部份,其實已經準備好製作留言板的技術。
明天,即將開始的就是「正式製作」

不過到了這個部份,其實整個架構是很混亂的。
因此明天要先做「重新規劃、整理」的處理,以免成品過度混亂。

2 thoughts on “DIY一個PHP留言板之資料存取(四)