PHP勉強中の者です。現在自動販売機作成ツールの管理画面を作成しているのですが、POSTの処理につまずいてしまっています。
ご教授頂ければ幸いです。
現在作成しているコードは以下の通りです。
DBへの接続情報は隠させていただいています。
※文字数制限の為続きはコメント欄にて書かせていただきます。
php
1header("Content-type: text/html; charset=utf-8"); 2const HOST = ''; 3const DB_NAME = ''; 4const USER_NAME = ''; 5const PASSWORD = ''; 6$drink_name = ''; 7$drink_price = 0; 8$drink_quantity = 0; 9$drink_status = 0; 10$drink_id = 0; 11$tmp_file = ''; 12$file_name = ''; 13$upload_file_name = ''; 14$success_msg = array(); 15$err_msg = array(); 16$drink_info_list = array(); 17 18//DB接続 19if(($link = mysqli_connect(HOST,USER_NAME,PASSWORD,DB_NAME)) !== FALSE){ 20 21 mysqli_set_charset($link,'UTF8'); 22 23 if ($_SERVER['REQUEST_METHOD'] === 'POST') { 24 25 $submit_type = $_POST['submit_type']; 26 27 switch ($submit_type) { 28 case 'add_item': 29 // 新規商品追加の場合 30 31 //POSTされた値を取得 32 $drink_name = $_POST['drink_name']; 33 $drink_price = $_POST['drink_price']; 34 $drink_quantity = $_POST['drink_quantity']; 35 $drink_status = (int)$_POST['public_status']; 36 37 38 $tmp_file = $_FILES['drink_img']['tmp_name']; 39 40 $file_name = 'img/' . $_FILES['drink_img']['name']; //hogehoge.php 41 42 43 // 登録値チェック 44 /* 45 46 17/08/15 47 issetは入力値判定には使えません。 48 issetは、「宣言されているか」というチェックになります。 49 50 入力されてるか、のチェックは言い換えると 51 (文字入力の場合は)変数の中の文字数が0文字より多いか 52 (数値の場合は)変数の中の数値が0より大きいか 53 というチェックです。 54 55 */ 56 57 // 1.名前が入力されているか 58 if($drink_name === '' ){ 59 $err_msg[] = '名前が入力されていません'; 60 } 61 // 2.値段が入力されているか 62 if($drink_price < 0 ){ 63 $err_msg[] = '値段が入力されていません'; 64 } 65 // 3.値段が数値か 66 if(ctype_digit($drink_price) === FALSE){ 67 $err_msg[] = '値段を入力してください'; 68 } 69 // 4.在庫数が入力されているか 70 if($drink_quantity < 0 ){ 71 $err_msg[] = '個数が入力されていません'; 72 } 73 // 5.在庫数が数値かどうか 74 if(ctype_digit($drink_quantity) === FALSE){ 75 $err_msg[] = '数値を入力してください'; 76 } 77 // 6.ファイルの拡張子チェック 78 // substr = sub string -> 文字の抜き取り 79 // strrpos = string reverse position -> 対象の文字が何文字目にあるか? 80 // strpos = string position 81 82 // strpos('あいうえお', 'あ') -> 0 83 // strrpos('あいうえお', 'あ') -> 0 84 85 //strrpos('cola.jpg', '.') -> 4 86 // substr('cola.jpg', 4) -> jpg 87 88 // substr('apple.jpg', strrpos('apple.jpg', '.') + 1); 89 // substr('apple.jpg', 5 + 1); 90 // $ext = substr('apple.jpg', 6);// 91 // 第一引数の文字を、第二引数の数値以降分抜き出す 92 // 第三引数がある場合は、その数byte分抜き出す 93 94 // strpos 95 // strrpos 96 97 $ext = substr($file_name, strrpos($file_name, '.') + 1); 98 if(!($ext === 'jpeg' || $ext === 'jpg' || $ext === 'png')){ 99 $error_msg[] = 'ファイル形式が異なります。画像ファイルはJPEG又はPNGのみ利用可能です。'; 100 } 101 102 // エラーがなかったら(validation check に引っかからなかった場合に登録) 103 if (count($error_msg) === 0) { 104 105 mysqli_autocommit($link, false); 106 107 // 1.INSERT to DB 108 109 // create sql 110 $sql = 'INSERT INTO drink_info_table(drink_name,price,status) VALUES(' . '\'' . $drink_name . '\',' . $drink_price . ',' . $drink_status . ')'; 111 112 // exec sql 113 if(mysqli_query($link,$sql) !== FALSE ){ 114 115 $drink_id = mysqli_insert_id($link); 116 117 // create sql 118 $sql = 'INSERT INTO drink_stock_table(drink_id, stock_number) VALUES (' . $drink_id . ',' . $drink_quantity . ')'; 119 120 // exec sql 121 if(mysqli_query($link,$sql) !== FALSE ){ 122 123 } else{ 124 $err_msg[] = 'drink_stock_table:insertエラー:' . $sql; 125 } 126 127 }else{ 128 $err_msg[] = 'drink_info_table:insertエラー:' . $sql; 129 } 130 131 // 2.UPLOAD PIC 132 if (count($error_msg) === 0) { 133 if (is_uploaded_file($tmp_file) === TRUE){ 134 $upload_file_name = 'img/' . $drink_id . '.' . $ext; 135 136 if ( move_uploaded_file($tmp_file,$upload_file_name) === TRUE){//同名ファイルがアップロードされた場合の処理 137 138 } else { 139 $err_msg[] = 'ファイルがアップロードできません'; 140 } 141 142 } else { 143 $err_msg[] = 'ファイルが選択されていません'; 144 } 145 } 146 147 // トランザクション成否判定 148 if(count($err_msg) === 0){ 149 $success_msg[] = '商品追加成功'; 150 mysqli_commit($link); 151 }else{ 152 mysqli_rollback($link); 153 } 154 } 155 156 break; 157 158 case 'change_value': 159 // 在庫数変更の場合 160 161 if(isset($_post['update_stock'])){ 162 $update_stock = (int)$_post['update_stock']; 163 $sql = 'UPDATE drink_stock_table SET stock_number = ' . $update_stock . 'WHERE drink_id = ' . $drink_id;//間違え 164 if(mysqli_query($link,$sql) === TRUE){ 165 $success_msg [] = '在庫変更成功'; 166 }else{ 167 $err_msg[] = 'UPDATE drink_stock_table:updateエラー:' . $sql; 168 } 169 //if($_POST['change_status']){ 170 // $success_msg [] = 'ステータス変更成功'; 171 //} 172 }$err_msg[] = '在庫変更失敗'; 173 174 break; 175 176 case 'change_status': 177 // ステータス変更の場合 178 if(isset($_POST['change_status']) === '公開->非公開'){ 179 $sql = 'UPDATE drink_info_table SET status = 0 WHERE drink_id = ' . $drink_id; 180 if(mysqli_query($link,$sql) === FALSE){ 181 $err_msg[] = 'ステータス変更失敗'; 182 183 } 184 }elseif(isset($_POST['change_status']) === '非公開->公開') { 185 186 $sql = 'UPDATE drink_info_table SET status = 1 WHERE drink_id = ' . $drink_id; 187 if(mysqli_query($link,$sql) === FALSE){ 188 $err_msg[] = 'ステータス変更失敗'; 189 } 190 }else{ 191 $err_msg[] = 'ステータス変更失敗'; 192 } 193 break; 194 195 } 196 197 198 } // POST end 199 200 //DBの値を取得 201 $sql = 'SELECT drink_info_table.drink_id,drink_name,price,status,stock_number 202 FROM drink_info_table 203 JOIN drink_stock_table 204 ON drink_info_table.drink_id = drink_stock_table.drink_id;'; 205 if($result = mysqli_query($link,$sql)){ 206 $i = 0; 207 while($row = mysqli_fetch_assoc($result)){ 208 $drink_info_list[$i]['drink_id'] = htmlspecialchars($row['drink_id'],ENT_QUOTES, 'UTF-8'); 209 $drink_info_list[$i]['drink_name'] = htmlspecialchars($row['drink_name'],ENT_QUOTES, 'UTF-8'); 210 $drink_info_list[$i]['price'] = htmlspecialchars($row['price'],ENT_QUOTES, 'UTF-8'); 211 $drink_info_list[$i]['status'] = htmlspecialchars($row['status'],ENT_QUOTES, 'UTF-8'); 212 $drink_info_list[$i]['stock_number'] = htmlspecialchars($row['stock_number'],ENT_QUOTES, 'UTF-8'); 213 214 $i++; 215 216 217 } 218 219 } 220}else{ 221 $err_msg[] = 'DB接続失敗'; 222} 223
回答2件
あなたの回答
tips
プレビュー