現在プログラミングの練習として、
PHPで在庫管理システムを作成しております。
2点詰まっている部分があり、ご質問をさせて下さい。
■質問
①Noticeが画面上に出力される(添付画像)
商品登録の「商品名」と「値段」を記入し、「送信」ボタン押下時に、
添付画像のNoticeメッセージが表示されます。
こちらの解消方法をお聞きしたいです。
②商品登録した情報が、商品一覧画面に表示されない。
商品登録を行った後に、「商品名」「値段」に登録した値が出力されません。
こちらも原因をお聞きしたいです。
■行ったこと
エラーメッセージでググり、調査を行いましたが、具体的にソースのどの部分を直すべきが分かりませんでした。
◎index.php
<?php #---基本設定--- #データベース情報 $testuser = "testuser"; $testpass = "testpass"; $host = "localhost"; $database = "shop"; #テンプレートディレクトリ $tmpl_dir = "./tmpl"; #ページの表示 parse_form(); try{ $db =new PDO("mysql:host={$host}; dbname={$database}; charset=utf8", $testuser, $testpass); $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if($in["state"] == "insert"){ item_insert();} else if($in["state"] == "update"){ item_update(); } else if($in["state"] == "delete"){ item_delete(); } item_serch(); }catch (PDOException $e){ die("PDO Error:" . $e->getMessage()); } #フォームの受取 function parse_form(){ global $in; $param = array(); if(isset($_GET) && is_array($_GET)){ $param += $_GET; } if(isset($_POST) && is_array($_POST)){ $param += $_POST; } foreach($param as $key => $val){ #2次元配列から値を取り出す if(is_array($val)){ $val = array_shift($val); } #文字コードの処理 $enc = mb_detect_encoding($val); $val = mb_convert_encoding($val, "UTF-8", $enc); #特殊文字の処理 $val = htmlentities($val,ENT_QUOTES, "UTF-8"); $in[$key] = $val; } return $in; } #----商品登録---- function item_insert(){ global $in; global $db; global $tmpl_dir; #エラーチェック $error_notes=""; if($in["item_name"] == ""){ $error_notes.="・商品名が未入力です。<br>"; } if($in["item_name"] == ""){ $error_notes.="値段が未入力です。<br>"; } #エラーの場合 if($error_notes != ""){ error($error_notes); } #プリペアードステートメントを準備 $stmt = $db->prepare( 'INSERT INTO item(item_name, item_price, item_flag) VALUE(:item_name, :item_price, 1)'); #変数を束縛する $stmt->bindParam(":item_name", $item_name); $stmt->bindParam(":item_price", $item_price); #変数に値を設定し、SQLを実行 $item_name = $in["item_name"]; $item_price = $in["item_price"]; $stmt->execute(); } #---商品編集--- function item_update(){ global $in; global $db; global $tmpl_dir; #エラーチェック $error_notes=""; if($in["item_id"] == ""){ $error_notes.="・編集する商品を選択してください。<br>"; } if($in["item_name"] == ""){ $error_notes.="商品名が未入力です。<br>"; } if($in["item_price"] == ""){ $error_notes.="値段が未入力です。<br>"; } #エラーの場合 if($error_notes != ""){ error($error_notes); } #プリペアードステートメントを準備 $stmt = $db->prepare( 'UPDATE item SET item_name = :item_name, item_price = :item_price where item_id = :item_id'); #変数を束縛する $stmt->bindParam(":item_id", $item_id); $stmt->bindParam(":item_name", $item_name); $stmt->bindParam(":item_price", $item_price); #変数に値を設定し、SQLを実行 $item_id = $in["item_id"]; $item_name = $in["item_name"]; $item_price = $in["item_price"]; $stmt->execute(); } #---商品削除---- function item_delete(){ global $in; global $db; global $tmpl_dir; #エラーチェック $error_notes=""; if($in["item_id"] == ""){ $error_notes.="・編集する商品を選択してください。<br>"; } if($in["item_name"] == ""){ $error_notes.="商品名が未入力です。<br>"; } if($in["item_price"] == ""){ $error_notes.="値段が未入力です。<br>"; } #エラーの場合 if($error_notes != ""){ error($error_notes); } #プリペアードステートメントを準備 $stmt = $db->prepare( 'UPDATE item SET item_flag = 0 where item_id = :item_id'); #変数を束縛する $stmt->bindParam(":item_id", $item_id); #変数に値を設定し、SQLを実行 $item_id = $in["item_id"]; $stmt->execute(); } #------商品一覧--------- function item_serch(){ global $in; global $db; global $tmpl_dir; #自身のパス $script_name = $_SERVER['SCRIPT_NAME']; #SQLを作成 $query = "SELECT * FROM item WHERE item_flag = 1"; #プリペアードステートメントを準備 $stmt = $db->prepare($query); $stmt->execute(); $item_data = ""; while($row = $stmt->fetch()){ $item_id = $row["item_id"]; $item_data .= "<tr>"; $item_data .= "<td class=\"form-left\">$item_id</td>"; $item_data .= "<td class=\"form-left\">$row[$item_name]</td>"; $item_data .= "<td class=\"form-left\">$row[$item_price]</td>"; $item_data .= "<td><a href=\"$script_name? mode=item&item_id=$item_id\">編集</a></td>"; $item_data .= "<td><a href=\"$script_name? mode=item&state=delete&item_id=$item_id\">削除</a></td>"; $item_data .= "</tr>\n"; } if($in["item_id"] != ""){ #選択した商品IDに対応する情報を取得 $stmt = $db->prepare("SELECT * FROM item WHERE item_id = :item_id"); $stmt -> bindParam(":item_id" , $item_id); $item_id = $in["item_id"]; $stmt->execute(); $row = $stmt->fetch(); $item_name = $row["item_name"]; $item_price = $row["item_price"]; #掲示板テンプレート読み込み $tmpl = page_read("item_edit"); #文字変換 $tmpl = str_replace("!item_id!" , $in["item_id"] , $tmpl); $tmpl = str_replace("!item_name!" , $item_name , $tmpl); $tmpl = str_replace("!item_price!" , $item_price , $tmpl); $tmpl = str_replace("!item_data!" , $item_data , $tmpl); } else{ #掲示板テンプレ―ト読み込み $tmpl = page_read("item"); #文字変換 $tmpl = str_replace("!item_data!" , $item_data , $tmpl); } echo $tmpl; exit; } #エラー画面 function error($errmes){ global $tmpl_dir; $msg = $errmes; #エラーテンプレート読み込み $tmpl = page_read("error"); #文字置き換え $tmpl = str_replace("!message!","$msg",$tmpl); echo $tmpl; exit; } #ページ読み取り function page_read($page){ global $tmpl_dir; #テンプレート読み込み $conf = fopen("$tmpl_dir/{$page}.tmpl", "r") or die; $size = filesize("$tmpl_dir/{$page}.tmpl"); $tmpl = fread($conf, $size); fclose($conf); return $tmpl; } #ログイン機能 function login(){ #テンプレート読み込み $tmpl = page_read("login"); echo $tmpl; exit; } #ログアウト機能 function logout(){ session_destroy(); #テンプレート読み込み $tmpl = page_read("logut"); echo $tmpl; exit; }
◎item.tmpl
<html> <head> <meta http-equiv="content-type" content="text/html"; cheraset=utf-8"> <title>在庫管理</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h2>商品登録</h2> <form method="post" action="index.php"> <table border="1"> <tr> <td>商品名</td> <td><input name="item_name" type="text" value=""></td> </tr> <tr> <td>値段</td> <td><input name="item_price" type="text" value=""></td> </tr> <tr> <td colspan="2"><input type="submit" name="sub" value="送信"></td> </tr> </table> <input type="hidden" name="mode" value="item"> <input type="hidden" name="state" value="insert"> </form> <br> <h2>商品一覧</h2> <table border="1"> <tr><th>商品ID</th><th>商品名</th><th>値段</th><th>編集</th><th>削除</th></tr> !item_data! </table> </body> </html> コード
◎item_edit.tmpl
<!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html"; cheraset=utf-8"> <title>在庫管理</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h2>商品登録(編集)</h2> <form method="post" action="index.php"> <table border="1"> <tr> <td>商品ID</td> <td>!item_id!</td> </tr> <tr> <td>商品名</td> <td><input name="item_name" type="text" value="!item_name!"></td> </tr> <tr> <td>値段</td> <td><input type="text" name="item_price" value="!item_price!"></td> </tr> <td colspan="2"><input type="submit" name="sub" value="送信"></td> </table> <input type="hidden" name="mode" value="item"> <input type="hidden" name="state" value="update"> <input type="hidden" name="item_id" value="!item_id!"> </form> <br> <h2>商品一覧</h2> <table border="1"> <tr><th>商品ID</th><th>商品名</th><th>値段</th><th>編集</th><th>削除</th></tr> !item_data! </table> </body> </html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/02 15:49
2020/08/03 00:06
退会済みユーザー
2020/08/03 00:13
2020/08/03 00:22
退会済みユーザー
2020/08/03 00:27