回答編集履歴

5

加筆修正

2018/08/24 09:18

投稿

退会済みユーザー
test CHANGED
@@ -67,3 +67,19 @@
67
67
  phpに限らず、使用する変数は必ず初期化すること。鉄則。
68
68
 
69
69
  phpに限らず、変数名を安易につけないこと。鉄則。
70
+
71
+
72
+
73
+ 何度かコード内でデータファイル名が出現しているのだけど、
74
+
75
+ これも
76
+
77
+ `define("DATA_FILENAME", "sample4.txt");`
78
+
79
+ などとして以後DATA_FILENAMEを使えば転記ミス記述ミスは防げる。
80
+
81
+
82
+
83
+ 正解に近いものを机上デバッグレベルで示してもいいのだけど、
84
+
85
+ それじゃ学習にならないよね?

4

加筆修正

2018/08/24 09:18

投稿

退会済みユーザー
test CHANGED
@@ -48,7 +48,11 @@
48
48
 
49
49
  これ、`$_POST["delete"]`がある場合のみ$aを初期化しているのだけど、
50
50
 
51
- そうじゃないときに続くコードでいきなり$aを参照するので、
51
+ そうじゃないときに続くコード
52
+
53
+ `for($i = 1; $i <count($a); ++$i){`
54
+
55
+ でいきなり$aを参照するので、呼ばれ方によっては
52
56
 
53
57
  Notice: Undefined variable: a
54
58
 

3

加筆修正

2018/08/24 08:38

投稿

退会済みユーザー
test CHANGED
@@ -33,3 +33,33 @@
33
33
  `$del = filter_input(INPUT_POST, 'delete');`などとして、
34
34
 
35
35
  以後`$del`との比較ですみます。
36
+
37
+
38
+
39
+ ```php
40
+
41
+ if( isset($_POST["delete"]) ) {
42
+
43
+ $a = file("sample4.txt");
44
+
45
+ }
46
+
47
+ ```
48
+
49
+ これ、`$_POST["delete"]`がある場合のみ$aを初期化しているのだけど、
50
+
51
+ そうじゃないときに続くコードでいきなり$aを参照するので、
52
+
53
+ Notice: Undefined variable: a
54
+
55
+ なんてのが出そう。
56
+
57
+ それに、変数名$aとか変数名の重要さをなめてますね。
58
+
59
+ ループ用の変数はindexの意味から`$i`なんて使ったりしますが、
60
+
61
+ `$a`だけだと、あとあとこの変数に一体どういうデータが入っているのだろうってわからなくなります。
62
+
63
+ phpに限らず、使用する変数は必ず初期化すること。鉄則。
64
+
65
+ phpに限らず、変数名を安易につけないこと。鉄則。

2

加筆修正

2018/08/24 08:34

投稿

退会済みユーザー
test CHANGED
@@ -7,3 +7,29 @@
7
7
  この内側のfwrite()などの処理が常に行われる感じ。
8
8
 
9
9
  結果、ファイルが壊れる。
10
+
11
+
12
+
13
+ 指定の番号の行データを削除して同じファイルに出力し直すってだけ、
14
+
15
+ といえば簡単ですが、
16
+
17
+ 1)ファイルから読み取って一旦配列に行単位のデータとして格納する。
18
+
19
+ 2)行単位のデータを一つずつ紐解いて
20
+
21
+ 3)指定番号と一致するなら配列から該当要素を省く。
22
+
23
+ 4)一連の行データを精査したら、ファイルに出力する。
24
+
25
+ みたいな流れになりますが、
26
+
27
+ 全くそういう流れになってない。
28
+
29
+
30
+
31
+ `$_POST[]`を直に参照するのはやめましょう、
32
+
33
+ `$del = filter_input(INPUT_POST, 'delete');`などとして、
34
+
35
+ 以後`$del`との比較ですみます。

1

加筆修正

2018/08/24 08:28

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,9 @@
1
1
  `explode("<>",$i); `でどういう結果がほしいのかな、$iってただのループカウント用変数なんだけど。
2
+
3
+
4
+
5
+ `if($_POST["delete"] = $i){` の箇所が比較でなく代入になっていて常に成立するので、
6
+
7
+ この内側のfwrite()などの処理が常に行われる感じ。
8
+
9
+ 結果、ファイルが壊れる。