PHPでページネーション作成したのですが、検索後に次の検索結果を表示するページに飛んでも検索時にpostされたデータが消えてしまいます。そのため検索結果の続きを表示するページへのリンクにもデータを送信する機能を付けようと試みたのですがうまくいきません。
どうすればうまくいくでしょうか。また、他によい方法があるのでしょうか。回答よろしくお願いします
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
coba-cobaさんの回答を補足してみます。
よく使っているコードですが参考になれば。GETでページ送りするサンプルです。
PHP
1// 2 $pp = 20;//1ページの表示件数 3 $offset = 0;//オフセット件数 4 $srchwd_p = "";//検索文字列 5 6 if( !empty( $_POST['srchword']) ) { //POSTの場合 7 $tmp = sanitize( $_POST['srchword'] );//攻撃に使われるような文字を削除する 8 if( chkStr( $tmp ) ) { //文字列を検証する 9 $srchwd_p = substr( $tmp, 0, 60 );//最大60文字切り出す 10 } 11 } 12 if( !empty( $_GET['srchword']) ) {//GETの場合 13 $tmp = sanitize( $_GET['srchword'] ); 14 if( chkStr( $tmp ) ) { 15 $srchwd_p = substr( $tmp, 0, 60 ); 16 } 17 } 18 //1ページあたりの表示件数 19 if( !empty( $_POST['rw']) ) { 20 if( is_num( $_POST['rw']))$pp = $_POST['rw'];//数字なら代入する 21 } else { 22 if( !empty( $_GET['rw']) ) { 23 if( is_num( $_GET['rw']))$pp = $_GET['rw']; 24 } 25 } 26 //オフセット件数 27 if( !empty( $_GET['of']) ) { 28 if( is_num( $_GET['of']))$offset = $_GET['of']; 29 } else { 30 $offset = 0; 31 } 32 33 //GETパラメーターの作成 34 $get_param = "rw=" . $pp; 35 if( !empty( $srchwd_p ) ) { 36 $get_param .= "&srchword=" . urlencode($srchwd_p);//URLエンコードする 37 } 38
POSTする場合にはテキストボックスに検索文字列を代入しておけば持ち回せます。
ページナビからページ移動する場合はGETで持ち回します。
検索文字列 [トマト ] [検索]
表示件数[20件]▼
1 2 3 4 次のページ >>
HTML
1<input name="srchword" id="srchword" type="text" value ="<? 2 if( !empty( $srchwd_p ) )print $srchwd_p; 3?>"> 4表示件数 <select name="rw" onChange="submit();"> 5<option value="10">10件</option> 6<option value="20" selected="selected">20件</option> 7<option value="30">30件</option> 8<option value="40">40件</option> 9<option value="50">50件</option> 10<option value="100">100件</option> 11</select> 12<input type="submit" name="submit" id="submit" value="検索">
ナビゲーションバーの項目は検索結果によって動的に生成します。
ナビゲーションバーのHTMLソースコードは以下のようになります。
HTML
1 1 2<a href='search.html?rw=20&srchword=%E3%83%88%E3%83%9E%E3%83%88&of=20'>2</a> 3<a href='search.html?rw=20&srchword=%E3%83%88%E3%83%9E%E3%83%88&of=40'>3</a> 4<a href='search.html?rw=20&srchword=%E3%83%88%E3%83%9E%E3%83%88&of=60'>4</a> 5<a href='search.html?rw=20&srchword=%E3%83%88%E3%83%9E%E3%83%88&of=20'>次のページ
注意点としては検索文字列が相当長いとGETでは切れてしまいますのでPOSTを使う必要があります。
投稿2016/02/03 20:52
総合スコア241
0
雑な方法ですが、
php
1$_SESSION["postdata"]=$_POST;
と、セッションにPOSTの情報そのものを保存してしまうという手もアリかと思います。
投稿2016/04/05 23:13
総合スコア1283
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
postってことで、もし画面上に見せたくないって話なら
<INPUT type="hidden" name="hoge" value="<?php echo $fuga ?>">
みたいな感じで埋め込んどくのが簡単かなあ。
セキュリティ云々的な話が重要ならオススメしませんが…
投稿2016/03/24 10:20
総合スコア7458
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
もう試していると思いますが…、
やはり、クエリは続きを表示するリンクのURLにパラメーターとしてセットして、GETで送信するのが簡単だと思います。
例:?query=hogehoge
他にも、現在のページ数や、1ページに表示する件数も同じ方法で持ち回ります。
投稿2016/02/03 17:10
編集2016/02/03 17:12総合スコア1409
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。