- 締切済み
PHP pagerについて
現在mysqlに登録されているデータを表示させてなおかつ表示制限をつくっています。 pagerにて表示を分割しています。 http://www.phppro.jp/qa/3073のソースを参考に作成したみたのですが、 下記が自分なりに編集したコードです。 define(LMAX, 5); if (!isset($_GET['page'])) { $page = 1; } else { $page = intval($_GET['page']); if ($page == 0 ) { die('page no error'); } } $skip = ($page - 1) * LMAX; $query = sprintf('SELECT * FROM `test` LIMIT '.$skip.','.(LMAX + 1)); $result = mysql_query($query, $link) or die(mysql_error()); $line = 0; while ($row = mysql_fetch_array($result)) { if ($line >= LMAX) { break; } if ($line == 0) { // ヘッダ出力 $r_list .= "<tr>\n"; $r_list .= "<th>テスト1</th>\n"; $r_list .= "<th>テスト2</th>\n"; $r_list .= "<th>テスト3</th>\n"; $r_list .= "<th>テスト4</th>\n"; $r_list .= "</tr>\n"; } $line++; $r_list .= "<tr>\n"; $r_list .= "<td>" .$row["test1"]. "</td>\n"; $r_list .= "<td>" .$row["test2"]. "</td>\n"; $r_list .= "<td>" .$row["test3"]."</td>\n"; $r_list .= "<td>" .$row["test4"]."</td>\n"; $r_list .= "</tr>\n"; } if ($page > 1) { $prev = '<a href="?page=' . ($page - 1) . '">Prev</a>'; } if ($line > LMAX) { $next = '<a href="?page=' . ($page + 1) . '">Next</a>'; } としています。 いくつかご質問がお分かりの方が、いらっしゃいましたら教えていただけないでしょうか? ・define(LMAX, 5);のところで5にしているにもかかわらず5件表示がされない。 ・このコードだとPrevやNextがでない。 ・ 2個目の$r_list .= "</tr>\n";の下に$line++;を書くとPrevやNextが表示される。 以上になります。 宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yuu_x
- ベストアンサー率52% (106/202)
<?php define('LMAX', 5); $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $page > 0 or die('Error: no page.'); $query = sprintf('SELECT SQL_CALC_FOUND_ROWS * FROM `test` LIMIT %d, %d;', ($page - 1) * LMAX, LMAX + 1); $result = mysql_query($query) or die(mysql_error()); $n = mysql_result(mysql_query('SEELCT FOUND ROWS();')); echo '<table>' ,'<tr>' ,'<th>テスト1</th>' ,'<th>テスト2</th>' ,'<th>テスト3</th>' ,'<th>テスト4</th>' ,'</tr>' ; while ($row = mysql_fetch_assoc($result)) { echo '<tr>' ,'<th>', htmlentities($row['test1'], ENT_COMPAT, mb_internal_encoding()), '</th>' ,'<th>', htmlentities($row['test2'], ENT_COMPAT, mb_internal_encoding()), '</th>' ,'<th>', htmlentities($row['test3'], ENT_COMPAT, mb_internal_encoding()), '</th>' ,'<th>', htmlentities($row['test4'], ENT_COMPAT, mb_internal_encoding()), '</th>' ,'</tr>' ; } echo '</table>'; $page > 1 && printf('<a href="?page=%d">Prev</a>', $page - 1); $page < $n / LMAX && printf('<a href="?page=%d">Next</a>', $page + 1);
- hogehoge78
- ベストアンサー率80% (433/539)
コピペして試してみましたが、5件表示されるようでした。 HTMLソースも、レコード数が足りないということでしょうか。 そもそも、5件でなかったら、実際は何件表示されてますか? Nextが出てこない件は、 if($line > 2)としてあるところを、 if($line > LMAX)としているからではないでしょうか。 $lineの数は、0から始まっているので、LMAXよりも取得件数が多くなることはないと思います。 書くなら、そのままにするか、 if($line >= LMAX) にしなければいけないと思います。
お礼
ご回答有難う御座います。 上記内容に変更したところできました。 有難う御座います。
お礼
ご回答有難う御座います。 せっかくソースまで書いていただいたのに下記のご回答者さんでできました。 申し訳ありません。 また、なにかありましたら、宜しくお願いいたします。