お世話になります。
現在、MySQLにデータを入れておいて、Aページで、検索条件を指定し、それをPOSTでBページへ渡します。その受け取ったデータを下に、20件ずつ表示させ、21件目から「次のページ」をクリックすることで、表示させたいのですが、「次のページ」をクリックすると、条件がクリアされ、うまく表示ができません。
簡単な各ページの内容ですが、
A.html(条件指定ページ)
・県名
(項目:福岡、山口、広島)←3項目
・市町村名
(フリーワード)
これら2項目をB.php へPOSTします。
B.php
No.3ベストアンサー
- 回答日時:
こんにちは。
if($p > 1){
echo "<a href=\"".$_SERVER["PHP_SELF"]."?p=$prev">前のページ</a>";
}
if(($next - 1)*20 < $datacnt){
echo "<a href=\"".$_SERVER["PHP_SELF"]."?p=$next">次のページ</a>";
の部分で、入力された条件を引き継ぐ必要があります。
?p=$prev&ken=$kenUrl&ctv=$ctvUrl
こうすれば条件も次のページに引き継げます。
1で回答したとおり、$kenUrlと$ctvUrlはURLエンコードを行います。
$kenUrl = rawurlencode($ken);
$ctvUrl = rawurlencode($ctv);
で、受け取りですが、現在のソースを見た限りだと
POSTになっているので、受け取れません。
GETで別途に受け取るか、$ken = $_REQUEST['ken'];
で取得してください。
取得後、デコード処理が入ります。
$ken = rawurldecode($ken);
$cvt = rawurldecode($cvt);
これでやりたいことは実現できると思います。
No.2
- 回答日時:
MYSQL のLIMIT 句を使って
select XXX from XXX_table LIMIT 先頭,20
として、
B.php に POST するときに、 先頭の位置を20 ずつ 増やしていけばよいのでは?
私は PostgreSQL で、LIMIT 句を使って質問のような内容を実現したことがありますので、あまり使い方に違いはないとは思います。
この回答への補足
すみません、回答ありがとうございます。
質問が途中で途切れていて、No.1さんの補足欄に追加させていただきました。
athanasiusさんのとおり、その方法はできるのですが、次のページ21件~40件目を表示させるときに、$ken,$ctvが初期化されてしまい、条件がうまく設定できません。よろしくお願いします(^^;;
No.1
- 回答日時:
こんにちは。
B.phpに渡した時点で検索条件をセッションに入れるか、
「次のページ」のリンクに検索条件を埋め込む方法があると
思います。
例えばセッションを使う場合は、検索条件と次のページの開始位置
をセットしておき、
次のページが押され、PHPが呼び出されたときに、セッションから
検索条件と開始位置を取り出してSQLを発行すればいいと思います。
リンクに検索条件を埋め込む場合はエンコードが必要になると思います。
<a href="./b.php?kenmei=エンコードした県名&free=エンコードした市町村名&start=21">次のページ</a>
そして、SQLを発行する際に、kenmeiとfreeをデコードしてから発行します。
この回答への補足
すみません、途中で途切れてしまいました。
<?php
ken = $_POST['ken']; //県名が入ります
ctv = $_POST['ctv']; //市町村名(フリーワード)
if($ken != "" && $ctv != ""){
$sqlcnt ="SELECT COUNT(*) AS cnt FROM table WHERE ken=\"$ken\" && ctv LIKE '%\"$ctv\"%' LIMIT $st,$lim";
}elseif($ken == "" && $ctv != ""){
$sqlcnt ="SELECT COUNT(*) AS cnt FROM table WHERE ctv LIKE '%\"$ctv\"%' LIMIT $st,20";
}elseif($ken !="" && $ctv ==""){
$sqlcnt ="SELECT COUNT(*) AS cnt FROM table WHERE ken=\"$ken\" LIMIT $st,20";
}else{
$sql ="SELECT COUNT(*) AS cnt FROM table LIMIT $st,20";
}
if(!$conn = mysql_connect("localhost","usr","passwd")){
die("接続不可");
mysql_select_db("database",$conn);
$res = mysql_query($sqlcnt,$conn) or die("抽出エラー");
$row = mysql_fetch_array($res);
$datacnt = $row["cnt"];
$p = intval($_GET['p']);
if($p <1){
$p = 1;
}
$st = ($p - 1)*20;
$prev = $p - 1;
if($prev < 1){
$prev = 1;
}
$next = $p + 1;
if($p > 1){
echo "<a href=\"".$_SERVER["PHP_SELF"]."?p=$prev">前のページ</a>";
}
if(($next - 1)*20 < $datacnt){
echo "<a href=\"".$_SERVER["PHP_SELF"]."?p=$next">次のページ</a>";
if($conn = mysql_connnect("localhost","usr","passwd")){
die("接続不可");
mysql_select_db("database",$conn);
if($ken != "" && $ctv != ""){
$sql ="SELECT * FROM table WHERE ken=\"$ken\" && ctv LIKE '%\"$ctv\"%' LIMIT $st,$lim";
}elseif($ken == "" && $ctv != ""){
$sql ="SELECT * FROM table WHERE ctv LIKE '%\"$ctv\"%' LIMIT $st,20";
}elseif($ken !="" && $ctv ==""){
$sql ="SELECT * FROM table WHERE ken=\"$ken\" LIMIT $st,20";
}else{
$sql ="SELECT * FROM table LIMIT $st,20";
}
$res = mysql_query($sql,$conn);
while($row = mysql_fetch_array($res)){
print($row["ken"],$row["ctv"]\n);
}
mysql_free_result($res);
?>
稚拙なプログラミングですが、間違いないものとします。ここで、データ数が50件だとして、20件表示後、次のページ をクリックすると、$ken,$ctvともにクリアされ、すべてのデータが表示されるようになります。これを、変数を維持したまま適切に動作させれるようにしたいのですが、さっぱりです。。。すみません、教えてください!よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Visual Basic(VBA) ActiveReportのサブレポート機能を利用したときに1ページ目の1サブレポート目が表示されない 1 2023/08/19 06:10
- IT・エンジニアリング ★お手上げ状態です。助けてください。ActiveReportについて 1 2023/08/20 04:29
- Visual Basic(VBA) ★お手上げ状態です。助けてください。ActiveReportについて 1 2023/08/20 04:27
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- HTML・CSS リストの並べ替え 1 2022/09/13 15:27
- Chrome(クローム) Chromeのアドレスバーに履歴等を表示させないようにしたい 2 2022/09/08 14:20
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LARAVEL モデル
-
会員サイトに自動ログインして...
-
【PHP】ブログ記事をお気に入り...
-
リンク(URL)をクリックした後、...
-
onedrive にexcelファイルをア...
-
PEARのmimeDecodeでメール解析...
-
awsにApacheとPHPを入れて、何...
-
拡張子php画像をjpg画像等に変...
-
日本語ファイル名のアップロー...
-
さくらサーバーにて、phpからメ...
-
PHP フォルダ名やファイル名に0...
-
拡張子php画像をbmp画像等に変...
-
php、JDライブラリを用いて画像...
-
フォントの色を変えるには?
-
PHPでxmlをAPIに送信する方法(P...
-
edmaxで送信できなくなりました
-
深い階層のフォルダの作成や削...
-
PHPのsystem()でjava
-
文字化けについて
-
ローカル環境でのメール送信
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リダイレクトでPOST
-
URLの変わらないページをPHPで...
-
phpinfoでloaded modulesが表示...
-
【WordPress】メディアの一覧出力
-
URLでスラッシュ区切りでパラメ...
-
特定のサイトを経由しないとペ...
-
PHPで検索結果からさらに詳細な...
-
ヘッダーは500エラー、ブラウザ...
-
WordPress 検索結果ページのペ...
-
PHPの値受け渡しとアンカーを一...
-
テキストリンクを2回クリックし...
-
php my adminより取り出したデ...
-
FPDFを使ったPDF出力時の縦幅に...
-
phpとpostgresを利用した検索シ...
-
リンク(URL)をクリックした後、...
-
会員サイトに自動ログインして...
-
DBのレコード数のリンクを表示
-
携帯端末auのみpostで送ったデ...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
おすすめ情報