[PHP-users 634] データ検索結果の分割表示画面について
Miki Yamaguchi
php-users@php.gr.jp
Mon, 9 Jul 2001 01:03:54 +0900
はじめまして、山口です。
早々の質問で恐縮です。
ソフト工房さん(http://www.shonan.ne.jp/~nkon/index.html)
の郵便番号簿データ検索フォームを私なりにアレンジさせていただいて、
検索フォームを試作してみました。
検索結果を表示してみたところ検索は出来るのですが、
同じデータがページの表示件数分列挙されてしまいます。
アレンジの仕方を間違えているに違いないと思いますが、解りません。
どなたか、お気付きの点があればご教授いただけると助かります。
●環境
OS:LINUX(SlackWare)+Apache+PostgreSQL7.02+PHP4
●試作中フォームアドレス:http://dataweb.yi-web.ne.jp/shop_kensaku.htm
※データの少ない地域もありますので、地域:関東で検索ボタンを押していただくと
解りやすいと思います。
●ソース(表示部分だけと思いましたが全部載せました。長くてすみません。)
-----------------------------------------------------------
<script language=PHP>
// SUBMIT ボタン名称で、(1)最初の呼出 (2)次頁 (3)前頁 の区分をする。
if (isset($submit_query)) header( "Location:./shop_kensaku.htm");
elseif (isset($submit_next)) $Newoffset = $Offset + $Plines;
elseif (isset($submit_pred)) $Newoffset = $Offset - $Plines;
else $Newoffset = $Offset = 0;
// HTML送り出し
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang="ja">
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=EUC-JP">
<TITLE> ショップデータ検索結果 </TITLE>
</HEAD>
<BODY bgcolor="#F0F0FF" text="#330000">
<P>
';
// トップタイトル表示
$page = $Newoffset / $Plines + 1; // 行番号から頁番号算出
echo "<H3 align=center>ショップデータ検索結果[ ".$page. " 頁 ]</H3>\n";
//………………………【1】DB接続 ……………………………
$dbcon = pg_connect ( "dbname=dataweb user=dataweb"); // DB接続
if (!$dbcon) { die( "<hr>pg_connect 失敗<hr>"); } // die:エラー表示して終了
//………………………【2】SQL文実行 ………………………
$cond= "";
$and= "";
if ($shop_area){ // 地域入力あり
$cond=$cond.$and. " area = '$shop_area'";
$and= " AND ";
}
if($shop_add){ // 所在地入力あり
$cond=$cond.$and. " db_add LIKE '%$shop_add%'";
$and= " AND ";
}
if($shop_name){ // 名称だけ入力されている場合
$cond=$cond.$and. " name LIKE '%$shop_name%'";
$and= " AND ";
}
//【表示順(ソート順)】
$sqlorder= " ORDER BY number DESC ";
$sqlstmt = "SELECT name, area, web_1, web_rink1, web_2, web_rink2, db_add,
url, info
FROM shop
WHERE ".$cond.$sqlorder. "
LIMIT ".($Plines+1). " OFFSET ".$Newoffset. ";";
//(注)頁表示行数より1行余分に読取って、次頁の有無判定に使用。
echo "検索結果表示中<br>\n"; flush();
$execid = pg_exec ($dbcon, $sqlstmt);
if (!$execid) { die( "pg_exec 失敗<hr>"); }
$fldnum = pg_numfields($execid); // SELECT された列(項目)の数
$numrow = pg_numrows($execid); // SELECT された行数
// SUBMITボタン表示
$but1 = $but2 = $but3 = "";
echo "<FORM ACTION='./shop_kensaku.php' METHOD=GET>";
$but1 = "<input type=submit name=submit_query value=' 検索入力に戻る '>";
if ($Newoffset >= $Plines){
$but2 = "<input type=submit name=submit_pred value=' 前 頁 '>";
}
if ($numrow > $Plines){
$but3 = "<input type=submit name=submit_next value=' 次 頁 '>";
}
echo "
<table border=0><tr>
<td width=200>$but1</td><td width=150>$but2</td><td
width=100>$but3<br></td>
</tr></table>
";
// 次頁・前頁の再検索用に、必要な変数を HIDDEN TAG で送る。
echo "
<input type=hidden name=Offset value='".$Newoffset. "'>
<input type=hidden name=Plines value='".$Plines. "'>
<INPUT TYPE=hidden NAME=shop_area VALUE='".$shop_area. "'>
<INPUT TYPE=hidden NAME=shop_add VALUE='".$shop_add. "'>
<INPUT TYPE=hidden NAME=shop_name VALUE='".$shop_name. "'>
<INPUT TYPE=hidden NAME=dummy VALUE='文字code誤判定防止(京眉)'>
</FORM>
";
// 検索結果 0 件の場合 (注) SUBMIT ボタン表示後にエラー表示
if ($numrow == 0 && $Newoffset == 0){
echo "<font size=4 color=red>\n";
echo "次の条件のデーターはありません。<br>\n";
echo "地 域=[".$shop_area. "]<br>\n";
echo "所在地=[".$shop_add. "]<br>\n";
echo "名 称=[".$shop_name. "]<br>\n";
echo "<hr>";
echo "</font>\n";
pg_close($dbcon);
exit;
}
//------------------ 検索結果を表示 ------------------------
// 1頁分のデーターをDBから読取って表示
if ($numrow > $Plines) $numrow = $Plines;
for($rowno=0; $rowno < $numrow; ++$rowno){
echo "名称:" . "<a href='" . pg_result( $execid, $i, 7 ) . "'>" .
pg_result( $execid, $i, 0 ) . "</a>\n" . "<br>";
echo "地域:" . pg_result( $execid, $i, 1 ) . " " . "<a href='" .
pg_result( $execid, $i, 3 ) . "'>" . pg_result( $execid, $i, 2 ) . "</a>\n"
. " " . "<a href='" . pg_result( $execid, $i, 5 ) . "'>" . pg_result(
$execid, $i, 4 ) . "</a>\n" . "<br>";
echo "住所:" . pg_result( $execid, $i, 6 ) . "<br>";
echo "紹介文:" . pg_result( $execid, $i, 8 ) . "<br>";
echo "<hr>";
}
//………………………【3】DB接続終了 ………………………
pg_close($dbcon);
//━━━━━━━━━━━━━ END PHP ━━━━━━━━━━━━━
</script>
</P>
</BODY>
</HTML>