質問編集履歴
5
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -56,11 +56,11 @@
|
|
56
56
|
```
|
57
57
|
|
58
58
|
### 試したこと
|
59
|
-
検証を最優先し、連想配列`$post_data`を送らずその中身である`$comment`と`$is_official`を個別に送り、`filter_input`ではオプションに`FILTER_VALIDATE_BOOLEAN`を使う、という以下
|
59
|
+
検証を最優先し、連想配列`$post_data`を送らずその中身である`$comment`と`$is_official`を個別に送り、`filter_input`ではオプションに`FILTER_VALIDATE_BOOLEAN`を使う、という以下の変更を考えましたが、これしかないでしょうか?
|
60
60
|
|
61
61
|
```PHP
|
62
62
|
function test_ajax() {
|
63
|
-
//
|
63
|
+
// POSTの確認
|
64
64
|
$comment= filter_input(INPUT_POST, 'comment');
|
65
65
|
$is_official= filter_input(INPUT_POST, 'is_official', FILTER_VALIDATE_BOOLEAN);
|
66
66
|
|
4
不要な部分を削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -7,20 +7,15 @@
|
|
7
7
|
### 発生している問題
|
8
8
|
勝手に`false`が`"false"`のようなstring型に変換されてしまいます。
|
9
9
|
|
10
|
-
具体的には、下記の該当のソースコートによって、ログファイルには次の内容が出力されるということです。
|
11
|
-
```log
|
12
|
-
|
10
|
+
そのため下記の該当のソースコードで echo された値( JavaScript 側の res ) を見ると`'is_official がダメ'`が入ってしまっており、bool型の検証ができていないことが分かります。
|
13
|
-
|
11
|
+
|
14
12
|
|
15
13
|
### 該当のソースコード
|
16
|
-
この問題のせいで、次のPHPの
|
14
|
+
この問題のせいで、次のPHPの検証で`is_bool`が使えないのです。
|
17
15
|
```PHP
|
18
16
|
function test_ajax() {
|
19
17
|
// POSTの確認
|
20
18
|
$post_data = filter_input(INPUT_POST, 'post_data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
|
21
|
-
|
22
|
-
// ログファイルに出力
|
23
|
-
error_log( '$post_data = ' . json_encode($post_data) );
|
24
19
|
|
25
20
|
// POSTの検証
|
26
21
|
$valided = [];
|
3
yambejp様のご回答を受けて
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
この問題のせいで、次のPHPの最後の行のように検証で`is_bool`が使えないのです。
|
17
17
|
```PHP
|
18
18
|
function test_ajax() {
|
19
|
-
// POST確認
|
19
|
+
// POSTの確認
|
20
20
|
$post_data = filter_input(INPUT_POST, 'post_data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
|
21
21
|
|
22
22
|
// ログファイルに出力
|
@@ -56,15 +56,16 @@
|
|
56
56
|
dataType: 'json',
|
57
57
|
data : data
|
58
58
|
}).done(function(res) {
|
59
|
+
console.log(res);
|
59
60
|
});
|
60
61
|
```
|
61
62
|
|
62
63
|
### 試したこと
|
63
|
-
検証を最優先し、連想配列`$post_data`を送らずその中身である`$comment`と`$is_official`を個別に送り、`filter_input`ではオプションに`FILTER_VALIDATE_BOOLEAN`を使うしかないでしょうか?
|
64
|
+
検証を最優先し、連想配列`$post_data`を送らずその中身である`$comment`と`$is_official`を個別に送り、`filter_input`ではオプションに`FILTER_VALIDATE_BOOLEAN`を使う、という以下☆の変更点を考えましたが、これしかないでしょうか?
|
64
65
|
|
65
66
|
```PHP
|
66
67
|
function test_ajax() {
|
67
|
-
// POST確認
|
68
|
+
// ☆POSTの確認
|
68
69
|
$comment= filter_input(INPUT_POST, 'comment');
|
69
70
|
$is_official= filter_input(INPUT_POST, 'is_official', FILTER_VALIDATE_BOOLEAN);
|
70
71
|
|
@@ -75,3 +76,29 @@
|
|
75
76
|
|
76
77
|
### 補足情報(FW/ツールのバージョンなど)
|
77
78
|
PHP 7.2 です。
|
79
|
+
|
80
|
+
### yambejp様のご回答を受けて
|
81
|
+
ご回答のコードを質問に沿って記述しますと次のようになるのかと解釈しました。2つの★が変更点です。
|
82
|
+
しかし該当のソースコードと同様に`res`には`'is_official がダメ'`が入ってしまっておりました…。
|
83
|
+
|
84
|
+
解釈が誤っておりましたら改めてご教示頂けませんでしょうか。
|
85
|
+
```PHP
|
86
|
+
function test_ajax() {
|
87
|
+
// ★POSTの確認
|
88
|
+
$post_data = filter_input(INPUT_POST,"post_data",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);
|
89
|
+
$post_data = array_map(function($x){
|
90
|
+
return json_decode($x);
|
91
|
+
},$post_data);
|
92
|
+
|
93
|
+
/*--- 以下、該当のソースコードと同じなので割愛 ---*/
|
94
|
+
|
95
|
+
}
|
96
|
+
```
|
97
|
+
|
98
|
+
```JavaScript
|
99
|
+
const data = {
|
100
|
+
action : 'test_ajax',
|
101
|
+
post_data : JSON.stringify(post_data), // ★JSON.stringify() を通す
|
102
|
+
}
|
103
|
+
```
|
104
|
+
|
2
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,9 +22,19 @@
|
|
22
22
|
// ログファイルに出力
|
23
23
|
error_log( '$post_data = ' . json_encode($post_data) );
|
24
24
|
|
25
|
-
// 検証
|
25
|
+
// POSTの検証
|
26
|
+
$valided = [];
|
26
|
-
if ( mb_strlen( $post_data['comment'] ) > 100 ) d
|
27
|
+
if ( mb_strlen( $post_data['comment'] ) > 100 ) $valided[] = 'comment がダメ';
|
27
|
-
if ( is_bool( $post_data['is_official'] ) )
|
28
|
+
if ( ! is_bool( $post_data['is_official'] ) ) $valided[] = 'is_official がダメ';
|
29
|
+
|
30
|
+
// 検証結果をJSで確認
|
31
|
+
/*
|
32
|
+
echo された値( JavaScript 側の res ) を見ると
|
33
|
+
'is_official がダメ' が入ってしまっており
|
34
|
+
bool型の検証ができていないことが分かる
|
35
|
+
*/
|
36
|
+
echo json_encode( $valided );
|
37
|
+
die();
|
28
38
|
|
29
39
|
}
|
30
40
|
```
|
@@ -54,13 +64,11 @@
|
|
54
64
|
|
55
65
|
```PHP
|
56
66
|
function test_ajax() {
|
57
|
-
// POST確認
|
67
|
+
// POST確認 → 該当のソースコードの値を個別に受け取って filter_input する
|
58
68
|
$comment= filter_input(INPUT_POST, 'comment');
|
59
69
|
$is_official= filter_input(INPUT_POST, 'is_official', FILTER_VALIDATE_BOOLEAN);
|
60
70
|
|
61
|
-
//
|
71
|
+
/*--- 以下、該当のソースコードと同じなので割愛 ---*/
|
62
|
-
if ( mb_strlen( $post_data['comment'] ) > 100 ) die('comment がダメ');
|
63
|
-
if ( is_bool( $post_data['is_official'] ) ) die('is_official がダメ');
|
64
72
|
|
65
73
|
}
|
66
74
|
```
|
1
スペースの調整
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
// 検証
|
26
26
|
if ( mb_strlen( $post_data['comment'] ) > 100 ) die('comment がダメ');
|
27
|
-
if ( is_bool( $post_data['is_official'] ) )
|
27
|
+
if ( is_bool( $post_data['is_official'] ) ) die('is_official がダメ');
|
28
28
|
|
29
29
|
}
|
30
30
|
```
|
@@ -60,7 +60,7 @@
|
|
60
60
|
|
61
61
|
// 検証
|
62
62
|
if ( mb_strlen( $post_data['comment'] ) > 100 ) die('comment がダメ');
|
63
|
-
if ( is_bool( $post_data['is_official'] ) )
|
63
|
+
if ( is_bool( $post_data['is_official'] ) ) die('is_official がダメ');
|
64
64
|
|
65
65
|
}
|
66
66
|
```
|