ポンクソフト

5Wゲーム - PHPとPostgreSQLの連携入門

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

目次

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

5Wゲーム

ちょっと小休憩、ということで5Wゲームを作ります。5Wゲームとは「いつ(when)」「どこで(where)」「誰が(which1)」「誰と(which2)」「何をした(what)」という文章をランダムに表示するものです。

テーブルの作成

以下のようなテーブルを「pg5w」という名前で作成してください。
列名データ型説明
acttextアクション
valtext
psqlを使う場合は、以下のように入力します(# はプロンプト)。
# create table pg5w(act text, val text);
act には動作(when, where, which1, which2, what のいずれかの文字列)が入り、val にはそれに対応する値が入ります。

プログラムの作成

以下のソースを入力してください。但し
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>5W</title>
</head>
<body>
<?php
$w = array(
  array("いつ?", "", "when", "今日"),
  array("どこで?", "で", "where", "学校"),
  array("だれが?", "が", "which1", "僕"),
  array("だれと?", "と", "which2", "君"),
  array("何をした?", "をした。", "what", "屁")
);
foreach ($w as $i) {
  print "<form method='post' action='pg5w.php'>";
  print "{$i[0]}<input type='text' size='50' name='val'>{$i[1]}";
  print "<input type='hidden' size='50' name='act' value='{$i[2]}'>";
  print " <input type='submit' value='追加'>";
  print "</form>\n";
}
$con = pg_connect("dbname=postgres user=postgres password=postgres");
if ($_POST['val']) {
  $act = pg_escape_string(htmlspecialchars($_POST['act']));
  $val = pg_escape_string(htmlspecialchars($_POST['val']));
  $rs = pg_query($con, "select * from pg5w where act='$act' and val='$val'");
  if (pg_num_rows($rs) > 0) print "その値は既に追加されています。<br><br>";
  else pg_query($con, "insert into pg5w values('$act','$val')");
}
foreach ($w as $i) {
  $rs = pg_query($con, "select val from pg5w where act='{$i[2]}'");
  $num = pg_num_rows($rs);
  if ($num == 0) $v = $i[3];
  else $v = pg_fetch_result($rs, rand(0, $num - 1), 0);
  print $v . $i[1];
}
?>
</body>
</html>
入力が終わったら「pg5w.php」というファイル名で保存、サーバにアップロードし、実行してみてください。

ソースの解説

$w = array(
  array("いつ?", "", "when", "今日"),
  array("どこで?", "で", "where", "学校"),
  array("だれが?", "が", "which1", "僕"),
  array("だれと?", "と", "which2", "君"),
  array("何をした?", "をした。", "what", "屁")
);
$w は2次元配列になっており、それぞれの要素の最初の要素がテキストフィールドに表示するラベル、2番目の要素が値に付く助詞、3番目の要素がテキストフィールドの名前・テーブルの act 列のアクション、4番目の要素が値が無いときに表示されるデフォルト値です。
foreach ($w as $i) {
  print "<form method='post' action='pg5w.php'>";
  print "{$i[0]}<input type='text' size='50' name='val'>{$i[1]}";
  print "<input type='hidden' size='50' name='act' value='{$i[2]}'>";
  print " <input type='submit' value='追加'>";
  print "</form>\n";
}
配列 $w を利用してテキストフィールドを5個表示しています。act 列に入るアクションは隠しフィールドで持っています。
if ($_POST['val']) {
  $act = pg_escape_string(htmlspecialchars($_POST['act']));
  $val = pg_escape_string(htmlspecialchars($_POST['val']));
  $rs = pg_query($con, "select * from pg5w where act='$act' and val='$val'");
  if (pg_num_rows($rs) > 0) print "その値は既に追加されています。<br><br>";
  else pg_query($con, "insert into pg5w values('$act','$val')");
}
追加ボタンが押されたとき、テーブルにレコードを追加している部分です。隠しフィールドから渡されたアクションとテキストフィールドから渡された値をインサートしますが、同じレコードが既に存在する場合はエラーを表示して追加しません。
foreach ($w as $i) {
  $rs = pg_query($con, "select val from pg5w where act='{$i[2]}'");
  $num = pg_num_rows($rs);
  if ($num == 0) $v = $i[3];
  else $v = pg_fetch_result($rs, rand(0, $num - 1), 0);
  print $v . $i[1];
}
テーブルからランダムで取得した値を元に文章を表示している部分です。まず最初に同じアクションの行を select 文で取得し、pg_num_row 関数で取得した行数を $num に格納します。行数が 0 ならば配列 $w のデフォルト値を表示し、行数が 1 以上ならその中から rand 関数でランダムに 1 行取得し val 列の値を表示しています。
前ページ PHPとPostgreSQLの連携入門 TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0

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

お名前:


wentgt
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/25 00:08

初心者
メールソフトの設定ってどうやるのですか...
gmailに送りたいのですが...
2017/01/24 21:33

enveloptf
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/24 21:23

paywinlv
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/24 18:04

anklebitcw
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/24 11:35

butterfxa
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/24 03:37

nhadeptronmr
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/23 20:39

nhadeptronlv
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/23 15:24

sinforve
すべての
calltrackingsource.com 13s.info nhadeptrongoi.com kashinvestment.com csgo-butterfly.com anklebitergaming.com
csfire.pro envelopesstore.com ginastarmusic.com mp3-teca.com csgoodstakes.com
went.black 2pay4win.com appliancerepairsnearme.com oferta-netflix.com
techitax.com csprey.com lightshadowspace.com csboom.pro
投稿者
2017/01/23 12:46

calltrackju
すべての
cbbnews24.com
csgobooms.com
csgojoybets.com
incareersjobs.com
stcmidtenn.org
thewill.in
sakirkaratas.com
apexturnkey.in
medray.in
applevalleymarket.com
b8b90.com
danhhotgay.com
cstopstake.com
nsm.org.in
vov-fc.com
csgohugepots.com
eaglesapparelshop.com
mymobileappmobiappssub2016.com
sbppl.org
gracedental.in
kehulin.com
cheappricetoyou2015.com
vamortgageloantexas.com
doitacdoanhnghiep.com
techimanage.com
elmi.co
upea.in
esncordoba.org
goal888cash.com
fullebookz.com
2winde222.com
投稿者
2017/01/23 09:37

残りを読む »