回答編集履歴

8

試した。

2017/08/24 04:50

投稿

m.ts10806
m.ts10806

スコア80852

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

修正

2017/08/24 04:50

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -34,8 +34,6 @@
34
34
 
35
35
  あくまで「すべての文字が 10 進数字の場合にTRUE」なので。
36
36
 
37
- エラーメッセージは色々と条件が設定されているようなのでどのメッセージが表示されているかにもよりますね。
38
-
39
37
 
40
38
 
41
39
  直接解決とならないかもしれませんが、強いてなら、**入力チェックを行うのであれば(int)等の型変換は不要**に思います。

6

修正

2017/08/24 04:42

投稿

m.ts10806
m.ts10806

スコア80852

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

修正

2017/08/24 04:39

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -1,4 +1,4 @@
1
- 最初のエラーの解消については下記のように修正してください。
1
+ 最初のエラー(mysqli_query()warning)の解消については下記のように修正してください。
2
2
 
3
3
 
4
4
 

4

修正

2017/08/24 04:38

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -1,4 +1,4 @@
1
- エラーの解消については下記のように修正してください。
1
+ 最初のエラーの解消については下記のように修正してください。
2
2
 
3
3
 
4
4
 

3

修正

2017/08/24 04:36

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -44,7 +44,11 @@
44
44
 
45
45
  入力チェックによって拾えるはずのエラーも拾えなくなる可能性がありますので。
46
46
 
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)
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

修正

2017/08/24 04:24

投稿

m.ts10806
m.ts10806

スコア80852

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

追記

2017/08/24 04:22

投稿

m.ts10806
m.ts10806

スコア80852

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
  追記: