現在、PHPの勉強で自動販売機作成ツールを作成途中なのですが、エラーの原因や実行結果において上手くいかない部分があり、ご教授頂ければ幸いです...
3つのファイル(管理ページ、購入ページ、購入結果ページ)に分けて作成していまして、以下のコードは購入ページより商品が選択されて送信されてきた購入結果ページになります。
php
1<?php 2date_default_timezone_set('Asia/Tokyo'); 3const HOST = ''; 4const DB_NAME = ''; 5const USER_NAME = ''; 6const PASSWORD = ''; 7$err_msg = array(); 8$change = ''; 9$date = date('Y/m/d H:i:s'); 10$drink_info_list = array(); 11 12if(($link = mysqli_connect(HOST,USER_NAME,PASSWORD,DB_NAME)) !== FALSE){ 13 if ($_SERVER['REQUEST_METHOD'] === 'POST') { 14 $stock_numbers = (int)$_POST['stock_numbers']; 15 $amount_money = (int)$_POST['amount_money']; 16 //入力値チェック 17 if($_POST['selected_drink'] === ''){ 18 $err_msg[] = 'ドリンクを指定して下さい'; 19 } 20 if(ctype_digit($amount_money) === FALSE){ 21 $err_msg[] = '金額は整数で入力してください'; 22 } 23 if($price > $amount_money){ 24 $err_msg[] = '金額が足りません'; 25 } 26 27 //エラーがなかった場合 28 if (count($error_msg) === 0){ 29 $drink_id = (int)$_POST['drink_id']; 30 31 $sql = 'SELECT drink_name,price FROM drink_info_table WHERE drink_id = ' . $drink_id; 32 33 if($result = mysqli_query($link,$sql)){ 34 while($row = mysqli_fetch_assoc($result)){ //while文について質問。 35 36 $price = htmlspecialchars($row['price'],ENT_QUOTES, 'UTF-8'); 37 $drink_name = htmlspecialchars($row['drink_name'],ENT_QUOTES, 'UTF-8'); 38 } 39 }else{ 40 $err_msg[] = 'drink_info_table:SELECTエラー:'.$sql; 41 } 42 43 44 45 if($amount_money > $price){ 46 $change = $amount_money - $price; 47 } 48 49 $sql = 'UPDATE drink_stock_table SET stock_number = ' . $stock_numbers - 1 . ' WHERE drink_id = ' . $drink_id; 50 if(mysqli_query($link,$query) === FALSE){ 51 $err_msg[] = 'drink_stock_table: UPDATEエラー' . $sql; 52 } 53 54 $sql = 'INSERT INTO drink_history_table(drink_id,bought_date) VALUES (' . $drink_id . ',' . $date . ');'; 55 if(mysqli_query($link,$sql) === FALSE){ 56 $err_msg[] = 'drink_history_table: insertエラー' . $sql; 57 } 58 //var_dump($stock_numbers);exit(); 59 60 61 } 62 63 } 64}else{ 65 $err_msg[] = 'DB接続失敗'; 66} 67 68 69 70?> 71 72 73<!DOCTYPE html> 74<html lang="ja"> 75<head> 76 <meta charset="UTF-8"> 77 <title></title> 78</head> 79<body> 80 <h1>自動販売機結果</h1> 81 <?php foreach($err_msg as $value){ ?> 82 <p><?php echo $value; ?></p> 83 <?php } ?> 84 85 <p><?php echo $change; ?></p> 86 <footer> 87 <a href="index.php">戻る</a> 88 </footer> 89</body> 90</html>
以下は購入ページのコードになります。
文字数制限上画像となってしまい、申し訳ないです。
実行した結果と致しましては、以下の通りです。
エラーの原因が分からないのもそうなのですが、購入結果ページにおいて、ctype_digit関数で整数でなければFALSEとしているのですが、購入ページで整数を入力しているにも関わらずエラーメッセージが表示されているのも分からないんですよね...
購入結果ページの完成形としましては、こちらの画像のようにできればと思っています。
回答3件
あなたの回答
tips
プレビュー