[PHP-users 23271]PostgreSQL表の検索がうまくいかない( if文の使い方について)
KOYAMA HIDEKI
hill47goodtree @ ybb.ne.jp
2004年 9月 12日 (日) 22:30:03 JST
Apache,PostgreSQL,PHPでWebシステムを組んでいます。そし
てこのシステムで、『入室している人の食事内容(一般食、糖
尿病食、腎臓病食、肝臓病食など)』を管理したいのです。あ
らかじめフォームで入力して、ある人の食事予定表を作ること
はできました。
しかしこの食事予定表から『今日の食事内容』を検索するプ
ログラムがうまく動きません。検索を行う時、前のページのメ
ニューリストから『2004-9-14-夜』のように選びフォームで『
今日の食事内容』を検索するページにわたします。そしてこの
情報とあらかじめ存在するPostgreSQLのテーブル内容を比較し
て検索するものです。検索をかける時間から『switch』で『朝
、昼、夜』に分けました。『夜』を選んだ場合は期待どおりに
動きます。しかし『朝、昼』についてはいつも食事予定表の『
最終行』が表示されてしまいます。自分なりにいろいろ調べて
いじってみましたが思うようにいきません。どなたか御知恵を
お貸し下さい。
PostgreSQLのテーブル(食事予定表)はこんな感じです。
発行区分 開始 終了 番号 名前 所属 部屋番号 食事箋
新規 2004-9-13-昼 1111 山田 本館 102 常食
変更 2004-9-14-朝 1111 山田 西館 211 糖尿病食
変更 2004-9-16-夜 1111 山田 新館 525 腎臓病食
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=EUC-JP">
<title>その日の食事箋</title>
</head>
<body>
<h3>予約表(PostgreSQL)その日の食事箋</h3>
<?php
$dbname = "test8";
$user = "postgres";
$pass = "**********";
// 表示文字コード
$disp_enc = "EUC-JP";
// データベース文字コード
$db_enc = "EUC-JP";
// データの文字コードを変換する関数
function cnv_dbstring($string, $enc) {
// 文字コードを変換する
$det_enc = mb_detect_encoding($string, "EUC-JP,
SJIS");
if ($det_enc and $det_enc != $enc) {
return mb_convert_encoding($string, $enc,
$det_enc);
}
else {
return $string;
}
}
// データをSQL用に変換
function cnv_sqlstr($string) {
if (!get_magic_quotes_gpc()) {
return addslashes($string);
}
else {
return $string;
}
}
// データベースに接続する
$conn = pg_connect("dbname=$dbname");
// フォームからデータを取得する
if (count($_POST) > 0) {
$sY = $_POST["syokuji_kara_1"]; //西暦年を取得
$sM = $_POST["syokuji_kara_2"]; //月を取得
$sD = $_POST["syokuji_kara_3"]; //日を取得
$sT = $_POST["syokuji_kara_4"]; //朝、昼、夕のいずれか
を取得
$ts0 = mktime(0, 0, 0, $sM, $sD, $sY);
${s_pn} = 1111; //その人の番号
// データを取り出す
$sql = "SELECT id, hakkou_kubunn, kara, made, pn, nam,
syozoku, heya_banngou, syokujisenn FROM syokuji_t_${s_pn}
ORDER BY id";
$res = pg_query($conn, $sql) or die("データ抽出エラー");
// 取り出したデータの表示(項目欄)
echo "<table border=\"1\">";
echo "<tr>";
echo "<td>番号</td>";
echo "<td>名前</td>";
echo "<td>所属</td>";
echo "<td>部屋番号</td>";
echo "<td>食事内容</td>";echo "</tr>";
switch( $sT ){
case "夜":
for ($i = pg_num_rows($res)-1; $i >= 0; $i--) {
$row = pg_fetch_array($res, $i, PGSQL_ASSOC);
$kara1 = cnv_dbstring($row["kara"], $disp_enc);
// $kara1="2004-9-12-夜"のようなデータを mktime 化する
$con1 = strpos($kara1, '-');
$con2 = strpos($kara1, '-', $con1+1);
$con3 = strpos($kara1, '-', $con2+1);
$nen = substr($kara1, 0, $con1);
$tsuki = substr($kara1, $con1+1, $con2 - $con1 - 1);
$hi = substr($kara1, $con2+1, $con3 - $con2 - 1);
$ts1 = mktime(0, 0, 0, $tsuki, $hi, $nen);
if ($ts1 <= $ts0) {
echo "<tr>";
echo "<td>".$row["pn"]."</td>";
echo "<td>".cnv_dbstring($row["nam"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syozoku"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["heya_banngou"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syokujisenn"],
$disp_enc)."</td>";
echo "</tr>";
break;
}
}
break;
case "昼":
for ($i = pg_num_rows($res)-1; $i >= 0; $i--) {
$row = pg_fetch_array($res, $i, PGSQL_ASSOC);
$kara1 = cnv_dbstring($row["kara"], $disp_enc);
// $kara1="2004-9-12-夜"のようなデータを mktime 化する
$con1 = strpos($kara1, '-');
$con2 = strpos($kara1, '-', $con1+1);
$con3 = strpos($kara1, '-', $con2+1);
$nen = substr($kara1, 0, $con1);
$tsuki = substr($kara1, $con1+1, $con2 - $con1 - 1);
$hi = substr($kara1, $con2+1, $con3 - $con2 - 1);
$T1 = substr($kara1, $con3+1); // 朝、昼、夜
$ts1 = mktime(0, 0, 0, $tsuki, $hi, $nen);
if ($ts1 < $ts0) {
echo "<tr>";
echo "<td>".$row["pn"]."</td>";
echo "<td>".cnv_dbstring($row["nam"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syozoku"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["heya_banngou"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syokujisenn"],
$disp_enc)."</td>";
echo "</tr>";
break;
}
if ($ts1 = $ts0) {
if ($T1 == "朝" or $T1 == "昼") {
echo "<tr>";
echo "<td>".$row["pn"]."</td>";
echo "<td>".cnv_dbstring($row["nam"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syozoku"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["heya_banngou"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syokujisenn"],
$disp_enc)."</td>";
echo "</tr>";
break;
}
}
}
break;
case "朝":
for ($i = pg_num_rows($res)-1; $i >= 0; $i--) {
$row = pg_fetch_array($res, $i, PGSQL_ASSOC);
$kara1 = cnv_dbstring($row["kara"], $disp_enc);
// $kara1="2004-9-12-夜"のようなデータを mktime 化する
$con1 = strpos($kara1, '-');
$con2 = strpos($kara1, '-', $con1+1);
$con3 = strpos($kara1, '-', $con2+1);
$nen = substr($kara1, 0, $con1);
$tsuki = substr($kara1, $con1+1, $con2 - $con1 - 1);
$hi = substr($kara1, $con2+1, $con3 - $con2 - 1);
$T1 = substr($kara1, $con3+1); // 朝、昼、夜
$ts1 = mktime(0, 0, 0, $tsuki, $hi, $nen);
if ($ts1 < $ts0) {
echo "<tr>";
echo "<td>".$row["pn"]."</td>";
echo "<td>".cnv_dbstring($row["nam"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syozoku"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["heya_banngou"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syokujisenn"],
$disp_enc)."</td>";
echo "</tr>";
break;
}
if ($ts1 = $ts0) {
if ($T1 == "朝") {
echo "<tr>";
echo "<td>".$row["pn"]."</td>";
echo "<td>".cnv_dbstring($row["nam"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syozoku"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["heya_banngou"],
$disp_enc)."</td>";
echo "<td>".cnv_dbstring($row["syokujisenn"],
$disp_enc)."</td>";
echo "</tr>";
break;
}
}
}
break;
}
}
// 接続を解除する
pg_close($conn);
?>
</body>
</html>
PHP-users メーリングリストの案内