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

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

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

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

Q&A

解決済

1回答

1573閲覧

PHPで値が正常に表示されない。

Tannnnnnnnnnn

総合スコア24

PHP

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

0グッド

0クリップ

投稿2020/08/02 14:14

現在プログラミングの練習として、
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>

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

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

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

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

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

guest

回答1

0

ベストアンサー

Noticeは、宣言されていない配列の特定要素を参照したりするときに
表示されます。きちんと設定するか、issetなどで確認をしてから参照してください

投稿2020/08/02 15:12

yambejp

総合スコア116724

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

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

Tannnnnnnnnnn

2020/08/02 15:49

ありがとうございます。 187、188行について、issetで確認をしてもNoticeが無くならないのですが、、、
yambejp

2020/08/03 00:06

> 187、188行 はどの部分ですか?
退会済みユーザー

退会済みユーザー

2020/08/03 00:13

> Noticeは、宣言されていない配列の特定要素を参照したりするときに表示されます。 ちょっと雑すぎませんか? `Undefined ~`系は確かにそうですけど、`~ already ~`とか、ほかにもあるので。。。
yambejp

2020/08/03 00:22

te2jiさんご指摘ありがとうございます。 ぜひ、わかりやすい回答を新たにしてあげてください。 たしかに雑ではありますが必要十分な情報を質問者に返したつもりなので
退会済みユーザー

退会済みユーザー

2020/08/03 00:27

本件の~ とか付けるだけで良いかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問