質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2007閲覧

php mysql pagination

hyskyo

総合スコア79

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/02/08 11:28

編集2016/02/10 05:06

各カテゴリ一覧にて、各カテゴリに当てられた記事ページ一覧の表示はできていますがそこで各カテゴリーページにて、記事が多い時を想定してページネーションを作ったんですが現在いるカテゴリでの記事をページネーションで表示したいのに次へのURLが全然違うcategoryページに飛んでしまいます、なぜかよくわかりませんでした!!
誰かがご教授お願いします。

全ソースコードは下記です

//カテゴリ一覧表示 <?php if(isset($_GET['category'])){ $category_id = $_GET['category']; } $query = "SELECT * FROM posts WHERE category_id = $category_id ORDER BY post_id DESC LIMIT 0, 5"; $posts_query = mysqli_query($con, $query); while($row = mysqli_fetch_assoc($posts_query)){ $post_id = $row['post_id']; $post_title = $row['post_title']; $post_author = $row['post_author']; ?> <div class="list"> <h3><?php echo $post_title; ?></h3> <p><?php echo $post_author; ?><br></p> </div> //ぺージネーション作成 <?php if(isset($_GET['page'])){ $page = $_GET['page']; }else{ $page =""; } if($page =="" || $page ==1){ $page_1 = 0; }else{ $page_1 = ($page * 5) - 5; } $query_count = "SELECT * FROM posts WHERE category_id = $category_id ORDER BY post_id DESC"; $find_count = mysqli_query($con, $query_count); $count = mysqli_num_rows($find_count); $count = ceil($count / 5); ?> <?php } ?> <ul class="pager"> <?php for($i = 1; $i <= $count; $i++){ echo "<li><a href='category.php?category=$category_id&page={$i}'>{$i}</a></li>"; } ?> </ul>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

イメージ説明

ページネーション以前でとまってる。

html

1<?php 2if (isset($_GET['category'])) { 3 $category_id = $_GET['category']; 4} 5// パラメータをSQLにそのままセットするな!SQLインジェクション脆弱性あり!! 6$query = "SELECT * FROM posts WHERE category_id = $category_id ORDER BY post_id DESC LIMIT 0, 5"; 7$posts_query = mysqli_query($con, $query); 8 9while ($row = mysqli_fetch_assoc($posts_query)) { 10 $post_id = $row['post_id']; 11 $post_title = $row['post_title']; 12 $post_title = $row['post_author']; // 変数名チェックせよ! 13 ?> 14 <div class="list"> 15 <h3><?php echo $post_title; ?></h3> 16 <p><?php echo $post_author; ?><br></p> 17 </div> 18 19 <?php 20 //ぺージネーション作成 21 22 // filter_input 使う filter_input(INPUT_GET, 'page') 23 if (isset($_GET['page'])) { 24 $page = $_GET['page']; 25 } else { 26 $page = ""; 27 } 28 29 if ($page == "" || $page == 1) { 30 $page_1 = 0; 31 } else { 32 33 $page_1 = ($page * 5) - 5; 34 } 35 36 // パラメータをSQLにそのままセットするな!SQLインジェクション脆弱性あり!! 37 // ループの中でSQLを投げるな。JOIN使え。 38 $query_count = "SELECT * FROM posts WHERE category_id = $category_id ORDER BY post_id DESC"; 39 $find_count = mysqli_query($con, $query_count); 40 $count = mysqli_num_rows($find_count); 41 $count = ceil($count / 5); 42 ?> 43 44<?php } ?> 45 46<ul class="pager"> 47 <?php 48 for ($i = 1; $i <= $count; $i++) { 49 echo "<li><a href='category.php?category=$category_id&page={$i}'>{$i}</a></li>"; 50 } 51 ?> 52</ul>

投稿2016/02/08 18:50

編集2016/02/08 18:57
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hyskyo

2016/02/10 05:11

ご指摘ありがとうございます $post_title = $row['post_author']; // 変数名チェックせよ! こちらが正しいです=>$post_author = $row['post_author'] パラメータをSQLにそのままセットするよくないんですね、勉強になりました、ありがとうございます。 このやり方もありますね!!ありがとうございます filter_input filter_input 使う filter_input(INPUT_GET, 'page')
guest

0

ベストアンサー

URLのQuery_stringの構成は、?a=b&c=d のように、?が1回だけですよ。
そのほかにも気になる点があります。
1)$coと$conは、同じものでないか
2)echo $post_author; の $post_authorは、どこで設定したのか
3)$category_idが最後には、$cat_idになっていないか
などです。

投稿2016/02/08 14:13

NorioFujii

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hyskyo

2016/02/08 15:14

NorioFujii さん ご指摘ありがとうございます。 上書き修正しました。最後の$cat_idを$category_idに変更してみたんですが同じページしか見れませんでした。 ご教授お願いいたします。
hyskyo

2016/02/08 15:37

質問の回答はできましたが新たに問題としては、例えば、カテゴリー1の記事が10, カテゴリー2の記事が12とした場合はそれぞれのカテゴリーに数が表示されるはず、ですが今の全カテゴリーに全記事の合計がページネーションとして表示されています、どこが間違っていますか?
NorioFujii

2016/02/09 00:26

$category_idが不定のまま、全体が実行されてはいませんか? なお、新規追加の $post_title = $row['post_author']; は多分誤りですね?
hyskyo

2016/02/10 05:18

こちらは誤りでした、$post_title = $row['post_author'];=> $post_author = $row['post_author'];です、 >>$category_idが不定のまま、全体が実行されてはいませんか? 全体が実行されてしまいます 下記のように修正したんですがcategory別でカウントができなくて、各categoryに全体がカウントされてしまいます while ($row = mysqli_fetch_assoc($posts_query)) { $post_id = $row['post_id'];  $category_id = $row['category_id']; $post_title = $row['post_title']; $post_author = $row['post_author']; ?>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問