PHP 簡易掲示板作成 表示編 #2の続き
データの保存内容
1<>yuya<>完成<>2021/2/8 10:13:16
2<>yuya<>完成<>2021/2/8 10:13:22
3<>yuya<>完成<>2021/2/8 10:13:25
#目標
削除機能を実装する
1. 削除対象番号を送信
2. 削除対象番号を受信
3. 受信した削除対象番号を変数に代入
4. ファイルを開く
5. ファイルの中身を1行1要素として配列変数に代入する
6. ファイルの行数の数だけ繰り返し処理を行う
7. 処理の内容:区切り文字「<>」で分割
8. 処理の内容:投稿番号の取得
9. 処理の内容:投稿番号と削除対象番号が一致していない場合、書き込む
10. ファイルを閉じる
#削除機能を実装する
1. 削除対象番号を送信
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>簡易掲示板</title>
</head>
<body>
<form action="" method="post">
<input type="number" name = "delete" placeholder="削除対象番号">
<input type="submit" name="submit" value = "削除">
</form>
</body>
</html>
2. 削除対象番号を受信
3. 受信した削除対象番号を変数に代入
$delete = $_POST["delete"];
4. ファイルを開く
削除対象ではない投稿だけを上書きすることで削除を実現したいから、
オープンモードは"w"
$fp = fopen( $filename, "w");
5. ファイルの中身を1行1要素として配列変数に代入する
$lines = file($filename,FILE_IGNORE_NEW_LINES);
6. ファイルの行数の数だけ繰り返し処理を行う
・始めの値: $i
を$lines
のインデックス番号として扱う
インデックス番号[0]から順番に取得したので0→$i = 0
・条件式 :インデックス番号 < 要素の数
count関数を使って配列の要素の数を出す→$i < count($lines)
・増減式 :処理一回ごとに、値を1ずつ増やす→$i = $i + 1
→→$i++
for ($i = 0; $i < count($lines); $i++){
//処理の内容
}
7. 処理の内容:区切り文字「<>」で分割
$line = explode("<>", $lines[$i]);
$line = explode("<>", $lines[0]);
print_r($line);
Array ( [0] => 1 [1] => yuya [2] => 完成 [3] => 2021/2/8 10:13:16 )
8. 処理の内容:投稿番号の取得
$postnum = $line[0];
9. 処理の内容:投稿番号と削除対象番号が一致しない場合、書き込む
if ($postnum != $delete){
fwrite($fp, $lines[$i].PHP_EOL);
}
10. ファイルを閉じる
fclose($fp);
#まとめ
<?php
// 削除対象番号を受信受信した削除対象番号を変数に代入
$delete = $_POST["delete"];
// ファイルを開く
$fp = fopen( $filename, "w");
// ファイルの中身を1行1要素として配列変数に代入する
$lines = file($filename,FILE_IGNORE_NEW_LINES);
// ファイルの行数の数だけ繰り返し処理を行う
for ($i = 0; $i < count($lines); $i++){
// 区切り文字「<>」で分割
$line = explode("<>", $lines[$i]);
// 投稿番号の取得
$postnum = $line[0];
// 投稿番号と削除対象番号が一致しない場合、書き込む
if ($postnum != $delete){
fwrite($fp, $lines[$i].PHP_EOL);
}
}
// ファイルを閉じる
fclose($fp);
?>