回答編集履歴
4
加筆修正
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
加筆修正
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
|
-
「最後の
|
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
加筆修正
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
加筆修正
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して保存するなどすればよいです。
|