[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 メーリングリストの案内