PHP+MySQLで分割ページを作っています。
検索結果のページを分割しているのですが、2ページ目以降に検索されたレコードが表示されません。
1).2ページ目以降に続きのレコード(下記では21件目以降)を表示させるには、どうすれば良いのでしょうか。
2).上記には関係ないのですが、「<?= $msg ?>」で検索結果の総数を表示したいのですが、「1」としか表示されません…ついでで良いので、ご指摘いただけたらと思います。
<?php
$keyword = $_POST['keyword']//検索ワードになります、下記の例では使用していません
?>
<?php
//データベース接続
$page = $_REQUEST['page'];
if ($page == '') {
$page = 1;
}
$page = max($page, 1);
// 最終ページを取得する
$sql = 'SELECT COUNT(*) AS cnt FROM table1';
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
$maxPage = ceil($rows['cnt'] / 20);
$page = min($page, $maxPage);
$start = ($page - 1) * 20;
$result = mysql_query('SELECT * FROM table1 LIMIT ' . $start . ',20');
$rowss = mysql_num_rows($sql);
//表示するデータを作成
if($rows){
while($row = mysql_fetch_array($result)) {
$tempHtml .= "<tr>";
$tempHtml .= "<td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["mail"]."</td>";
$tempHtml .= "</tr>\n";
}
$msg = "".count($rowss)."";
}else{
$msg = "sorry";
}
//結果保持用メモリを開放する
mysql_free_result($result);
?>
//下記から、HTML部に表示しています
<?php
$start_a = ($start + 1);
print "".$start_a."件~";
$start_b = ($start + 20);
print "".$start_b."件を表示しています(".$page."ページ目/全".$maxPage."ページ)<br>";
if ($page > 1) {
print "<a href=\"page.php?page=".($page - 1)."\">前のページへ</a> ";
} else {
print "前のページへ";
}
if ($page < $maxPage) {
print "<a href=\"page.php?page=".($page + 1)."\">次のページへ</a> ";
} else {
print "次のページへ";
}
?>
<?= $msg ?>
何卒、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
以前の質問の際に作成したサンプルです.
テーブルに id を追加しています。
<?php
// DB接続
略
//初期データ
$self= basename(__FILE__);
$dataRow= 3;
$currntPage= 1;
$dataHtml= '';
$pagerLink= '';
$message= "データがありません";
//パラメータを取得
$keyword= ( isset($_REQUEST['keyword']) ) ? $_REQUEST['keyword'] : '';
$startWith= isset($_REQUEST['s']) ? $_REQUEST['s'] +0 : 0;
//データ件数の取得
$sql = 'SELECT COUNT(id) FROM TABLE1';
if( strlen($keyword) > 0 )
$sql .= sprintf(" WHERE anime LIKE '%%%s%%'", mysql_real_escape_string($keyword ));
$dataNum = mysql_result(mysql_query($sql, $conn), 0) +0;
if( $dataNum > 0 ) {
//メッセージ変更
$message = sprintf('%d件のデータがあります', $dataNum);
//データ取得
$sql = 'SELECT * FROM TABLE1';
if( strlen($keyword) > 0 )
$sql .= sprintf(" WHERE anime LIKE '%%%s%%'", mysql_real_escape_string($keyword ));
$sql .= ' ORDER BY age, id ' .sprintf("LIMIT %d, %d", $startWith, $dataRow);
if($results = mysql_query($sql,$conn)) {
$dataHtml.= '<table>';
while($row = mysql_fetch_array($results))
$dataHtml.= sprintf('<tr><td>%d</td><td>%s</td><td>%s</td><td>%d</td></tr>'.PHP_EOL,
$row['id'], $row['name'], $row['anime'], $row['age']);
$dataHtml.= '</table>';
mysql_free_result($results);
}
else die("データの取得に失敗しました");
//ページャ作成
$pageNum = ( ( $dataNum % $dataRow ) > 0 ) ? intval($dataNum / $dataRow ) + 1: intval( $dataNum / $dataRow );
for($p=1; $p <= $pageNum; $p++) {
$nextWith = $dataRow * ($p -1);
if( $nextWith == $startWith ) {
$pagerLink .= sprintf('%d'.PHP_EOL, $p);
$currntPage= $p;
}
else
$pagerLink .= sprintf('<a href=%s?keyword=%s&s=%d>%d</a>'.PHP_EOL, $self, $keyword, $nextWith, $p);
}
$pagerLink .= sprintf('[%d/%dページ]', $currntPage, $pageNum );
}
mysql_close($conn);
?><html>
<body>
<form method="post">
<input type="text" name="keyword" value="<?php echo $keyword ?>"/>
<input type="hidden" name="s" value="0" />
<input type="submit" />
</form>
<?php
echo $message .PHP_EOL;
echo $dataHtml.PHP_EOL;
echo $pagerLink.PHP_EOL;
?>
</body>
</html>
前回に続き、お世話になっております・・・!!
初心者ながらもニュアンス(?)は少しずつ理解してきているのですが、やはり1つ1つの理解には至っておらず…
サンプルまで組んでいただいて、かなり勉強させていただいていますっ!!
ご回答ありがとうございます!!
No.6
- 回答日時:
> ついでの質問で申し訳ないです。
>
> また別にはなるのですが、フリーワードとインプットやセレクトを一緒に使おうとすると、すべてパラメータで処理になるということで良いのでしょうか?
>(まだまだ先なのですが、テーブルの選択も考えておりまして)
質問の意図が読み取りづらいです。
HTML上で表現された項目は、GETかPOST(もしくは Cookie)になりますが、そういった事以外の何かを考えてらっしゃるのでしょうか?
入力された値を持ちまわり方ということでしたら
- 毎回パラメータで取得する
- パラメータをCookie に格納する
- 一度パラメータで取得しセッションに格納する
のような方式が考えられますが、いつから~いつまで持ちまわるのかライフサイクルを決めて、実装する必要があります。
テーブルの選択ということは、検索対象ごとにテーブルを持つ方法を検討されているのでしょうか?
例えば、カテゴリマスターテーブル(カテゴリID, カテゴリ名), とデーターテーブル(ID, カテゴリID, データ)のようなテーブル設計ですと、2つのテーブルで沢山のカテゴリ分類が可能になりますし、参照するテーブル名も一定しています。ちがうのは WHERE句のカテゴリIDだけですから、これだけパラメータで取得すれば良い事になります。
具体的な状況になってから別途質問を起こされたほうが、明確な回答が得られるかと思います。
ごめんなさい、いろいろ考えていたらぽろぽろと疑問が出てきておりました。
ページング(?)のない状態での検索はできたのですがページングがわからない状態だったので、今回質問させていただいたので・・・すみません、よくばり過ぎてました・・・。
この先はまたやりたいことを明確にして、わからないことがあれば質問させていただきたいと思いますっ!!
ありがとうございました!!
No.5
- 回答日時:
SELECT COUNT(id) FROM TABLE1
このクエリーが流れますか?
確認してみてください。(FALSEになっている気がします)
環境によって、テーブル名など大文字小文字を判別する場合、しない場合があるので注意する必要があります。
この回答への補足
ついでの質問で申し訳ないです。
また別にはなるのですが、フリーワードとインプットやセレクトを一緒に使おうとすると、すべてパラメータで処理になるということで良いのでしょうか?
(まだまだ先なのですが、テーブルの選択も考えておりまして)
すみません、原因わかりました!!
$conn(←変数…であってるのでしょうか)の設定をしてなかったようです!!
凡ミスです、すみません。
本当にご丁寧な回答いただいて、かなり勉強させていただきました!!
ありがとうございました!!
No.4
- 回答日時:
うぅっ。
読み返すと、変なトコがボロボロと。
- form タグに action が指定されていないので、ページングしてから再検索したときURLが変だ。
- if($results = mysql_query($sql,$conn)) の if ブロック
$results = @mysql_query($sql,$conn) or die("データの取得に失敗しました");
と書きたかったんだと思われます。
あんまりイケてないですね。
この回答への補足
-formタグに・・・
<form method="post" action="sample.php">としました
- if($results¥・・・
if($results = mysql_query($sql,$conn)) {
$dataHtml.= '<table>';
while($row = mysql_fetch_array($results))
$dataHtml.= sprintf('<tr><td>%d</td><td>%s</td><td>%s</td><td>%d</td></tr>'.PHP_EOL,
$row['id'], $row['name'], $row['anime'], $row['age']);
$dataHtml.= '</table>';
mysql_free_result($results);
}else{
print "データの取得に失敗しました";
}
としてみたのですが・・・良かったのでしょうか・・・?
今ページの方で、「データがありません」と表示される状態です。
度々申し訳ないのですが、ご指摘いただけたらと思います。
No.3
- 回答日時:
↓の回答ですが、ページ番号ではなく、offset 値を直接渡しています。
#後なんか bug があった気がするんですが、ちょっと思い出せません。
適当なファイル名(pagingSample.phpとか) に保存してアクセスしてください。
テーブルは以下のようにしたらしいです。
CREATE TABLE TABLE1 (
id int AUTO_INCREMENT PRIMARY KEY,
name varchar(256) NOT NULL,
anime varchar(256) NOT NULL,
age int ) ENGINE=InnoDB CHARSET=utf8;
以前の質問に id を追加しただけだと思います。
ノリで30分ぐらいで書いたソースなので、もう少し効率的に書けそうですが、参考にしてみてください。
この回答への補足
さらについでで申し訳ないのですが・・・
この場合の
$self= basename(__FILE__);
「__FILE__」には作ったPHPのファイル名を置き換えるということで良いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysql_fetch_objectの書き方を...
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
エクセルVBAについて
-
PHPでMY SQLの連想配列をリンク...
-
phpでmysqlを使ってデータベー...
-
SQLのSUM関数で取得した値を参...
-
sortable ギブアップです…助け...
-
連想配列、オブジェクト配列の...
-
phpとSQLでアクセスカウンタと...
-
SQLiteのhtml表示
-
PHPで[]の使い方について
-
phpでデータリスト作成
-
トランザクション処理
-
PHPシステムでSQLのUPDATEがあ...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
PHP + MySQLを使用して詳細画面...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
php テーブルが作成できない
-
dbに登録したデータをphpのプル...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
DBで検索結果に該当するデータ...
-
文字化けが解決できません。お...
-
SELECT結果から動的にコンボボ...
-
checkboxクリック時、SQLを実行...
-
PHPでMySQLデータを呼び出し、w...
-
while文の中にwhile文を書きた...
-
sortable ギブアップです…助け...
-
重複レコードをグループ化した...
-
PHP と MySQL でテーブルの行数...
-
PHPでMySQLのデータを2次元配...
-
mysql>PHPにデータ表示、10件ご...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
ラジオボタンをループすること...
-
PHP+MySQLでの配列のinsert文に...
おすすめ情報