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

有限会社ジュウイチ zuichi_info @ omocha.co.jp
2009年 5月 16日 (土) 15:19:57 JST


高橋様、una様、竹内宜長様

いろいろとご教授いただきありがとう御座います。


投稿したマツムラです。

una様に投稿いただきました、サンプルCODEの通りに、パラメーターを追加したら
キチント動作いたしました。

みなさまのお力をを頂、検索結果を「次へ(Next)、前へ(Previous)」ができるように
なりました。

今後は、できる限り自分で解決できるように勉強していきたいと思います。

本当に、みなさまありがとう御座いました。
今後ともご教授いただくことが有るかと思いますが、よろしくお願いいたします。






On Sat, 16 May 2009 12:07:51 +0900
"una" <naoki @ fr.catv.ne.jp> wrote:

> おはようございます。
> 
> $_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 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 メーリングリストの案内