ポンクソフト

販売管理システム - PHPとPostgreSQLの連携入門

前ページ PHPとPostgreSQLの連携入門 TOP 次ページ

目次

  1. PHPとPostgreSQLの連携入門
  2. 掲示板1
  3. 掲示板2
  4. 5Wゲーム
  5. 販売管理システム
  6. 画像アップロード掲示板
  7. ショッピングカート

販売管理システム

簡単な販売管理システムを作成します。

テーブル「商品マスタ」の作成

以下のようなテーブルを「syohin」という名前で作成してください。
列名データ型その他説明
codeserial primary key商品コード
nametext商品名
tankainteger単価
psqlを使う場合は、以下のように入力します(# はプロンプト)。
# create table syohin(code serial primary key, name text, tanka integer);

テーブル「顧客マスタ」の作成

以下のようなテーブルを「kokyaku」という名前で作成してください。
列名データ型その他説明
codeserial primary key顧客コード
nametext顧客名
jusyotext住所
psqlを使う場合は、以下のように入力します(# はプロンプト)。
# create table kokyaku(code serial primary key, name text, jusyo text);

テーブル「売上」の作成

以下のようなテーブルを「uriage」という名前で作成してください。
列名データ型その他説明
noserial primary key売上番号
kokyaku_codeinteger顧客コード
syohin_codeinteger商品コード
datedate default 'today'売上日
psqlを使う場合は、以下のように入力します(# はプロンプト)。
# 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;
合計を商品の数量×単価で求めます。
前ページ PHPとPostgreSQLの連携入門 TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0

このページに関するコメントをどうぞ

お名前:



すごく参考になりました!
ありがとうございます。
2017/03/30 09:47

名無しのリーク
香川県ルーちゃん餃子のフジフーヅはバイトにパワハラの末指切断の大けがを負わせた犯罪企業
2017/03/29 23:34

高級時計 ブランド レディース
特恵中-新作入荷!
当社の商品は絶対の自信が御座います
迅速、確実にお客様の手元にお届け致します
実物写真、付属品を完備しております。
低価格を提供すると共に、品質を絶対保証しております
ご注文を期待しています
2017/03/28 18:37

カルティエ ソリテール
ブランドコピーブランドN級品専門店
史上最も激安ブランドブランドコピー-即日 配送可,100%入荷。
当店は正規品と同等品質は品質3年保証でご注文から5 日でお届け致します。
レディースとメンズ激安通販専門店!品質と本物は同様です。
全て新品、高い品質、激安 、送料は無料です( 日本全国)すべての商品は品質2年無料保証です。
ブランドコピー時計:
2017/03/24 14:04

カリマー
解りやすくて、とてもいいサイトですね!
phpは初心者ですが、最後まで到達できるよう頑張ります!
2017/03/23 04:03


ああああ
2017/03/23 00:54

オメガ ボーイズ
★2017最高等級新しい商品大量入荷!
■在庫情報随時更新!(*^-^*)
■信用第一、良い品質、低価格は。
★歓迎光臨★送料無料(日本全国)
ご注文を待ちしております
よろしくお願いいたします_(._.)_
2017/03/22 09:09


テスト
2017/03/21 14:02

ゆうた
かりんがすき
2017/03/17 14:36

saraebo
別windowsとして実装することなく、actionのphpで、コマンドとするデータベース等の更新で、その結果をクライアントに返さない(homeページの元画面は変わらない。)とする事はできるのでしょうか?
2017/03/17 12:09

残りを読む »