回答編集履歴

3

追記

2017/08/25 04:55

投稿

m.ts10806
m.ts10806

スコア80842

test CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
  「選択したドリンクを購入」で購入ボタン1つにしたいのであればradioのselected_drinkのvalueにdrink_idをそれぞれ入れてresult.phpで受け取る
8
8
 
9
- それか本当の自販機のようにそれぞれの商品の下にボタンを置いてonclickでhiddenのdrink_idに入れてPOSTする
9
+ それか本当の自販機のようにそれぞれの商品の下にボタンを置いてonclickでhiddenのdrink_idに入れてPOSTする 
10
+
11
+ stock_numbersも同様。これだと最後のレコードのdrink_idのみ更新されてしまう
10
12
 
11
13
  - キャストは不要(理由はコメントに書いたとおり)
12
14
 
@@ -60,6 +62,20 @@
60
62
 
61
63
  - PDOなどを使わず生のSQLに入力値を渡すのであればsqlのエスケープは必ず行いましょう([PHPマニュアル:mysqli_real_escape_string()](http://php.net/manual/ja/mysqli.real-escape-string.php))
62
64
 
65
+ - stock_numbers更新について、前の画面からはhiddenで渡して使ってますが、更新のためだけに使ってますよね。それでしたらSQLでは「自身のカラム」が式の右辺にも使えるので、持っておくのは不要です。
66
+
67
+ ```sql
68
+
69
+ UPDATE drink_stock_table SET stock_number = stock_number - 1 WHERE drink_id = ' . $drink_id;
70
+
71
+ ```
72
+
73
+ 「自身の現在の値から1を引く」っていう書き方ですね。この方が在庫の増減のさせ方としては確実です。
74
+
75
+ というのは商品選択画面のhiddenのstock_numberから引いているので、
76
+
77
+ ほぼ同時に購入処理を実行した場合に、見た目減っていない現象が起きる可能性があるからです。
78
+
63
79
 
64
80
 
65
81
  余談:

2

修正

2017/08/25 04:55

投稿

m.ts10806
m.ts10806

スコア80842

test CHANGED
@@ -28,7 +28,23 @@
28
28
 
29
29
  で0件なら金額不足エラー、1件なら金額足りてるのでエラーなしで情報取得
30
30
 
31
+ - 金額不足のチェックを}で閉じなくてもelseでつないでしまっても差し支えない
32
+
33
+ ```PHP
34
+
35
+ if($amount_money < $price){
36
+
37
+ $err_msg[] = '金額が足りません';
38
+
39
+ }else{
40
+
41
+ $change = $amount_money - $price;
42
+
43
+ }
44
+
45
+ ```
46
+
31
- おつり出したいならちょっと特殊ですが、
47
+ またおつり出したいならちょっと特殊ですが、
32
48
 
33
49
  ```
34
50
 

1

修正

2017/08/25 04:45

投稿

m.ts10806
m.ts10806

スコア80842

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  「選択したドリンクを購入」で購入ボタン1つにしたいのであればradioのselected_drinkのvalueにdrink_idをそれぞれ入れてresult.phpで受け取る
8
8
 
9
- それか本当の自販機のようにそれぞれボタンを置いてonclickでdrink_idPOSTする
9
+ それか本当の自販機のようにそれぞれの商品の下にボタンを置いてonclickでhiddenのdrink_idに入れてPOSTする
10
10
 
11
11
  - キャストは不要(理由はコメントに書いたとおり)
12
12