[PHP-users 34584] Re: 検索結果の 次へ(Next)、前へ(Previous)ができず困っています。

una naoki @ fr.catv.ne.jp
2009年 5月 16日 (土) 12:07:51 JST


おはようございます。

$_POSTでデータが引数が渡せているようですね。
 if(isset($_POST['page']))            //ページ番号がURIに含まれていれば
{
  $page = $_POST['page'];            //ページ番号の取得(初期設定を上書き)
}

<a href="/d_free/Process_10-12_search_card_ctl.php?page=1">次へ</a>
<a href="/d_free/Process_10-12_search_card_ctl.php?page=1">最終</a>

次へを押したときに何も表示されないのはパラメーターにcard_level の情報が入っ
ていないからだと思います。
この部分にcard_levelの値を入れれば表示されるかと思います。

例 
<a href="<?php printf("%s?page=%d", $current, min($maxPage,  $page+1))
	↓
<a href="<?php printf("%s?page=%d&card_level=%s", $current, min($maxPage,
$page+1),$card_level)

-----Original Message-----
From: php-users-bounces @ php.gr.jp [mailto:php-users-bounces @ php.gr.jp] On
Behalf Of 有限会社ジュウイチ
Sent: Saturday, May 16, 2009 12:07 AM
To: PHP-users ML
Subject: [PHP-users 34580] Re: 検索結果の 次へ(Next)、前へ(Previous)ができず
困っています。


投稿した マツムラです。

高橋 様

いろいろとお手間をお掛けして申し訳ありません。



下記の行を " ORDER BY id ASC "を取って

 $query = sprintf("SELECT * from dive_free_tbl_ where card_level = '%s'
ORDER BY id ASC", $card_level);

に変更したところ、
$query      = sprintf("SELECT * from dive_free_tbl_ where card_level = '%s'
", $card_level); 

検索結果の表示をして、ブラウザのソースを見たところ、下記のようになっていまし
た。
上記のの様に、CODEを変更して検索した最初のページのソースです。


<a href="/d_free/Process_10-12_search_card_ctl.php?page=0">先頭</a>
<a href="/d_free/Process_10-12_search_card_ctl.php?page=0">戻る</a>
<a href="/d_free/Process_10-12_search_card_ctl.php?page=1">次へ</a>
<a href="/d_free/Process_10-12_search_card_ctl.php?page=1">最終</a>


※/d_free/Process_10-12_search_card_ctl.php はFile名です。

----------------------------------------------------------------------------
--

if(isset($_REQUEST['page']))            //ページ番号がURIに含まれていれば
{
  $page = $_REQUEST['page'];            //ページ番号の取得(初期設定を上書
き)
}

----------------------------------------------------

if(isset($_POST['page']))            //ページ番号がURIに含まれていれば
{
  $page = $_POST['page'];            //ページ番号の取得(初期設定を上書き)
}


※$_GET を上記の様に変更しましたが、結果は同じでした。


php.iniを下記の様になっている事を確認して、ApacheとMySQLの再起動をして確認
しましたが、結果は同じでした。
 
register_globals = On
register_long_arrays = On


お時間のあるときにでも、ご教授お願いします。

本当に、お手数お掛けして申し訳ありませんが、
よろしくお願いいたします。


以上








On Fri, 15 May 2009 23:23:14 +0900
"una" <naoki @ fr.catv.ne.jp> wrote:

> こんばんわ
>  
> 次へを押したときに $_GET['page'] の中にデータは入っていますか?
> 
> もし入っていなければご使用のサーバで$_GETが使用できか調べてみてはいかがで
> しょうか?
> 
> $_GETが同じような機能の関数は$_POST、$_REQUESTがありますので試してみてくだ
さ
> い。
> 
> -----Original Message-----
> From: php-users-bounces @ php.gr.jp [mailto:php-users-bounces @ php.gr.jp] 
> On Behalf Of 有限会社ジュウイチ
> Sent: Friday, May 15, 2009 10:38 PM
> To: PHP-users ML
> Subject: [PHP-users 34578] Re: 検索結果の 次へ(Next)、前へ(Previous)ができ
ず
> 困っています。
> 
> 
> 投稿した マツムラです。
> 
> 高橋 様 ご教授ありがとう御座います。
> 
> 本を5冊以上買って、色々と読んでいるのですが、検索結果の 「前へ  次へ」に
> 関して、書いてある本が無く困っていました。
> ----------------------------------------------------------------------
> ---
> 詳細のCODEを作成頂きありがとう御座います。
> 
> 詳しいデータベースの構造は、高橋様の推測どおりです。
> 
> 
> 早速、作っていただいたCODEを使ってみたところ、
> 
> Unknown column 'id' in 'order clause'  というエラーが出てしまいました。
> 
> 
> そこで、下記の行を " ORDER BY id ASC "を取って
> 
>  $query = sprintf("SELECT * from dive_free_tbl_ where card_level = '%s'
> ORDER BY id ASC", $card_level);
> 
> に変更したところ、
> $query      = sprintf("SELECT * from dive_free_tbl_ where card_level =
'%s'
> ", $card_level);
> 
> 検索結果の表示はするのですが、" 先頭 戻る 次へ 最終 "が動作してくれませ
ん。
> 
> 
> ----------------------------------------------------------------------
> ---
> ※こんなにお手数をお掛けしていて、色々と申し訳ありませんが、
> ご教授いただけないでしょうか?
> 
> ----------------------------------------------------------------------
> ---
> 
> >$card_level = $_REQUEST['card_level'];
> >
> >は、ページングには何の関係もありません。ただの抽出条件ですよね?
> >フォームか何かで渡しているのであれば、$_POSTでも取得できます。
> ----------------------------------------------------------------------
> ---
> 言われるとおり、フォームで検索内容を渡しているだけです。
> $_POSTでも取得できるようですね。何故、$_REQUESTにしていたのかも覚えていま
せ
> ん。
> とにかく、スキルが低く申し訳ありません。出きるだけ勉強いたします。
> 
> 
> PS.....
> 私のスキルが低すぎて、丸投げのような形になってしまっていますが、毎日数時間
> 自分なりに、色々なサンプルコードを導入してテストをしていたのですが、全くう
> まく動作しない状態でした。
> 
> 今までは、ホスティングではなく自前のインターネットサーバにて、
> FileMakerServerAdvanced + IIS + PHP +FX.PHP にて色々と運営していまし
た。
> この時に使っていたCODEを変更して、どうにかできるかと思っていたのですが、
> なかなか、うまく行かず困り果てていました。
> 
> 今までの詳細を書いてても、泣き言をダラダラ書いているようになってしまっても
> 何かと思い、何も書きませんでした。
> 
> 本当にお手間をお掛けして申し訳ありませんが、よろしくお願いいたします。
> 
> 
> 以上
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> On Fri, 15 May 2009 21:05:30 +0900
> 高橋政利 <takahashi @ hoshino-dk.co.jp> wrote:
> 
> > 高橋です。
> > 
> > 丸投げっぽい気もしますが、私もこのメーリングリストにお世話になってますの
> > で、ご参考になれば・・・・・。
> > ページングはPHPとMySQLの組み合わせですので、MySQLとPHPの両スキルが必要で
> > す。頑張って下さいね。本を5冊もお持ちであれば、何とかなりますよ。詳しい
> > ことは、お手持ちの本を熟読して下さい。
> > 
> > データベースですが、詳しいデータベースの構造がよく分かりませんので、推測
> > が入っています。ご了承下さい。一応、
> > 
> > CREATE TABLE `dive_free_db_`.`dive_free_tbl_` ( `id` INT NOT NULL 
> > AUTO_INCREMENT PRIMARY KEY , `time_stamp` TIMESTAMP NOT NULL , 
> > `card_level` TEXT NOT NULL , `tank_number` TEXT NOT NULL , 
> > `diving_point` TEXT NOT NULL , `diver_age` INT NOT NULL , 
> > `diver_sex` TEXT NOT NULL
> > ) ENGINE = MYISAM;
> > 
> > と仮定しています。以下コードです。
> > 
> > 
> > <?
> > /*
> >  * ページングサンプル
> >  */
> > 
> > //変数取得
> > $card_level = $_REQUEST['card_level'];
> > //接続情報
> > $DBSERVER   = "localhost";
> > $DBUSER     = "root";
> > $DBPASSWORD = "";
> > $DBNAME     = "dive_free_db_";
> > //ページ情報
> > $current = $_SERVER["PHP_SELF"]; //基本アドレス
> > $maxRow  = 10; //表示行数
> > $page    =  0; //ページ番号(初期)
> > if(isset($_GET['page'])) //ページ番号がURIに含まれていれば
> > {
> >   $page = $_GET['page']; //ページ番号の取得(初期設定を上書き)
> > }
> > $startRow = $page * $maxRow; //データベースから取得する最初の行
> > //接続
> > $con = mysql_pconnect($DBSERVER, $DBUSER, $DBPASSWORD) or 
> > trigger_error(mysql_error(),E_USER_ERROR);
> > mysql_query("set names sjis"); //文字セット
> > $selectdb = mysql_select_db($DBNAME, $con); //データベース選択
> > //データ取得
> > $query      = sprintf("SELECT * from dive_free_tbl_ where card_level =
> '%s' ORDER BY id ASC", $card_level); //基本クエリ
> > $queryLimit = sprintf("%s LIMIT %d, %d", $query, $startRow, 
> > $maxRow); //オ
> フセット
> > $setAll     = mysql_query($query, $con) or die(mysql_error()); //全件抽
出
> > $rowTotal   = mysql_num_rows($setAll); //総レコード数を取得
> > $set        = mysql_query($queryLimit, $con) or die(mysql_error()); //条
件
> 抽出
> > $row        = mysql_fetch_assoc($set); //結果セットの最初の1行を連想配
列
> で取得
> > $maxPage    = floor($rowTotal/$maxRow); //最終ページ番号
> > ?>
> > 
> > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
> > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> > <html xmlns="http://www.w3.org/1999/xhtml">
> > <head>
> > <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" 
> > />
> > <title>ページングテスト</title>
> > </head>
> > <body>
> > <?php do { ?>
> > <br />
> > <table width="580" border="0" cellpadding="2" cellspacing="0"
> bordercolor="#CCCCCC" bgcolor="#f9f3ff">
> >   <tr height="25">
> >     <th width="17%" align="center" bgcolor="#E6E6E6" 
> > class="style2">登録日
> </td>
> >     <th width="18%" align="center" bgcolor="#E6E6E6" 
> > class="style2">Card
> Level</td>
> >     <th width="16%" align="center" bgcolor="#E6E6E6" 
> > class="style2">タンク
> 本数</td>
> >     <th width="16%" align="center" bgcolor="#E6E6E6" 
> > class="style2">主な潜
> 水地</td>
> >     <th width="15%" align="center" bgcolor="#E6E6E6" 
> > class="style2">年齢
> </td>
> >     <th width="15%" align="center" bgcolor="#E6E6E6" 
> > class="style2">性別
> </td>
> >   </tr>
> >   <tr>
> >     <td><font color="#000082"><?php echo $row['time_stamp'];
> ?></font></td>
> >     <td><font color="#000082"><?php echo $row['card_level'];
> ?></font></td>
> >     <td><font color="#000082"><?php echo $row['tank_number'];
> ?></font></td>
> >     <td><font color="#000082"><?php echo $row['diving_point'];
> ?></font></td>
> >     <td><font color="#000082"><?php echo $row['diver_age'];
?></font></td>
> >     <td><font color="#000082"><?php echo $row['diver_sex'];
?></font></td>
> >   </tr>
> > </table>
> > <?php } while ($row = mysql_fetch_assoc($set)); //結果セットの次行を連想
配
> 列で取得 ?>
> > <a href="<?php printf("%s?page=%d", $current, 0); ?>">先頭</a>
> > <a href="<?php printf("%s?page=%d", $current, max(0, $page-1));
> > ?>">戻る</a>
> > <a href="<?php printf("%s?page=%d", $current, min($maxPage, 
> > $page+1));
> > ?>">次へ</a>
> > <a href="<?php printf("%s?page=%d", $current, $maxPage); ?>">最終</a>
> > </body>
> > </html>
> > <?php mysql_free_result($set); ?>
> > 
> > 
> > ちなみに
> > 
> > $card_level = $_REQUEST['card_level'];
> > 
> > は、ページングには何の関係もありません。ただの抽出条件ですよね?
> > フォームか何かで渡しているのであれば、$_POSTでも取得できます。
> > 今回は、URIにページ番号を仕込んであります。ページ番号をURI($_GET)で取
> > 得して、オフセット値を計算しデータベースより抽出して表示をすれば良いと思
> > います。そしてページ番号を使用して、新たなリンクを貼ればページングの完成
> > です。
> > 
> > 
> > と。これで宜しかったでしょうか?
> > 勘違いしていたら、スルーして下さい。
> > 
> > ではでは。
> > 
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp 
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> 
> --
> 有限会社ジュウイチ <zuichi_info @ omocha.co.jp>
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp 
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp 
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3

--
有限会社ジュウイチ <zuichi_info @ omocha.co.jp>

_______________________________________________
PHP-users mailing list  PHP-users @ php.gr.jp
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


PHP-users メーリングリストの案内