1
2

More than 3 years have passed since last update.

PHP 簡易掲示板作成 削除機能実装編 #3

Posted at

PHP 簡易掲示板作成 表示編 #2の続き
データの保存内容

test.txt
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. 削除対象番号を送信

HTML
<!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. 受信した削除対象番号を変数に代入

PHP
$delete = $_POST["delete"];

4. ファイルを開く
削除対象ではない投稿だけを上書きすることで削除を実現したいから、
オープンモードは"w"

PHP
$fp = fopen( $filename, "w");

5. ファイルの中身を1行1要素として配列変数に代入する

PHP
$lines = file($filename,FILE_IGNORE_NEW_LINES);

6. ファイルの行数の数だけ繰り返し処理を行う
・始めの値: $i$linesのインデックス番号として扱う
      インデックス番号[0]から順番に取得したので0→$i = 0
・条件式 :インデックス番号 < 要素の数
count関数を使って配列の要素の数を出す→$i < count($lines)
・増減式 :処理一回ごとに、値を1ずつ増やす→$i = $i + 1→→$i++

PHP
for ($i = 0; $i < count($lines); $i++){
    //処理の内容
}

7. 処理の内容:区切り文字「<>」で分割

PHP
$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. 処理の内容:投稿番号の取得

PHP
$postnum = $line[0];

9. 処理の内容:投稿番号と削除対象番号が一致しない場合、書き込む

PHP
if ($postnum != $delete){
    fwrite($fp, $lines[$i].PHP_EOL);
}

10. ファイルを閉じる

PHP
fclose($fp);

まとめ

PHP
<?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);
?>
1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2