前提・実現したいこと
PHPで自動販売機を制作しています。ユーザーがドリンクを購入した結果情報を表示する「購入結果ページ」( result.php )で、isset関数を使ってif文を修正したいです。現在エラーが3か所あります。
流れは以下のようになります。
「管理ページ(tool.php)」で、 販売する商品の追加をする。
「購入ページ(index.php)」で、購入する商品を選択し、金額を入力して購入する。
「購入結果ページ(result.php)」で、購入した結果を表示する。
発生している問題・エラーメッセージ
Notice: Undefined variable: img in /home/ec2-user/environment/htdocs/php/21/result.php on line 120 Call Stack #TimeMemoryFunctionLocation 10.0003245528{main}( ).../result.php:0 "> Notice: Undefined variable: drink_name in /home/ec2-user/environment/htdocs/php/21/result.php on line 121 Notice: Undefined variable: change in /home/ec2-user/environment/htdocs/php/21/result.php on line 125
該当のソースコード
PHP
1<?php 2 $host = 'localhost'; //ホスト名 3 $username = ''; //ユーザー名 4 $password = ''; //パスワード 5 $dbname = ''; //データベース名 6 $link = mysqli_connect($host, $username, $password, $dbname); 7 $err_msg = []; 8 $drink_id = ''; 9// (isset関数を使う) 10 if ($link) { 11 // 文字化け防止 12 mysqli_set_charset($link, 'utf8'); 13 14 //POST情報が入っていたら 15 if ($_SERVER['REQUEST_METHOD'] === 'POST') { 16 // drink_idを取得 17 $drink_id = $_POST['drink_id']; 18 // 商品情報を取得 19 $sql = "SELECT drink_master.drink_id, img, drink_name, price, status, stock 20 FROM drink_master 21 JOIN stock 22 ON drink_master.drink_id = stock.drink_id 23 WHERE drink_master.drink_id = '$drink_id'"; 24 25 //クエリ実行 26 if ($result = mysqli_query($link, $sql)) { 27 // 情報を各変数へ代入 28 $row = mysqli_fetch_array($result); 29 $price = (int)$row['price']; 30 $img = $row['img']; 31 $drink_name = $row['drink_name']; 32 $stock_number = (int)$row['stock']; 33 $open_status = (int)$row['status']; 34 $money = $_POST['money']; 35 36 // エラーチェック 37 // 商品未選択 38 if (count($drink_id) === 0) { 39 $err_msg[] = '商品を選択してください'; 40 } 41 // 金額入ってない 42 if ($money === '') { 43 $err_msg[] = 'お金が投入されていません'; 44 45 // 金額が足りない 46 } 47 else if ($money < $price) { 48 $err_msg[] = 'お金が足りません'; 49 // 整数以外が入力 50 } 51 else if(preg_match('/^[0-9]+$/', $money) !== 1) { 52 $err_msg[] = '投入金額は0以上の整数を入力してください'; 53 } 54 // 購入ページを開いた後に在庫0になった 55 if ($stock_number <= 0) { 56 $err_msg[] = '在庫が切れました'; 57 } 58 // 購入ページを開いた後にステータス0になった 59 if ($open_status === 0) { 60 $err_msg[] = '公開出来なくなりました・・・・'; 61 } 62 63 // エラーがなければ 64 if (count($err_msg) === 0) { 65 // オートコミット 66 mysqli_autocommit($link, false); 67 // 残金計算 68 $change = $money - $price; 69 // 在庫1本減らす 70 $sql = "UPDATE stock 71 SET stock = stock - 1 72 WHERE drink_id = '$drink_id'"; 73 // クエリの実行 74 if (mysqli_query($link, $sql) === TRUE) { 75 // 購入履歴追記 76 $sql = "INSERT INTO drink_history 77 (drink_id, purchase_date) 78 VALUES ($drink_id, now())"; 79 // クエリが実行出来なかったら 80 if (mysqli_query($link, $sql) !== TRUE) { 81 // エラー 82 $err_msg[] = 'drink_history: UPDATEエラー:' . $sql; 83 } 84 // エラー 85 } 86 else { 87 $err_msg[] = 'UPDATE drink_stock: UPDATEエラー:' . $sql; 88 } 89 90 // トランザクション成否 91 if (count($err_msg) === 0) { 92 mysqli_commit($link); 93 } 94 else { 95 mysqli_rollback($link); 96 } 97 } 98 } 99 } 100 } 101 else { 102 $err_msg[] = 'connectエラー' . $link; 103 } 104?> 105 106<!DOCTYPE html> 107<html lang="ja"> 108 <head> 109 <meta charset="UTF-8"> 110 <title>自動販売機 購入結果</title> 111 </head> 112 <body> 113 <h1>購入結果</h1> 114 <?php foreach ($err_msg as $value) { ?> 115 <?php echo $value . "<br>"; ?> 116 <?php } ?> 117 <?php if (count($err_msg) === 0) { ?> 118 <p>がしゃん! 119 <img src="./drink_picture/<?php echo $img; ?>"><br> //1個目のエラー 120 <?php echo $drink_name; ?> //2個目のエラー 121 が買えました! 122 </p> 123 <p>おつりは 124 <?php echo $change; ?> //3個目のエラー 125 円です! 126 </p> 127 <?php } ?> 128 <a href="index.php">戻る</a> 129 </body> 130</html> 131
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー