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

質問編集履歴

2

文法の修正

2021/06/29 14:43

投稿

kiyuu
kiyuu

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- 掲示板のパスワード機能をつけて、パスワードが合っている際に「編集」「削除」を行えるようにする。
1
+ 掲示板のパスワード機能
body CHANGED
@@ -1,227 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 掲示板のパスワード機能をつけて、パスワードが合っている際に「編集」「削除」を行えるようにする。
4
- なお、データベースの内容はこれから学習するため、テキストファイルを用いた実装になっています。
5
3
 
6
4
  ### 発生している問題・エラーメッセージ
7
5
 
8
- パスワードの設定まではできたのですが、以下の動作になってしまいます。
9
- ・削除のパスワード欄に入力する全ての文字で削除できてしまう。
10
- ・テキストファイルに複数行あった際に削除すると全て削除されてしまう。
11
- ・編集機能も削除機能と同じで全ての文字で編集できるようですが、編集ボタンを押しても内容が編集されず、何も変化がない状態。
12
6
 
7
+
13
8
  ### 該当のソースコード
14
9
 
15
10
  ```php
16
11
  <!DOCTYPE html>
17
- <html lang="ja">
12
+ <html lang="ja">
18
- <head>
19
- <meta charset="UTF-8">
20
- <title>mission_3-5</title>
21
- <style>
22
- form {
23
- margin-bottom: 20px;
24
- }
25
- </style>
26
- </head>
27
- <body>
28
-
29
- <?php
30
-
31
- $filename = "mission_3-05.txt";
32
-
33
- //投稿機能
34
-
35
- //フォーム内が空でない場合に以下を実行する
36
- if (!empty($_POST['name']) && (!empty($_POST['comment'])) && (empty($_POST['editnumber'])) && (!empty($_POST['npass']))){
37
-
38
- //入力データの受け取りを変数に代入
39
- $name = $_POST['name'];
40
- $comment = $_POST['comment'];
41
- $editnumber= $_POST['editnumber'];
42
- $npass = $_POST['npass'];
43
-
44
- //日付データを取得して変数に代入
45
- $date = date("Y年m月d日 H:i:s");
46
-
47
- //ファイルの存在がある場合は投稿番号+1、なかったら1を指定する
48
- if (file_exists($filename)) {
49
-
50
- $num = count(file($filename))+1;
51
-
52
- } else {
53
-
54
- $num = 1;
55
-
56
- }
57
-
58
- //書き込む文字列を組み合わせた変数
59
- $newdata = $num . "<>" . $name . "<>" . $comment . "<>" . $date . "<>" . $npass;
60
-
61
- //ファイルを追記保存モードでオープンする
62
- $fp = fopen($filename,"a");
63
-
64
- //入力データのファイル書き込み
65
- fwrite($fp,$newdata . PHP_EOL);
66
- fclose($fp);
67
-
68
- }
69
-
70
- //削除機能
71
-
72
- //削除フォームの送信の有無で処理を分岐
73
- if (!empty($_POST['deletenumber']) && !empty($_POST['dpass'])) {
74
-
75
- //入力データの受け取りを変数に代入
76
- $delete = $_POST['deletenumber'];
77
- $dpass = $_POST['dpass'];
78
-
79
- //読み込んだファイルの中身を配列に格納する
80
- $deletea = file($filename);
81
-
82
- //ファイルを書き込みモードでオープン+中身を空に
83
- $fp = fopen($filename,"w");
84
-
85
- //配列の数だけループさせる
86
- foreach ($deletea as $line) {
87
-
88
- //explode関数でそれぞれの値を取得
89
- $deldata = explode("<>",$line);
90
-
91
- //削除番号と行番号が一致しなければ書き込み
92
- if (($delete !== $deldata[0]) && ($dpass == $daldata[4])) {
93
-
94
- //入力データのファイル書き込み
95
- fwrite($fp,$line);
96
-
97
- }
98
- }
99
-
100
- fclose($fp);
101
-
102
- }
103
-
104
- //編集選択機能
105
-
106
- //編集フォームの送信の有無で処理を分岐
107
- if (!empty($_POST['edit']) && !empty($_POST['epass'])) {
108
-
109
- //入力データの受け取りを変数に代入
110
- $edit = $_POST['edit'];
111
- $epass = $_POST['epass'];
112
-
113
- //読み込んだファイルの中身を配列に格納する
114
- $edita = file($filename);
115
-
116
- //配列の数だけループさせる
117
- foreach ($edita as $line) {
118
-
119
- //explode関数でそれぞれの値を取得
120
- $editdata = explode("<>",$line);
121
-
122
- //投稿番号と編集対象番号が一致したらその投稿の「名前」と「コメント」を取得
123
- if ($edit == $editdata[0]) {
124
-
125
- //投稿のそれぞれの値を取得し変数に代入
126
- $editnumber = $editdata[0];
127
- $editname = $editdata[1];
128
- $editcomment = $editdata[2];
129
- $epass = $editdata[4];
130
-
131
- //既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる
132
- //formのvalue属性で対応
133
- }
134
- }
135
- }
136
-
137
- //編集実行機能
138
-
139
- //編集か新規投稿か判断
140
- if ((!empty($_POST['name'])) && (!empty($_POST['comment'])) && (!empty($_POST['editnumber'])) && !empty($_POST['epass'])) {
141
-
142
- //入力データの受け取りを変数に代入
143
- $name = $_POST['name'];
144
- $comment = $_POST['comment'];
145
- $editnumber= $_POST['editnumber'];
146
- $date = date("Y年m月d日 H:i:s");
147
- $epass = $_POST['epass'];
148
-
149
- //読み込んだファイルの中身を配列に格納する
150
- $ret_array = file($filename);
151
-
152
- //ファイルを書き込みモードでオープン+中身を空に
153
- $fp = fopen($filename,"w");
154
-
155
- //配列の数だけループさせる
156
- foreach ($ret_array as $line) {
157
-
158
- //explode関数でそれぞれの値を取得
159
- $data = explode("<>",$line);
160
-
161
- //投稿番号と編集番号が一致したら
162
- if (($data[0] == $editnumber) && ($epass == $data[4])) {
163
-
164
- //編集のフォームから送信された値と差し替えて上書き
165
- fwrite($fp,$editnumber . "<>" . $name . "<>" . $comment . "<>" . $date . "<>" . $epass . PHP_EOL);
166
-
167
- } else {
168
-
169
- //一致しなかったところはそのまま書き込む
170
- fwrite($fp,$line);
171
- }
172
- }
173
- fclose($fp);
174
- }
175
-
176
- ?>
177
-
178
- <form action="" method="post">
179
- <input type="text" name="name" placeholder="名前" value="<?php if(isset($editname)) {echo $editname;} ?>"><br>
180
- <input type="text" name="comment" placeholder="コメント" value="<?php if(isset($editcomment)) {echo $editcomment;} ?>"><br>
181
- <input type="number" name="editnumber" placeholder="編集番号" value="<?php if(isset($editnumber)) {echo $editnumber;} ?>"><br>
182
- <input type="text" name="npass" placeholder="パスワード" value="<?php if(isset($epass)) {echo $epass;} ?>"><br>
183
- <input type="submit" name="submit" value="送信">
184
- </form>
185
-
186
- <form action="" method="post">
187
- <input type="number" name="deletenumber" placeholder="削除対象番号"><br>
188
- <input type="text" name="dpass" placeholder="パスワード">
189
- <input type="submit" name="delete" value="削除">
190
- </form>
191
-
192
- <form action="" method="post">
193
- <input type="number" name="edit" placeholder="編集対象番号"><br>
194
- <input type="text" name="epass" placeholder="パスワード">
195
- <input type="submit" value="編集">
196
- </form>
197
-
198
- <?php
199
- $filename = "mission_3-05.txt";
200
- //表示機能
201
- //ファイルの存在がある場合だけ行う
202
- if (file_exists($filename)) {
203
-
204
- //読み込んだファイルの中身を配列に格納する
205
- $array = file($filename);
206
-
207
- //取得したファイルデータを全て表示する(ループ処理)
208
- foreach ($array as $a) {
209
-
210
- //explode関数でそれぞれの値を取得
211
- $getdata = explode("<>",$a);
212
-
213
- //取得した値を表示する
214
- echo $getdata[0] . " " . $getdata[1] . " " . $getdata[2] . " " . $getdata[3] . " " . $getdata[4] . "<br>";
215
- }
216
- }
217
- ?>
218
- </body>
219
- </html>
220
- ```
221
-
222
- ### 試したこと
223
-
224
- ifの条件を変更したりしてみましたが、上手くいきません。
225
-
226
- ### 補足情報(FW/ツールのバージョンなど)
227
- 数日間考えましたが、改善できないためコードを含め教えていただけると嬉しいです。

1

タグの変更

2021/06/29 14:43

投稿

kiyuu
kiyuu

スコア0

title CHANGED
File without changes
body CHANGED
File without changes