前回、商品新規追加画面を作成しましたが、
動作確認を連続で行うため、[goods_list.php]
を簡易的に作成しました。
これは、商品一覧を表示するファイルです。
まず初めに先ほどの商品一覧を修正します。
商品一覧
ファイル名:goods_list.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品一覧</title>
<style type="text/css">
<!--
table {margin: 10px;padding: 10px;}
table tr:nth-child(even) {background: cornsilk;}
table tr:nth-child(odd) {background: wheat;}
table tr th,td {border-bottom: 1px solid tan; padding: 2px 5px; text-align: center;}
table .right{text-align: right;}
.btn{background:lightsteelblue;border-radius: 10px;border: 3px solid darkslategray;padding: 6px 10px; margin-left: 120px;}
-->
</style>
</head>
<body>
<main>
<section>
<?php
try
{
$dsn='mysql:dbname=fshop;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SET NAMES utf8');
$sql='SELECT id,name,price FROM goods';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$dbh=null;
print '<h3>商品一覧</h3>';
print '<table><tr>';
print '<td>商品ID</td><td>商品名</td><td>価格</td></tr>';
while(true)
{
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false){break;}
$id=$rec['id'];
$name=$rec['name'];
$price=$rec['price'];
print '<tr><td class="right">'.$id.'</td>';
print '<td>'.$name.'</td>';
print '<td class="right">'.number_format($price).'</td>';
}
print '</tr></table>';
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
?>
<button class="btn" onclick="location.href='goods_ctl.php'">商品管理へ</button>
</section>
</main>
</body>
</html>
<表示例>

6~15行目にCSS(スタイルシート)を書きました。
CSSの書き方は、HTMLの head 内に、
<style></style>として書き
CSSの前後には、[<!–][–>]を書きます。
例:<style> <!– ここにCSSを記述 –> </style>
26~34行目はデータベース接続です。
36行目でデータベース切断しています。
SQLはSELECT文を使って goods テーブルのid,name,priceを
読み込んでいます。
42行目は、while文(ループ命令)です。
書式例:while(条件式){処理}
while文は、条件式の値が真(true)である間、
処理を繰り返すということです。
この42行目は while(true) と書かれてありますが、
これは無限ループを意味します。
無限ループつまり無限に処理を実行し続けるという
ことですなのですが、break で強制的にループを
抜けています。
ここでは、45行目に $rec == faise つまり、
$rec の値が空になったら、処理を終えます。
51行目にnumber_format関数があります。
書式例:number_format(数値)
これは数値を3桁のカンマ区切りにする関数です。
ここでは、$price を価格がわかりやすいように
千円単位でカンマ区切りしています。
63行目ではボタンを作成するbuttonタグを使っています。
onclick属性はボタンをクリックしたときの処理を表します。
location.href は任意のページへの移動を表します。
ここでは、goods_ctl.php に移動するということです。
それから次に、商品の追加、修正、削除等をする場合、
トップページが必要です。
商品管理のトップページ
この商品一覧を使用して商品管理できる
とは思いますが、今回は別に
商品管理のトップページを作成します。
ファイル名:goods_ctl.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品管理</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
<!--
.top{background:tan;text-align: center;border: 3px solid saddlebrown;padding: 10px 20px;margin: 20px auto; display: inline-block;}
.main{text-align: center;}
.mainmenu{margin: 0 auto;}
.mainmenu ul{list-style: none;}
.mainmenu ul li{margin: 5px 50px 5px 10px;padding: 5px 10px;}
.mainmenu button{background:palegoldenrod;border-radius: 6px;border: 2px solid saddlebrown;padding: 5px 10px; width: 140px; font-weight: bold;}
-->
</style>
</head>
<body>
<main class="main">
<h3 class="top">商 品 管 理</h3>
<section class="mainmenu">
<ul>
<li><button onclick="location.href='goods_list.php'">商 品 一 覧</button></li>
<li><button onclick="location.href='goods_add.php'">商 品 追 加</button></li>
<li><button onclick="location.href='goods_mod.php'">商 品 修 正</button></li>
<li><button onclick="location.href='goods_del.php'">商 品 削 除</button></li>
</ul>
</section>
</main>
</body>
</html>
<表示例>

24~27行目ではbuttonタグを使ってページ移動させています。
商品修正
次に、商品修正を作成します。
ファイル名:goods_mod.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品修正</title>
<style type="text/css">
<!--
table {margin: 10px;padding: 10px;}
table tr:nth-child(even) {background: cornsilk;}
table tr:nth-child(odd) {background: wheat;}
table tr th,td {border-bottom: 1px solid tan; padding: 2px 5px; text-align: center;}
table .right{text-align: right;}
.btn{background:lightsteelblue;border-radius: 10px;border: 3px solid darkslategray;padding: 6px 10px; margin-left: 170px;}
-->
</style>
</head>
<body>
<main>
<section>
<?php
try
{
$dsn='mysql:dbname=fshop;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SET NAMES utf8');
$sql='SELECT id,name,price FROM goods';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$dbh=null;
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
print '<h3>商品修正</h3>';
print '修正する商品を選択してください。<br>';
print '<table><tr>';
print '<td>選択</td><td>商品ID</td><td>商品名</td><td>価格</td></tr>';
while(true)
{
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false){break;}
$id=$rec['id'];
$name=$rec['name'];
$price=$rec['price'];
print '<tr><td>';
print '<form method="post" action="goods_mod_chk.php">';
print '<input type="submit" value="選択"></td>';
print '<td class="right"><input type="hidden" name="id" value="'.$id.'">'.$id.'</td>';
print '<td><input type="hidden" name="name" value="'.$name.'">'.$name.'</td>';
print '<td class="right"><input type="hidden" name="price" value="'.$price.'">'.number_format($price).'</form></td>';
}
print '</tr></table>';
?>
<button class="btn" onclick="location.href='goods_ctl.php'">商品管理へ</button>
</section>
</main>
</body>
</html>
<表示例>

一覧から、修正する商品を選択します。
26~36行目はデータベース接続切断です。
61行目 inputタグで変数($name)を[goods_mod_chk.php]へ
渡しています。
表示させないように type=”hidden” で隠し、
value内に変数を書いています。
ここではPHPですが、
print文の表示は、シングルクォーテーション(‘)で囲い
変数をドット(.)で繋ぎます。
例:'<input value=”‘.$name.'”>’
HTMLだったら、<?php と ?> で print文で表示させます。
例:value=”<?php print $name ?>”
商品修正選択
選択した修正する商品を修正する処理です。
ファイル名:goods_mod_chk.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品修正</title>
<style type="text/css">
<!--
form {background: lightcyan; margin:10px; padding:10px; border:6px solid royalblue; display: inline-block;}
input {margin:6px;}
.btn{background:lightsteelblue;border-radius: 10px;border: 3px solid royalblue;padding: 6px 10px; margin-left: 170px;}
-->
</style>
</head>
<body>
<main>
<section>
<?php
$id=$_POST['id'];
$name=$_POST['name'];
$price=$_POST['price'];
$id=htmlspecialchars($id);
$name=htmlspecialchars($name);
$price=htmlspecialchars($price);
?>
<h3>商品修正</h3>
修正しましたら[修正する]をクリックしてください。<br><br>
<form method="post" action="goods_mod_end.php">
<h3>商品修正</h3>
商品名:<input type="text" name="name" value="<?php print $name ?>"><br>
価 格:<input type="text" name="price" value="<?php print $price ?>"><br>
<input type="hidden" name="id" value="<?php print $id ?>">
<input type="submit" value="修正する" style="margin:10px 0 10px 40%;">
</form>
<br>
<button class="btn" onclick="location.href='goods_ctl.php'">商品管理へ</button>
</section>
</main>
</body>
</html>
<表示例>

19~21行目で[goods_mod.php]から渡されたデータを
受け取り、23~25行目でサニタイズ処理をしています。
32行目 inputタグに変数($name)を表示させ
編集可能な状態にしています。
このvalue内の変数の書き方は、
ここではHTMLですが、<?php と ?> で囲い
print文で表示させます。
例:value=”<?php print $name ?>”
PHPだったら、print文表示をシングルクォーテーション(‘)で囲い
変数をドット(.)で繋ぎます。
例:'<input value=”‘.$name.'”>’
商品修正完了
商品修正を完了させます。
ファイル名:goods_mod_end.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品修正完了</title>
<style type="text/css">
<!--
.btn{background:lightsteelblue;border-radius: 10px;border: 3px solid darkslategray;padding: 6px 10px;}
-->
</style>
</head>
<body>
<main>
<section>
<?php
$id=$_POST['id'];
$name=$_POST['name'];
$price=$_POST['price'];
$id=htmlspecialchars($id);
$name=htmlspecialchars($name);
$price=htmlspecialchars($price);
try
{
$dsn='mysql:dbname=fshop;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SET NAMES utf8');
$sql='UPDATE goods SET id=?,name=?,price=? WHERE id=?';
$stmt=$dbh->prepare($sql);
$data[]=$id;
$data[]=$name;
$data[]=$price;
$data[]=$id;
$stmt->execute($data);
$dbh=null;
print '商品名:'.$name.' 価格:'.$price.'<br>';
print ' 修正しました。<br>';
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
?>
<br>
<button class="btn" onclick="location.href='goods_ctl.php'">商品管理へ</button>
</section>
</main>
</body>
</html>
29行目からデータベース接続しています。
35行目のSQL文はUPDATE文を使っています。
データベース上にあるデータを更新します。
書式例:UPDATE テーブル名 SET カラム名1=値1,カラム名2=値2 WHERE 条件
以上で商品一覧の修正と商品修正を作成しました。
次回は、商品削除を作ります。
コメント