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

una naoki @ fr.catv.ne.jp
2009年 5月 15日 (金) 23:23:14 JST


こんばんわ
 
次へを押したときに $_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 メーリングリストの案内