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

回答編集履歴

1

見直し

2019/12/24 11:28

投稿

退会済みユーザー
answer CHANGED
@@ -13,4 +13,112 @@
13
13
  ---
14
14
 
15
15
  2件、新規投稿を試したんだけど、特にエラーが発生しないんだが。
16
- ![イメージ説明](c26afd13a5e88791dffb4361716e1066.png)
16
+ ![イメージ説明](c26afd13a5e88791dffb4361716e1066.png)
17
+
18
+ ---
19
+
20
+ 編集機能、
21
+ パスワードが合わなくても編集できてしまうなぁ。
22
+ テストしてる?
23
+
24
+ で、もうちょっと清書して、たぶんこういう書き方になるはず。
25
+ ```php
26
+ if ( isset($_POST["edit"] ) === true ) {
27
+
28
+ if ( $renum === "" ) $err_msg3 = "番号を入力してください";
29
+ if ( $rename === "" ) $err_msg4 = "名前を入力してください";
30
+ if ( $retext === "" ) $err_msg5 = "コメントを入力してください";
31
+ if ( $pass2ed === "" ) $err_msg9 = "パスワードを入力してください";
32
+
33
+ if ( ($err_msg3 === "") && ($err_msg4 === "") && ($err_msg5 === "") && ($err_msg9 === "") ) {
34
+ $fp = fopen("231536_receive.txt", "w");
35
+ for ($i = 0; $i < count($edfile); $i++) {
36
+ $editraw = explode("<>", trim($edfile[$i])); // <-- trim()をつけないとパスワードに改行コードがツイたまま。
37
+
38
+ if ($editraw[0] !== $renum) {
39
+ fwrite($fp, $edfile[$i]);
40
+ }
41
+ else { // <-- 投稿番号と編集番号が一致
42
+ if ($editraw[4] === $pass2ed){
43
+ fwrite($fp, $redata);
44
+ $message2 = "編集に成功しました。";
45
+ }
46
+ else {
47
+ fwrite($fp, $edfile[$i]);
48
+ $message2 = "編集に失敗しました。パスワードが間違っています。";
49
+ }
50
+ }
51
+ }
52
+ if ($message2 === '') {
53
+ $message2 = "編集に失敗しました。編集番号が一致しませんでした。";
54
+ }
55
+ }
56
+ }
57
+ ```
58
+ 編集番号が見つかってパスワードが一致しなかった場合、
59
+ 編集番号が一致しなかった場合、も考慮する必要があるのではないかと。
60
+
61
+ ---
62
+
63
+ 名前とかカラで投稿したらエラーになった。
64
+ 新規投稿の処理を清書するとこうなる:
65
+ ```php
66
+ if ( isset($_POST["posting"] ) === true ) {
67
+ if ( $name === "" ) $err_msg1 = "名前を入力してください";
68
+ if ( $text === "" ) $err_msg2 = "コメントを入力してください";
69
+ if ( $password === "" ) $err_msg7 = "パスワードを入力してください";
70
+
71
+ if ( ($err_msg1 === "") && ($err_msg2 === "") && ($err_msg7 === "") ) {
72
+ $fp = fopen( "231536_receive.txt" ,"a" );
73
+ fwrite($fp , $data);
74
+ $message = "投稿に成功しました。";
75
+ fclose($fp);
76
+ }
77
+ }
78
+ ```
79
+ ifブロックとかの{~}の対応付けがわかりやすくなるよう、
80
+ インデント量を調整しておくこと。
81
+
82
+ ---
83
+
84
+ あと、消去フォームで、「消去しました。」をファイルに書き出してどーする。
85
+ <>で区切ったデータじゃないものを混在させると、他の処理でエラーになります。
86
+
87
+ ってことで清書してみた:
88
+ ```php
89
+ // 消去フォーム
90
+ $err_msg6 = "";
91
+ $err_msg8 = "";
92
+ $delfile = file('231536_receive.txt');
93
+ $delete = ( isset( $_POST["delete"] ) === true ) ? $_POST["delete"] : "";
94
+ $pass3del = ( isset( $_POST["pass3del"] ) === true ) ? $_POST["pass3del"] : "";
95
+
96
+
97
+ if ( isset($_POST["delete"] ) === true ) {
98
+ if ( $delete === "" ) $err_msg6 = "番号を入力してください";
99
+ if ( $pass3del === "" ) $err_msg8 = "パスワードを入力してください";
100
+
101
+ if ( ($err_msg6 === "") && ($err_msg8 === "") ) {
102
+ $fp = fopen("231536_receive.txt", "w");
103
+ for ($i = 0; $i < count($delfile); $i++) {
104
+ $deldata = explode( "<>", trim($delfile[$i]) );
105
+ if ( $deldata[0] !== $delete ) {
106
+ fwrite($fp, $delfile[$i]);
107
+ }
108
+ else {
109
+ if ($deldata[4] === $pass3del) {
110
+ $err_msg6 = $delete . "番の消去に成功しました。";
111
+ }
112
+ else {
113
+ $err_msg8 = $delete . "番の消去に失敗しました。パスワードが間違っています。";
114
+ fwrite($fp, $delfile[$i]);
115
+ }
116
+ }
117
+ }
118
+ if ( ($err_msg6 === '') && ($err_msg8 === '') ) {
119
+ $err_msg6 = $delete . '番に一致するものを見つけられませんでした。';
120
+ }
121
+ }
122
+ }
123
+ ```
124
+ 消去フォームでもtrim()忘れてたりしてたし。