lang
1// result.php 2 3require( 'config.php' ); 4require( 'lib.php' ); 5 6// 7if ( $_GET['page'] == '' ) $_GET['page'] = 0; 8if ( $_GET['rows'] == '' ) $_GET['rows'] = 20; 9if ( $_GET['sort'] == '' ) $_GET['sort'] = 'item_name asc'; 10 11// 12session_start(); 13 14// db connect 15$link = mysql_connect( $db_host, $db_user, $db_password ); 16mysql_select_db( $db_name ); 17$result = mysql_query( 'set character set utf8' ); 18 19// 20if ( $_GET['author_id'] != '' ) $where .= "item.author_id = '" . mysql_real_escape_string( $_GET['author_id'] ) . "' and "; 21if ( $_GET['category_id'] != '' ) $where .= "category_id = '" . mysql_real_escape_string( $_GET['category_id'] ) . "' and "; 22if ( $_GET['query'] != '' ) $where .= "item_name like '%" . mysql_real_escape_string( $_GET['query'] ) . "%' and "; 23 24$where .= 'item_id > 0'; 25 26$sql = "select * from item where $where"; 27$result = mysql_query( $sql ); 28$num_rows = mysql_num_rows( $result ); 29 30$sql = "select * from item 31 left join author on item.author_id = author.author_id 32 where $where order by " . mysql_real_escape_string( $_GET['sort'] ) . " limit ${_GET['page']}, ${_GET['rows']}"; 33$result2 = mysql_query( $sql ); 34//echo $sql; 35 36// 37$delta = 3 * $_GET['rows']; 38 39if ( $_GET['page'] - $delta < 0 ) $s = 0; else $s = $_GET['page'] - $delta; 40if ( $_GET['page'] + $delta > $num_rows ) $e = $num_rows; else $e = $_GET['page'] + $delta; 41 42 43 44 45?> 46<? require( 'header.php' ) ?> 47<? require( 'topbar.php' ) ?> 48<div align="center"> 49<h2>検索結果<?= $num_rows ?>件中<?= $_GET['page'] + 1 ?>件から<?= $_GET['page'] + $_GET['rows'] ?>件までを表示</h2> 50<table> 51<? while ( $item = mysql_fetch_array( $result2 ) ) { ?> 52<tr> 53 <td> 54 <a href="item.php?item_id=<?= $item['item_id'] ?>"><img src="<?= $item['image_url'] ?>" width=90 alt="<?= $item['item_name'] ?>" align="top" border=0></a> 55 </td> 56 <td> 57 <a href="item.php?item_id=<?= $item['item_id'] ?>"><?= $item['item_name'] ?> <?= $item['author_name'] ?></a><br> 58 価格 <?= $item['sale_price'] ?> 円(税込み) 59 </td> 60</tr> 61<? } ?> 62</table> 63<? if ( $_GET['page'] >= $_GET['rows'] ) { ?> 64<a href="result.php?page=<?= $_GET['page'] - $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">前のページ </a> 65<? } ?> 66<? for ( $m = $s; $m <= $e; $m = $e++ ) { ?> 67<a href="result.php?page=<?= $m ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>"> 68<? if ( $m == $_GET['page'] ) echo "<big><b>" . $m / $_GET['rows'] . "</b></big>"; else echo $m / $_GET['rows'] ?></a> 69<? } ?> 70<? if ( $num_rows > $_GET['page'] + 1 ) { ?> 71<a href="result.php?page=<?= $_GET['page'] + $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>"> 次のページ</a> 72<? } ?> 73<? require( 'footer.php' ) ?> 74```? 75 76 77PHPによるECサイトプログラミング~ショッピングカートから決済まで―MySQLのデータベース設計とPHPセッション管理の作法 78という本を買って読んでいるのですが、 79このresult.phpのページング処理がよくわかりません。 80教えてください。 81` 82 83```lang-<php> 84/* 85* 変数eは 表示開始件数 + delta がnum_rowsより上回る時に最大件数 86*(一番最後のページリンクを作るため) 87* 上回る時には表示開始件数 + delta 88* これは、現在のページより2ページ次のページまでページリンクを表示させたい為 89*/ 90if ( $_GET['page'] + $delta > $num_rows ) $e = $num_rows; else $e = $_GET['page'] + $delta; 91
この部分で表示開始件数がわからないです。
この$_GET['page']はページ数のみgetするのはないのですか?
つまりたとえば$_GET['page'] + $_GET['rows']で1ページ目は20件、2ページ目1件まで、
$_GET['page']で2をゲットしたら22件ではないのですか?
$_GET['page']が表示開始件数を手にしている部分はどこですか?
lang
1<?php /* 表示開始件数が表示件数を上回る場合に戻るリンクを表示させます。*/ ?> 2<? if ( $_GET['page'] >= $_GET['rows'] ) { ?> 3<?php 4/* 5* 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 6* 以下のURLを表示させます。 7* result.php?page=[表示開始件数 - 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] 8*/ 9?> 10<a href="result.php?page=<?= $_GET['page'] - $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">前のページ </a> 11<? } ?> 12<!-- 戻るリンクの表示終了。 --> 13
表示開始件数と$_GET['page']がよくわかりません。
<?= $_GET['page'] - $_GET['rows'] ?>にするとマイナスになってしまうのでは?lang
1<?php /*最大表示件数が表示開始件数を上回る場合に進むリンクを表示させます。*/ ?> 2<? if ( $num_rows > $_GET['page'] + 1 ) { ?> 3<?php 4/* 5* 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 6* 以下のURLを表示させます。 7* result.php?page=[表示開始件数 + 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] 8*/ 9?> 10<a href="result.php?page=<?= $_GET['page'] + $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>"> 次のページ</a> 11<? } ?> 12<!-- 進むリンクの表示終了。 --> 13<? require( 'footer.php' ) ?>
表示開始件数の意味と
$_GET['page']がページ数のみgetしていると思っていたのがもしかして
間違った解釈を私していると思うんです。
申し訳ありません。
そこのところ、もう少しわかりやすく教えてください
よろしくお願います
pageには、page番号ではなく表示開始件数が入ります。
っと書いてありますが、すいません。その記述はどこにあるのでしょうか?
lang
1$sql = "select * from item 2left join author on item.author_id = author.author_id 3where $where order by " . mysql_real_escape_string( $_GET['sort'] ) . " limit ${_GET['page']}, ${_GET['rows']}"; 4$result2 = mysql_query( $sql );
この部分も教えてください。
すいません。
回答3件
あなたの回答
tips
プレビュー