[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>