回答編集履歴

4

加筆修正

2019/09/04 07:59

投稿

退会済みユーザー
test CHANGED
@@ -70,9 +70,19 @@
70
70
 
71
71
  投稿番号が指定の番号と違ったらファイルに書き出す、のもいいですが、
72
72
 
73
+ 元のデータファイルを残したまま「追記モード」で書き出すと、
74
+
75
+ それだけでデータのダブリを生みますね。
76
+
77
+ 読みだした直後にファイルを削除するのが妥当でしょう。
78
+
79
+ あるいは、
80
+
73
81
  例えば書き出すのを後回しにして、書き出し用配列を用意して、
74
82
 
75
- 書き出す配列をもとに改行コードで連結してから書き出す、という技でもできそうです。
83
+ 書き出す配列をもとに改行コードで連結してから書きで書き出す、
84
+
85
+ という技でもできそうです。
76
86
 
77
87
 
78
88
 
@@ -99,3 +109,11 @@
99
109
  簡易掲示板だからそこまで求めないと考えるのか、
100
110
 
101
111
  簡易掲示板だけどしっかり作り込むかは考え方次第です。
112
+
113
+ Aさんが削除のアクションを、Bさんが投稿のアクションを同じタイミングで起こしたとき、
114
+
115
+ 削除処理でファイルを削除したところで投稿の処理が走ると、
116
+
117
+ データが消えるか、投稿が無視されるか、
118
+
119
+ 毎度実行しても結果がバラバラな動作になりかねません。

3

加筆修正

2019/09/04 07:59

投稿

退会済みユーザー
test CHANGED
@@ -34,13 +34,13 @@
34
34
 
35
35
  でもこのとき$countは行数4に対して1を加えて5にしてしまうと、
36
36
 
37
- 投稿番号がダブることになります。
37
+ 投稿番号5番がダブることになります。
38
38
 
39
39
  なので、投稿データの順序が入れ替わることがないのであれば、
40
40
 
41
41
  必ず最後の行の投稿番号が最大値になるはずなので、
42
42
 
43
- 「最後の今日の投稿番号+1」を使うのも手ですし、
43
+ 「最後のの投稿番号+1」を使うのも手ですし、
44
44
 
45
45
  あるいは、
46
46
 
@@ -73,3 +73,29 @@
73
73
  例えば書き出すのを後回しにして、書き出し用配列を用意して、
74
74
 
75
75
  書き出す配列をもとに改行コードで連結してから書き出す、という技でもできそうです。
76
+
77
+
78
+
79
+ ---
80
+
81
+
82
+
83
+ web上のシステムなので、実際に複数の人が使い始めると、
84
+
85
+ ほぼ同じタイミングで投稿されることも起こりえます。
86
+
87
+ file()やfile_get_contents()やfile_put_contents()などの簡易ファイルアクセス関数は
88
+
89
+ ファイルの排他ロックがかからないため、
90
+
91
+ タイミングによってはデータファイル破損を招きます。
92
+
93
+ ファイルでやりきるならfopen()~fgets()~fputs()~fclose()といっしょに
94
+
95
+ flock()にて排他ロックを行い、
96
+
97
+ ロック中は待ち合わせするような工夫も必要です。
98
+
99
+ 簡易掲示板だからそこまで求めないと考えるのか、
100
+
101
+ 簡易掲示板だけどしっかり作り込むかは考え方次第です。

2

加筆修正

2019/09/04 07:55

投稿

退会済みユーザー
test CHANGED
@@ -7,6 +7,18 @@
7
7
  htmlspecialchars()加工前の文字列で扱い、
8
8
 
9
9
  htmlとして出力する場合に直前にhtmlspecialchars()で臨時に加工するのがセオリーです。
10
+
11
+
12
+
13
+ 但し、今回のデータファイル上で、データの区切りに「<>」を使っているため、
14
+
15
+ もしも投稿POSTデータに「<>」が含まれていたらどうするか、
16
+
17
+ 拒否するのか、
18
+
19
+ 含まれていても差し支えないように置き換えるか、
20
+
21
+ の工夫は絶対必要です。
10
22
 
11
23
 
12
24
 
@@ -32,6 +44,32 @@
32
44
 
33
45
  あるいは、
34
46
 
35
- 別途投稿番号発番用ファイルを用意して、
47
+ 別途投稿番号発番用データファイルを用意して、
36
48
 
37
49
  投稿番号を払い出したら+1して保存するなどすればよいです。
50
+
51
+
52
+
53
+ ---
54
+
55
+
56
+
57
+ やっと削除部分の処理の評価ですが、
58
+
59
+ 変数名がわかりにくすぎます。
60
+
61
+ 変数名を見て、それがなんの目的のものなのかがピンとこないものは
62
+
63
+ 見直すべきです。
64
+
65
+ $valueと$value4って何がどう違うのか、パット見で把握できないでしょ。
66
+
67
+
68
+
69
+ 削除処理foreachループにて、
70
+
71
+ 投稿番号が指定の番号と違ったらファイルに書き出す、のもいいですが、
72
+
73
+ 例えば書き出すのを後回しにして、書き出し用配列を用意して、
74
+
75
+ 書き出す配列をもとに改行コードで連結してから書き出す、という技でもできそうです。

1

加筆修正

2019/09/04 07:48

投稿

退会済みユーザー
test CHANGED
@@ -7,3 +7,31 @@
7
7
  htmlspecialchars()加工前の文字列で扱い、
8
8
 
9
9
  htmlとして出力する場合に直前にhtmlspecialchars()で臨時に加工するのがセオリーです。
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ 投稿番号を管理する上で、`$count`を使用していますが、
18
+
19
+ 例えば5番まで使っている時に3番を削除したら、
20
+
21
+ 本来1,2,4,5の行がある状態になりますよね。
22
+
23
+ でもこのとき$countは行数4に対して1を加えて5にしてしまうと、
24
+
25
+ 投稿番号がダブることになります。
26
+
27
+ なので、投稿データの順序が入れ替わることがないのであれば、
28
+
29
+ 必ず最後の行の投稿番号が最大値になるはずなので、
30
+
31
+ 「最後の今日の投稿番号+1」を使うのも手ですし、
32
+
33
+ あるいは、
34
+
35
+ 別途投稿番号発番用ファイルを用意して、
36
+
37
+ 投稿番号を払い出したら+1して保存するなどすればよいです。