販売管理システム - PHPとPostgreSQLの連携入門
目次
- PHPとPostgreSQLの連携入門
- 掲示板1
- 掲示板2
- 5Wゲーム
- 販売管理システム
- 画像アップロード掲示板
- ショッピングカート
販売管理システム
簡単な販売管理システムを作成します。テーブル「商品マスタ」の作成
以下のようなテーブルを「syohin」という名前で作成してください。列名 | データ型その他 | 説明 |
---|---|---|
code | serial primary key | 商品コード |
name | text | 商品名 |
tanka | integer | 単価 |
# create table syohin(code serial primary key, name text, tanka integer);
テーブル「顧客マスタ」の作成
以下のようなテーブルを「kokyaku」という名前で作成してください。列名 | データ型その他 | 説明 |
---|---|---|
code | serial primary key | 顧客コード |
name | text | 顧客名 |
jusyo | text | 住所 |
# create table kokyaku(code serial primary key, name text, jusyo text);
テーブル「売上」の作成
以下のようなテーブルを「uriage」という名前で作成してください。列名 | データ型その他 | 説明 |
---|---|---|
no | serial primary key | 売上番号 |
kokyaku_code | integer | 顧客コード |
syohin_code | integer | 商品コード |
date | date default 'today' | 売上日 |
# create table uriage(no serial primary key, kokyaku_code integer, syohin_code integer, num integer, date date default 'today');
date は date(日付)型で、指定がなければ 'today' つまり挿入された日が自動的に入ります。メニュープログラムの作成
最初に各機能を選択するメニュー部分を作成します。以下のソースを入力してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>販売管理システム</title>
</head>
<body>
<a href="edit_syohin.php" target="_blank">商品マスタ編集</a><br><br>
<a href="edit_kokyaku.php" target="_blank">顧客マスタ編集</a><br><br>
<a href="input.php" target="_blank">売上入力</a><br><br>
<a href="ichiran.php" target="_blank">売上一覧</a><br><br>
</body>
</html>
入力が終わったら「hanbai.php」というファイル名で保存、サーバにアップロードし、動作確認してください。商品マスタ編集プログラムの作成
次に商品マスタを編集(追加・削除)するプログラムを作成します。以下のソースを入力してください。但しdbname=postgres user=postgres password=postgres
上記の部分は、テーブルを作成したDB名、ユーザ名、パスワードに変更してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>販売管理システム 商品マスタ編集</title>
</head>
<body>
<table border="1">
<tr><th>商品名</th><th>単価</th><th> </th></tr>
<?php
$con = pg_connect("dbname=postgres user=postgres password=postgres");
if ($_POST['insert']) {
$name = pg_escape_string(htmlspecialchars($_POST['name']));
$tanka = pg_escape_string(htmlspecialchars($_POST['tanka']));
pg_query($con, "insert into syohin(name,tanka) values('$name',$tanka)");
} else if ($_POST['delete']) {
$code = pg_escape_string(htmlspecialchars($_POST['code']));
pg_query($con, "delete from syohin where code=$code");
}
$rs = pg_query($con, "select * from syohin order by code");
while ($row = pg_fetch_array($rs)) {
print "<form method='post' action='edit_syohin.php'><tr>";
print "<td>{$row['name']}</td><td>{$row['tanka']}</td>";
print "<td><input type='submit' name='delete' value='削除'>";
print "<input type='hidden' name='code' value='{$row['code']}'></td>";
print "</tr></form>\n";
}
pg_close($con);
?>
<form method="post" action="edit_syohin.php">
<tr><td><input type="text" name="name"></td><td><input type="text" name="tanka"></td>
<td><input type="submit" name="insert" value="追加"></td></tr>
</form>
</table>
</body>
</html>
入力が終わったら「edit_syohin.php」というファイル名で保存、サーバにアップロードし、動作確認してください。ソースの解説
if ($_POST['insert']) {
商品名と単価を入力して追加ボタンを押したとき、この if ブロック内の処理を実行します。
pg_query($con, "insert into syohin(name,tanka) values('$name',$tanka)");
フォームで入力された商品名と単価を syohin テーブルにインサートします。
} else if ($_POST['delete']) {
商品一覧の右の削除ボタンを押したとき、この if ブロック内の処理を実行します。
$code = pg_escape_string(htmlspecialchars($_POST['code']));
code は hidden フィールドで渡されるので数値のはずですが、不正なアクセスがあった場合に備えて一応のエスケープ処理を行っています。
pg_query($con, "delete from syohin where code=$code");
渡された商品コードのレコードを削除します。
$rs = pg_query($con, "select * from syohin order by code");
商品マスタ一覧を表示するために、商品コード順でソートして select します。
print "<form method='post' action='edit_syohin.php'><tr>";
print "<td>{$row['name']}</td><td>{$row['tanka']}</td>";
print "<td><input type='submit' name='delete' value='削除'>";
print "<input type='hidden' name='code' value='{$row['code']}'></td>";
print "</tr></form>\n";
レコードを一行ずつ form タグで囲むことによって、削除ボタンが押されたときに該当する行の商品コードを hidden フィールドで渡すようにしています。顧客マスタ編集プログラムの作成
次に顧客マスタを編集(追加・削除)するプログラムを作成します。以下のソースを入力してください。但しdbname=postgres user=postgres password=postgres
上記の部分は、テーブルを作成したDB名、ユーザ名、パスワードに変更してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>販売管理システム 顧客マスタ編集</title>
</head>
<body>
<table border="1">
<tr><th>顧客名</th><th>住所</th><th> </th></tr>
<?php
$con = pg_connect("dbname=postgres user=postgres password=postgres");
if ($_POST['insert']) {
$name = pg_escape_string(htmlspecialchars($_POST['name']));
$jusyo = pg_escape_string(htmlspecialchars($_POST['jusyo']));
pg_query($con, "insert into kokyaku(name,jusyo) values('$name','$jusyo')");
} else if ($_POST['delete']) {
$code = pg_escape_string(htmlspecialchars($_POST['code']));
pg_query($con, "delete from kokyaku where code=$code");
}
$rs = pg_query($con, "select * from kokyaku order by code");
while ($row = pg_fetch_array($rs)) {
print "<form method='post' action='edit_kokyaku.php'><tr>";
print "<td>{$row['name']}</td><td>{$row['jusyo']}</td>";
print "<td><input type='submit' name='delete' value='削除'>";
print "<input type='hidden' name='code' value='{$row['code']}'></td>";
print "</tr></form>\n";
}
pg_close($con);
?>
<form method="post" action="edit_kokyaku.php">
<tr><td><input type="text" name="name"></td><td><input type="text" name="jusyo"></td>
<td><input type="submit" name="insert" value="追加"></td></tr>
</form>
</table>
</body>
</html>
入力が終わったら「edit_kokyaku.php」というファイル名で保存、サーバにアップロードし、動作確認してください。ソースの解説
商品マスタ編集とほぼ同じなので省略します。マスタ編集が複数ある場合は本来は汎用のプログラムを作った方が良いのですが、今回は単純化するため2つに分けています。売上入力プログラムの作成
次に日々の売上を入力するプログラムを作成します。以下のソースを入力してください。但しdbname=postgres user=postgres password=postgres
上記の部分は、テーブルを作成したDB名、ユーザ名、パスワードに変更してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>販売管理システム 売上入力</title>
</head>
<body>
<form method="post" action="input.php">
<?php
$con = pg_connect("dbname=postgres user=postgres password=postgres");
if ($_POST['insert']) {
$kokyaku_code = pg_escape_string(htmlspecialchars($_POST['kokyaku']));
$syohin_code = pg_escape_string(htmlspecialchars($_POST['syohin']));
$num = pg_escape_string(htmlspecialchars($_POST['num']));
pg_query($con, "insert into uriage(kokyaku_code,syohin_code,num) values($kokyaku_code,$syohin_code,$num)");
print "売上を登録しました。<br><br>\n";
}
print "顧客名:<select name='kokyaku'>\n";
$rs = pg_query($con, "select * from kokyaku order by code");
while ($row = pg_fetch_array($rs)) {
print "<option value='{$row['code']}'>{$row['name']}</option>\n";
}
print "</select><br><br>\n";
print "商品名:<select name='syohin'>\n";
$rs = pg_query($con, "select * from syohin order by code");
while ($row = pg_fetch_array($rs)) {
print "<option value='{$row['code']}'>{$row['name']}</option>\n";
}
print "</select><br><br>\n";
pg_close($con);
?>
個数:<input type="text" name="num" size="6" value="1"><br><br>
<input type="submit" name="insert" value="追加">
</form>
</body>
</html>
入力が終わったら「input.php」というファイル名で保存、サーバにアップロードし、動作確認してください。ソースの解説
if ($_POST['insert']) {
顧客名・商品名を選んで個数を入力し追加ボタンを押したとき、この if ブロックが実行されます。
$kokyaku_code = pg_escape_string(htmlspecialchars($_POST['kokyaku']));
$syohin_code = pg_escape_string(htmlspecialchars($_POST['syohin']));
$num = pg_escape_string(htmlspecialchars($_POST['num']));
顧客コード・商品コード・数量をフォームの値から取得します。
pg_query($con, "insert into uriage(kokyaku_code,syohin_code,num) values($kokyaku_code,$syohin_code,$num)");
売上テーブルに新しいレコードをインサートします。売上日には自動的に追加した日が入ります。
print "顧客名:<select name='kokyaku'>\n";
$rs = pg_query($con, "select * from kokyaku order by code");
while ($row = pg_fetch_array($rs)) {
print "<option value='{$row['code']}'>{$row['name']}</option>\n";
}
print "</select><br><br>\n";
顧客名の一覧を select タグを使いプルダウンメニューで表示しています。各行の option タグの value 値に顧客コードを入れることによって、フォームが送信されたときに顧客コードが送られるようにしています。売上一覧プログラムの作成
次に売上を一覧表示するプログラムを作成します。以下のソースを入力してください。但しdbname=postgres user=postgres password=postgres
上記の部分は、テーブルを作成したDB名、ユーザ名、パスワードに変更してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>販売管理システム 売上一覧</title>
</head>
<body>
<table border="1">
<tr><th>商品名</th><th>単価</th><th>数量</th><th>合計</th><th>顧客名</th><th>売上日</th></tr>
<?php
$con = pg_connect("dbname=postgres user=postgres password=postgres");
$rs = pg_query($con, "select * from uriage order by no desc");
while ($row = pg_fetch_array($rs)) {
$rss = pg_query($con, "select name,tanka from syohin where code={$row['syohin_code']}");
$syohin_name = pg_fetch_result($rss, 0, 'name');
$tanka = pg_fetch_result($rss, 0, 'tanka');
$rsk = pg_query($con, "select name from kokyaku where code={$row['kokyaku_code']}");
$kokyaku_name = pg_fetch_result($rsk, 0, 0);
$sum = $row['num'] * $tanka;
print "<tr><td>$syohin_name</td><td>$tanka</td><td>{$row['num']}</td>";
print "<td>$sum</td><td>$kokyaku_name</td><td>{$row['date']}</td></tr>\n";
}
pg_close($con);
?>
</table>
</body>
</html>
入力が終わったら「ichiran.php」というファイル名で保存、サーバにアップロードし、動作確認してください。ソースの解説
$rs = pg_query($con, "select * from uriage order by no desc");
売上レコードを no の逆順、つまり新しい順に select します。
$rss = pg_query($con, "select name,tanka from syohin where code={$row['syohin_code']}");
$syohin_name = pg_fetch_result($rss, 0, 'name');
$tanka = pg_fetch_result($rss, 0, 'tanka');
商品名・単価を表示するために、売上レコードの商品コードをキーとして商品マスタより各値を取得します。pg_fetch_result は select で指定した表の特定の行(2番目の引数で指定)の特定の列(3番目の引数で指定)を取得するときに使われます。
$rsk = pg_query($con, "select name from kokyaku where code={$row['kokyaku_code']}");
$kokyaku_name = pg_fetch_result($rsk, 0, 0);
同じく、顧客コードをキーとして顧客名を取得します。
$sum = $row['num'] * $tanka;
合計を商品の数量×単価で求めます。