質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

983閲覧

自動販売機システム作成中にエラー発生

ananans

総合スコア2

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/07/28 02:13

編集2021/07/28 04:57

前提・実現したいこと

PHPで自動販売機システムをmvcモデルに基づいて作成しております。

#発生している問題・エラーメッセージ
Notice: Undefined variableというエラーが発生しました。
商品登録ボタンを押しても登録されません。
定義自体はしてると思っております。
イメージ説明
イメージ説明

php

1ソースコード 2functions.php 3<?php 4$err_msg = []; 5 6function insert_drink($link) { 7 8 if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['sql_kind'] === 'insert') { 9 10 if (isset($_POST['new_name']) === TRUE) { 11 12 switch (TRUE) { 13 case ($_POST['new_name'] === ''): 14 $err_msg[] = '商品名を入力してください'; 15 break; 16 case ($_POST['new_name'] === NULL); 17 $err_msg[] = '商品名を入力してください'; 18 break; 19 default: 20 $new_name = $_POST['new_name']; 21 break; 22 } 23 } 24 25 if (isset($_POST['new_price']) === TRUE) { 26 27 switch (TRUE) { 28 case ($_POST['new_price'] === ''): 29 $err_msg[] = '値段を入力してください'; 30 break; 31 case ($_POST['new_price'] === NULL): 32 $err_msg[] = '値段を入力してください'; 33 break; 34 case (preg_match('/^[0-9]+$/', $_POST['new_price']) !== 1): 35 $err_msg[] = '値段は0以上の半角整数を入力してください'; 36 break; 37 default: 38 $new_price = $_POST['new_price']; 39 break; 40 } 41 } 42 43 if (isset($_POST['new_stock']) === TRUE) { 44 45 switch (TRUE) { 46 case ($_POST['new_stock'] === ''): 47 $err_msg[] = '個数を入力してください'; 48 break; 49 case ($_POST['new_stock'] === NULL): 50 $err_msg[] = '個数を入力してください'; 51 break; 52 case (preg_match('/^[0-9]+$/', $_POST['new_stock']) !== 1): 53 $err_msg[] = '在庫は0以上の半角整数を入力してください'; 54 break; 55 default: 56 $new_stock = $_POST['new_stock']; 57 break; 58 } 59 } 60 61 if ($_FILES['new_img']['error'] === UPLOAD_ERR_OK) { 62 63 if (count($err_msg) === 0) { 64 65 $chk_picture = getimagesize($_FILES['new_img']['tmp_name']); 66 67 if ($chk_picture['mime'] === 'image/png' || $chk_picture['mime'] === 'image/jpeg') { 68 69 if ($chk_picture[0] <= 500 && ($chk_picture[1] <= 500)) { 70 71 $mime = $chk_picture['mime']; 72 switch ($mime) { 73 case 'image/png': 74 $type = '.png'; 75 break; 76 case 'image/jpeg': 77 $type = '.jpg'; 78 break; 79 } 80 81 $upload = $uploaddir . date('YmdHis') . rand(0, 10000) . $type; 82 83 move_uploaded_file($_FILES['new_img']['tmp_name'], $upload); 84 } else { 85 $err_msg[] = 'ファイルは縦と横500px以内にしてください'; 86 } 87 } else { 88 $err_msg[] = 'PNGかJPEG形式のファイルをアップロードしてください'; 89 } 90 } 91 } else { 92 $err_msg[] = 'ファイルを選択してください'; 93 } 94 95 96 if (isset($_POST['new_status']) === TRUE) { 97 if ((int) $_POST['new_status'] === 0 || (int) $_POST['new_status'] === 1) { 98 $new_status = (int) $_POST['new_status']; 99 } else { 100 $err_msg[] = 'ステータスは公開か非公開を選択してください'; 101 } 102 } else { 103 $err_msg[] = 'ステータスを選択してください'; 104 } 105 106 if (count($err_msg) === 0) { 107 108 $new_time = date('Y-m-d H:i:s'); 109 110 $insert_data_info = [ 111 'drink_name' => $new_name, 112 'price' => $new_price, 113 'created_at' => $new_time, 114 'updated_at' => $new_time, 115 'status' => $new_status, 116 'path' => $upload 117 ]; 118 119 $sql = 'INSERT INTO drink_info_table(drink_name, price, created_at, updated_at, status, path)VALUES(\''.$new_name.'\',\''.$new_price.'\',\''.$new_time.'\',\''.$new_time.'\',\''.$new_status.'\'\''.$upload.'\')'; 120 121 if ($result = mysqli_query($link, $sql) === TRUE) { 122 123 $drink_id = mysqli_insert_id($link); 124 125 $insert_data_stock = [ 126 'drink_id' => $drink_id, 127 'stock' => $new_stock, 128 'created_at' => $new_time, 129 'updated_at' => $new_time 130 ]; 131 132 $sql = 'INSERT INTO stock_table(drink_id, stock, created_at, updated_at)VALUES(\''.$drink_id.'\',\''.$new_stock.'\',\''.$new_time.'\',\''.$new_time.'\')'; 133 134 if ($result = mysqli_query($link, $sql) !== TRUE) { 135 $err_msg[] = 'stock_tableへのデータの登録に失敗しました'; 136 } 137 } else { 138 $err_msg[] = 'drink_info_tableへのデータの登録に失敗しました'; 139 } 140 if (count($err_msg) === 0) { 141 $complete_msg[] = '追加登録完了!'; 142 } 143 } 144 } 145 146} 147 148

#試したこと
変数の定義のやり方を変えたりしましたが、エラーは直らなかったです。

#補足情報(FW/ツールのバージョンなど)
Cloud9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「Notice: Undefined variable」の先が重要。
原因は定義していない変数を参照しているのだと思います。
変数名や発生行数が表示されていると思うのでピンポイントで対応ください

insert_drink()内の

$insert_data_info = [ 'drink_id' => $drink_id, 'drink_name' => $new_name, 'price' => $new_price, 'created_at' => $new_time, 'updated_at' => $new_time, 'status' => $new_status, 'path' => $paths, ];

あたりが怪しいですね、
関数に$drink_id,$new_name,$new_price, $new_statusあたりが
持ち込まれていないです

投稿2021/07/28 02:16

編集2021/07/28 02:21
yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ananans

2021/07/28 04:58 編集

別のコードに変更しましたが、同じエラーが発生しました。
yambejp

2021/07/28 05:02

分岐の中で$new_nameを定義していると他の分岐では未定義になります。 もっとロジックを簡潔にして認識しやすい処理にしてください
ananans

2021/07/28 05:30

具体的にはどうすればよろしいでしょうか。
yambejp

2021/07/28 05:53

>具体的に 全体をばっさり削り、とりあえず動くところまで戻って下さい
ananans

2021/07/29 04:31

ばっさりといってもよくわからないです
yambejp

2021/07/29 04:41

やろうとなさっていることは初級~中級程度のレベルのことだと思います おそらく圧倒的に知識が足りていないと思います せめて初級レベルの学習をしてから手をつけたほうが良いと思います それが無理なら諦めるしかないですね
ananans

2021/07/29 06:35

すみませんまた色々整理してから出直します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問