回答編集履歴
8
試した。
test
CHANGED
@@ -48,6 +48,36 @@
|
|
48
48
|
|
49
49
|
|
50
50
|
|
51
|
+
↑に対する追記。
|
52
|
+
|
53
|
+
自身の後学のためにも試してみました。
|
54
|
+
|
55
|
+
```php
|
56
|
+
|
57
|
+
$a = "1";
|
58
|
+
|
59
|
+
var_dump(ctype_digit($a));
|
60
|
+
|
61
|
+
//true
|
62
|
+
|
63
|
+
$b = "2";
|
64
|
+
|
65
|
+
var_dump(ctype_digit((int)$b));
|
66
|
+
|
67
|
+
//false
|
68
|
+
|
69
|
+
```
|
70
|
+
|
71
|
+
やはり(int)のキャストが原因のようです。
|
72
|
+
|
73
|
+
[ctype_digit()](http://php.net/manual/ja/function.ctype-digit.php)はあくまで「文字列が10 進数か判定する」ものであり、
|
74
|
+
|
75
|
+
キャストすることによって「数値型」となるので「false」と判定され、今回のプログラムでは「整数ではない」と判断されるようですね。
|
76
|
+
|
77
|
+
マニュアルにも引数の型は「string」となっているので、そもそもstring以外はfalseと判定するようですね。
|
78
|
+
|
79
|
+
|
80
|
+
|
51
81
|
追記:
|
52
82
|
|
53
83
|
提示情報から授業の課題のようなものだと推察されますので、
|
7
修正
test
CHANGED
@@ -34,8 +34,6 @@
|
|
34
34
|
|
35
35
|
あくまで「すべての文字が 10 進数字の場合にTRUE」なので。
|
36
36
|
|
37
|
-
エラーメッセージは色々と条件が設定されているようなのでどのメッセージが表示されているかにもよりますね。
|
38
|
-
|
39
37
|
|
40
38
|
|
41
39
|
直接解決とならないかもしれませんが、強いてなら、**入力チェックを行うのであれば(int)等の型変換は不要**に思います。
|
6
修正
test
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
最初のエラー(mysqli_query()のwarning)の解消については下記のように修正してください。
|
1
|
+
最初のエラー(mysqli_query()のwarning)の解消についてはresult.php 50行目を下記のように修正してください。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
5
|
```PHP
|
6
6
|
|
7
|
-
|
7
|
+
現在
|
8
|
-
|
9
|
-
$sql = 'UPDATE drink_stock_table SET stock_number = ' . $stock_numbers - 1 . ' WHERE drink_id = ' . $drink_id;
|
10
8
|
|
11
9
|
if(mysqli_query($link,$query) === FALSE){
|
12
10
|
|
@@ -16,15 +14,15 @@
|
|
16
14
|
|
17
15
|
|
18
16
|
|
19
|
-
後
|
17
|
+
修正後
|
20
|
-
|
21
|
-
$sql = 'UPDATE drink_stock_table SET stock_number = ' . $stock_numbers - 1 . ' WHERE drink_id = ' . $drink_id;
|
22
18
|
|
23
19
|
if(mysqli_query($link,$sql) === FALSE){
|
24
20
|
|
25
21
|
```
|
26
22
|
|
27
|
-
$queryという変数はどこにも出てきていないのにいきなり使われています。
|
23
|
+
前後確認を行うとわかりますが、$queryという変数はどこにも出てきていないのにいきなり使われています。
|
24
|
+
|
25
|
+
このような現象を回避するためにはSQLを格納する変数は使いまわすのではなく、用途に合わせた名前をそれぞれつけてそれぞれ使った方が良いです。
|
28
26
|
|
29
27
|
|
30
28
|
|
5
修正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
最初のエラーの解消については下記のように修正してください。
|
1
|
+
最初のエラー(mysqli_query()のwarning)の解消については下記のように修正してください。
|
2
2
|
|
3
3
|
|
4
4
|
|
4
修正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
エラーの解消については下記のように修正してください。
|
1
|
+
最初のエラーの解消については下記のように修正してください。
|
2
2
|
|
3
3
|
|
4
4
|
|
3
修正
test
CHANGED
@@ -44,7 +44,11 @@
|
|
44
44
|
|
45
45
|
入力チェックによって拾えるはずのエラーも拾えなくなる可能性がありますので。
|
46
46
|
|
47
|
-
|
47
|
+
参考:[初心者を戒めるPHP-安易にキャストするな](http://qiita.com/tadsan/items/fb496e450fc27c8c4494#%E5%AE%89%E6%98%93%E3%81%AB%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E3%81%AA)
|
48
|
+
|
49
|
+
PHPにおいて型キャストが役に立つ場面ってほとんどないです。
|
50
|
+
|
51
|
+
キャストするのではなく、不正な情報がきたことをプログラム側で感知して弾くことがあるべき姿です。
|
48
52
|
|
49
53
|
|
50
54
|
|
@@ -52,4 +56,4 @@
|
|
52
56
|
|
53
57
|
提示情報から授業の課題のようなものだと推察されますので、
|
54
58
|
|
55
|
-
セキュリティ面とか効率面といった観点からのツッコミは控えておきます。
|
59
|
+
セキュリティ面とか開発効率面といった観点からのツッコミは控えておきます。
|
2
修正
test
CHANGED
@@ -38,7 +38,9 @@
|
|
38
38
|
|
39
39
|
エラーメッセージは色々と条件が設定されているようなのでどのメッセージが表示されているかにもよりますね。
|
40
40
|
|
41
|
+
|
42
|
+
|
41
|
-
強いてなら、**入力チェックを行うのであれば(int)等の型変換は不要**に思います。
|
43
|
+
直接解決とならないかもしれませんが、強いてなら、**入力チェックを行うのであれば(int)等の型変換は不要**に思います。
|
42
44
|
|
43
45
|
入力チェックによって拾えるはずのエラーも拾えなくなる可能性がありますので。
|
44
46
|
|
1
追記
test
CHANGED
@@ -38,6 +38,12 @@
|
|
38
38
|
|
39
39
|
エラーメッセージは色々と条件が設定されているようなのでどのメッセージが表示されているかにもよりますね。
|
40
40
|
|
41
|
+
強いてなら、**入力チェックを行うのであれば(int)等の型変換は不要**に思います。
|
42
|
+
|
43
|
+
入力チェックによって拾えるはずのエラーも拾えなくなる可能性がありますので。
|
44
|
+
|
45
|
+
- [初心者を戒めるPHP-安易にキャストするな](http://qiita.com/tadsan/items/fb496e450fc27c8c4494#%E5%AE%89%E6%98%93%E3%81%AB%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E3%81%AA)
|
46
|
+
|
41
47
|
|
42
48
|
|
43
49
|
追記:
|