teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

加筆修正

2020/01/14 10:16

投稿

退会済みユーザー
answer CHANGED
@@ -24,4 +24,118 @@
24
24
  </table>
25
25
 
26
26
  ```
27
- とすることで回避できます。(行単位でフォーム生成)
27
+ とすることで回避できます。(行単位でフォーム生成)
28
+
29
+ ---
30
+
31
+ ちなみに、勝手にアレンジしたんだが、
32
+ チェックボックスを使って一度に複数個削除できるようにしたバージョン:
33
+ ```php
34
+ <?php
35
+
36
+ //保存ファイル名(PHPではファイル名は変数に保存する)
37
+ //define('SAVE_NAME', 'memo.txt');
38
+ $FILE = '235077_todo.txt';
39
+
40
+ //ユニークなIDを生成(数字とアルファベット13文字)
41
+ $id = uniqid('UNIQ_');
42
+
43
+ //タイムゾーン設定
44
+ date_default_timezone_set('Japan');
45
+ //日時(年/月/日/ 時:分)
46
+ $date = date('Y/m/d H:i');
47
+
48
+ //テキスト
49
+ $text = '';
50
+
51
+ //一回分の投稿の情報
52
+ $DATA = [];
53
+
54
+ //全ての投稿
55
+ $BOARD= [];
56
+
57
+ if (file_exists($FILE)) {
58
+ //配列状態のファイルを読み込む
59
+ $BOARD = json_decode(file_get_contents($FILE));
60
+ }
61
+
62
+ if ($_SERVER['REQUEST_METHOD'] === 'POST'){
63
+ //投稿ボタンが押された場合
64
+ if (!empty($_POST['txt'])) {
65
+
66
+ //$textにリクエストパラメーターを代入
67
+ $text = $_POST['txt'];
68
+ //新規データ
69
+ $DATA = [$id, $date, $text];
70
+ //新規データを全体配列に代入
71
+ $BOARD[] = $DATA;
72
+ //全体配列をファイルに保存
73
+ file_put_contents($FILE, json_encode($BOARD));
74
+
75
+ //削除ボタンが押された場合
76
+ } elseif (isset($_POST['del'])) {
77
+
78
+ $NewBOARD = [];
79
+
80
+ foreach((array)$BOARD as $DATA){
81
+ $flag = FALSE;
82
+ foreach ($_POST['del'] as $del) {
83
+ if ($DATA[0] === $del) {
84
+ $flag = TRUE;
85
+ break;
86
+ }
87
+ }
88
+ if ($flag === FALSE) {
89
+ $NewBOARD[] = $DATA;
90
+ }
91
+ }
92
+ file_put_contents($FILE, json_encode($NewBOARD));
93
+ }
94
+
95
+ //指定したページにリダイレクト
96
+ header('Location: '.$_SERVER['SCRIPT_NAME']);
97
+ exit;
98
+ }
99
+ ?>
100
+ <!DOCTYPE html>
101
+ <html lang="ja">
102
+ <head>
103
+ <title>ToDoアプリ</title>
104
+ <link href="css/todo.css" rel="stylesheet">
105
+ </head>
106
+ <body>
107
+
108
+ <h1>ToDoリスト</h1>
109
+
110
+ <form method="POST">
111
+ <input type="text" name="txt">
112
+ <input type="submit" value="投稿">
113
+ </form>
114
+
115
+ <form method="POST">
116
+ <table>
117
+ <?php foreach((array)$BOARD as $DATA): ?>
118
+ <tr>
119
+ <td class="c1">
120
+ <input type="checkbox" name="del[]" value="<?php echo $DATA[0]; ?>" />
121
+ </td>
122
+ <td class="c2">
123
+ <?php echo $DATA[2]; ?>
124
+ </td>
125
+ <td class="c3">
126
+ <?php echo $DATA[1]; ?>
127
+ </td>
128
+ </tr>
129
+ <?php endforeach; ?>
130
+ <tr>
131
+ <td class="c3" colspan="3">
132
+ <input type="submit" value="削除">
133
+ </td>
134
+ </tr>
135
+ </table>
136
+ </form>
137
+
138
+ </body>
139
+ </html>
140
+ ```
141
+ (データファイル名は他の質問をかぶらないように変更してあるけども。)