- ベストアンサー
MySQLのLimit句でページ分割する方法と一括処理の方法
- MySQLのLimit句を使用して、PHP+MySQLでページ分割を実現する方法について解説します。
- ページ分割により検索結果を10件ずつ表示し、ページ番号をGETパラメータで渡して動的に変更することができます。
- また、一括処理(削除など)を実現するために、チェックボックスを使用し、選択されたレコードの情報をGETパラメータで渡す方法も紹介します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
現在ページのcheckbox の状態を送信するには、postであれ、getであれ、リンクではなく、<form>からのsubmitが必要です。でなければ、ajax送信になります。 <form>には複数のsubmitボタンをおけます。クリックしたsubmitボタンのname:valueだけ送信されてくるので、name で区別して、次ページか前ページかを切り分け可能です。 そして、これまでにcheckが付いたid をhidden でいれておけば、以前のデータを持ち回ることが出来るし、前ページへ戻ったときに、表示範囲のidなら、先にcheckを入れておいて、はずれてたら、持ち回り中止扱いと言うことも出来ます。 あまり細かく検討はしてないけど、判定手順として以下のようなソース。 <?php if(isset($_POST["del"])){ // 削除用を呼び出す $_POST["c"] の配列に削除対象データ exit; } if( isset($_POST["p"]) ){ /* 前回ページ番号を hidden にいれておいて、prev と nextのどちらが送信されてきたかで、今回ページ番号算出 */ $p = intval($_POST["p"]) + ( isset($_POST["next"])?1:(isset($_POST["prev"])?-1:0) ); }else{ $p=1; } // databaseから取り出し コード省略 , $max に最大ページ数も取得しておく $lines = $db->fetchAll(); ?> <form action="" method="post" > <table> <?php foreach($lines as $k=> $line): $num = $k+($p-1)*10; ?> <tr><td><input type="checkbox" name="c[<?=$num ?>]" value="<?=$line['id'] ?>" <?php echo (isset($_POST["c"][$num]))?"checked":""; ?> > <?=$num ?></td><td><?=$line['data'] ?></td></tr> <?php endforeach; ?> </table> <?php foreach($_POST[c] as $k=>$val): ?> $n = intval($k); if( $n< ($p-1)*10 or $n>= $p*10 ){ <input type=hidden" name="c[<?=$k ?>]" value="<?=$val ?>"> } <?php endforeach; ?> <input type=hidden" name="p" value="<?=$p ?>"> <?php if($p>1): ?> <submit name="prev" value="前ページ <?=$p-1 ?>"> <?php endif; ?> <?php if($p<$max): ?> <submit name="next" value="次ページ <?=$p+1 ?>"> <?php endif; ?> <submit name="del" value="削除実行"> </form>
その他の回答 (1)
- hwoa1024
- ベストアンサー率36% (122/336)
ajaxを使っていない前提で回答します。 ページが変わる地点で前にチェックしたID番号を覚えておかなければなりません。 そうするにはGETでURLに書くか、 POSTでhiddenに持たせるか、 SESSIONで持たせるかしかありません。 sessionは管理が面倒なので、私ならGETでIDを持たせます。 一番いいのはajaxとjqueryを使うことではありますが。