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

回答編集履歴

5

加筆修正

2018/08/24 09:18

投稿

退会済みユーザー
answer CHANGED
@@ -32,4 +32,12 @@
32
32
  ループ用の変数はindexの意味から`$i`なんて使ったりしますが、
33
33
  `$a`だけだと、あとあとこの変数に一体どういうデータが入っているのだろうってわからなくなります。
34
34
  phpに限らず、使用する変数は必ず初期化すること。鉄則。
35
- phpに限らず、変数名を安易につけないこと。鉄則。
35
+ phpに限らず、変数名を安易につけないこと。鉄則。
36
+
37
+ 何度かコード内でデータファイル名が出現しているのだけど、
38
+ これも
39
+ `define("DATA_FILENAME", "sample4.txt");`
40
+ などとして以後DATA_FILENAMEを使えば転記ミス記述ミスは防げる。
41
+
42
+ 正解に近いものを机上デバッグレベルで示してもいいのだけど、
43
+ それじゃ学習にならないよね?

4

加筆修正

2018/08/24 09:18

投稿

退会済みユーザー
answer CHANGED
@@ -23,7 +23,9 @@
23
23
  }
24
24
  ```
25
25
  これ、`$_POST["delete"]`がある場合のみ$aを初期化しているのだけど、
26
- そうじゃないときに続くコードでいきなり$aを参照するので、
26
+ そうじゃないときに続くコード
27
+ `for($i = 1; $i <count($a); ++$i){`
28
+ でいきなり$aを参照するので、呼ばれ方によっては
27
29
  Notice: Undefined variable: a
28
30
  なんてのが出そう。
29
31
  それに、変数名$aとか変数名の重要さをなめてますね。

3

加筆修正

2018/08/24 08:38

投稿

退会済みユーザー
answer CHANGED
@@ -15,4 +15,19 @@
15
15
 
16
16
  `$_POST[]`を直に参照するのはやめましょう、
17
17
  `$del = filter_input(INPUT_POST, 'delete');`などとして、
18
- 以後`$del`との比較ですみます。
18
+ 以後`$del`との比較ですみます。
19
+
20
+ ```php
21
+ if( isset($_POST["delete"]) ) {
22
+ $a = file("sample4.txt");
23
+ }
24
+ ```
25
+ これ、`$_POST["delete"]`がある場合のみ$aを初期化しているのだけど、
26
+ そうじゃないときに続くコードでいきなり$aを参照するので、
27
+ Notice: Undefined variable: a
28
+ なんてのが出そう。
29
+ それに、変数名$aとか変数名の重要さをなめてますね。
30
+ ループ用の変数はindexの意味から`$i`なんて使ったりしますが、
31
+ `$a`だけだと、あとあとこの変数に一体どういうデータが入っているのだろうってわからなくなります。
32
+ phpに限らず、使用する変数は必ず初期化すること。鉄則。
33
+ phpに限らず、変数名を安易につけないこと。鉄則。

2

加筆修正

2018/08/24 08:34

投稿

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

1

加筆修正

2018/08/24 08:28

投稿

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