
はじめまして、こんばんは。
HTMLもままならないPHP初心者ですが、ここ2ヶ月、3冊の本を購入し、実際に動作させながら学んでいる状況です。
さて、今回質問させて頂きますのも、DBからPHPにより検索結果を表示させた際、検索にヒットした全ての一覧を1ページ10件ずつ掲載するようなページを、要はここ「教えてGoo!」のように、検索結果を10件ずつ表示させ、ページの下に[1|2|3|...]のようにページ移動のリンクを持つページを作りたいと考えております。
こちらの過去ログにも同じような質問があり、また、他のサイトでも近い内容のものは全てプリントアウトし、一日中資料と睨めっこしておりますが、どれも上手くいかずに困り果てております。。
勿論、丸投げでお願いするつもりはないのですが、皆様のお知恵をお借りできればと質問させて頂きました。
可笑しなところも含め、ご指導いただければ幸いです。宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
ID入力:<input type=\"text\" name=\"category\" value=\"$category\" size=\"40\">
見た所、こんな行があります。
しかし、ページ番号のURLにはパラメータ「category」がありません。
きっと検索1ページのURLには~.php?category=xxxってなってると思います。
2ページ目はcategoryがありませんから、SQLで抽出されてません。
という事で、
print('<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>');
を
print('<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'&category='.$category.'">'.$i.'</a>');
に変更。
これでどうでしょうか?
この回答への補足
naktak様
こんばんは。色々とお世話になりました!
只今、カテゴリ登録を日本語ではなく、数値で登録するよう設定したところ、無事、望んでいる結果を得ることが出来ました。
事細かなご指導に感謝しております。有難う御座いました!
naktak様
こんばんは。お世話になっております。
今、ご教授いただいた内容を変更してみましたが、移動後のページのフォームが文字化けしてしまい、同じように「掲載はありません」といった状況になってしまいました。
私のスクリプトに、検索フォームがあるのですが、実際はフォームを非表示にするつもりでおります。
と申しますのも、先に申したように、ここで一度実際に検索し、その検索結果をリンク元であるHTMLによるページに<a href~...>として貼り付けようと考えている事からの手段です。
的を外した説明になりがちでは御座いますが、この検索結果は、categoryというfieldから、10種類ほど中から1つの種別を選んで検索結果(一覧)として表示させようと考えております。
このDBへの登録する際、このfieldには日本語で登録するよう設定しているのですが、今回の文字化けということを考えると、日本語ではなく数値などで登録すれば、この文字化けを回避し、正常な検索結果を得ることが出来るのかな?とも思いましたが、改めご意見をお伺いできれば幸いに思います。
尚、naktak様からお教えいただいているスクリプトを基にした先に記述した私のスクリプト内に、
$sql= "select * from buyer where category like '$category' order by tourokubi desc";
というものがありますが、
buyer where category like '$category'
を外すことで、正常に機能することまでは確認しているのですが、これだと先にも申したように、categoryfield内の全てを検索してしまうため、試行錯誤を繰り返しているうち、このような手段を取った経緯となっております。
上手く説明が出来ておりませんが、引き続きご指導頂ければ幸いです。お手数お掛けいたしますが宜しくお願い申し上げます。
No.3
- 回答日時:
失礼、mysql_num_rowsなんてあるんでしたね。
<?php
//表示行数
define(_DISPROW_, 10);
//DB接続
$con = mysql_connect("host", "user", "pass");
mysql_select_db("database", $con);
//対象レコードとページ数の取得
$sql = "SELECT id FROM table ORDER BY id";
$qry = mysql_query($sql);
$allrow = mysql_num_rows($qry);
$pagecnt = ceil($allrow / _DISPROW_);
if ($allrow == 0) {
print <<< nodata
<table>
<tr><td>掲載はありません</td></tr>
</table>
nodata;
mysql_close();
exit;
}
else {
print <<< rows
掲載数{$allrow}件
rows;
//表示ページのデータを表示
mysql_data_seek($qry, isset($_GET["page"])?($_GET["page"] - 1) * _DISPROW_:0);
echo "<table>";
$i = 0;
while($row = mysql_fetch_array($qry)){
if ($i == _DISPROW_) break;
print <<< data
<tr>
<td><a href="../member.php?id={$row['id']}">{$row['id']}</a></td>
</tr>
data;
$i++;
}
echo "</table>";
}
mysql_close();
//ページ番号リンクを生成
for ($i = 1; $i <= $pagecnt; $i++) {
print('<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>');
$i <> $pagecnt?print(" | "):"";
}
?>
プログラムって書き方、ほんと色々ありますねぇ。
なんか痛感しました(笑)
この回答への補足
naktakさま
おはよう御座います。お返事遅れて申し訳ありません。あれからnakutak様からご教授いただいたスクリプトを実行し、感激しつつ、その後試行錯誤を繰り返していた次第です。以下、そのスクリプトなのです。
説明が足りなかったのか、実は今回の内容と申しますのも、あるHTMLページに貼ってあるリンクから移動すると、本PHPファイルに移動し、検索一覧が表示されている…などといった内容のものを考えているのですが、浅はかな考えなのか、本ファイルにある検索フォームで検索後(GETにて渡された)のURLを、最初のHTMLに<a href~>として、貼り付けていた次第です。
以上のことから、検索フォームにて検索した検索結果を見ると、最初の1ページは表示されるのですが(該当ファイル数は検索されているが)、2ページ目以降が「掲載はありません」といった結果となってしまいます。
あれから試行錯誤を繰り返してはいるものの、思うような結果を得ることが出来ずに居ます。
お手数おかけ致しますが、引き続きアドバイス頂ければ幸いです。宜しくお願い致します。
<?php
extract($_GET);
echo "
<br>
<p>完全一致のIDを検索</p>
<form action=\"test.php\" method=\"get\" >
<p>ID入力:<input type=\"text\" name=\"category\" value=\"$category\" size=\"40\"></p>
<p><input type=\"hidden\"name=\"page_num\"value=\"0\">
<input type=\"submit\" value=\"検索\">
<input type=\"reset\" value=\"リセット\"></p>
</form>
";
//表示行数
define(_DISPROW_, 10);
//DB接続
$con = mysql_connect("localhost", "root", "3lc4dp4hf1");
mysql_select_db("business", $con);
//対象レコードとページ数の取得
$sql= "select * from buyer where category like '$category' order by tourokubi desc";
$qry = mysql_query($sql);
$allrow = mysql_num_rows($qry);
$pagecnt = ceil($allrow / _DISPROW_);
if ($allrow == 0) {
print <<< nodata
<table>
<tr><td>掲載はありません</td></tr>
</table>
nodata;
mysql_close();
exit;
}
else {
print <<< rows
掲載数{$allrow}件
rows;
//表示ページのデータを表示
mysql_data_seek($qry, isset($_GET["page"])?($_GET["page"] - 1) * _DISPROW_:0);
echo "<table>";
$i = 0;
while($row = mysql_fetch_array($qry)){
if ($i == _DISPROW_) break;
print <<< data
<tr>
<td><a href="../member.php?renban={$row['renban']}">{$row['renban']}</a></td>
</tr>
data;
$i++;
}
echo "</table>";
}
mysql_close();
//ページ番号リンクを生成
for ($i = 1; $i <= $pagecnt; $i++) {
print('<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>');
$i <> $pagecnt?print(" | "):"";
}
?>
No.2
- 回答日時:
1.対象レコードの件数取得SQLを投げる。
2.1.÷10よりページ数を算出する。
3.SQLを投げる。
MySQLの場合はSQL文の最後にLIMIT $x, 10とする。
$xは表示ページ番号×10。
こんなのでいいと思います。
<?php
//表示行数
define(_DISPROW_, 10);
//DB接続
$con = mysql_connect("localhost", "root", "root");
mysql_select_db("xoops", $con);
//対象件数よりページ数を取得
$sql = "SELECT COUNT(*) FROM xoops_tplsource";
$qry = mysql_query($sql, $con);
$allrow = mysql_result($qry, 0);
$pagecnt = ceil($allrow / _DISPROW_);
//表示ページ番号のレコードを表示
$reccnt = isset($_GET['page'])?($_GET['page'] - 1) * 10:0;
$sql = "SELECT tpl_id FROM xoops_tplsource ORDER BY tpl_id LIMIT ".$reccnt.", "._DISPROW_;
print($sql."<br>");
$qry = mysql_query($sql, $con);
while ($row = mysql_fetch_array($qry)) {
print($row["tpl_id"]."<br>");
}
//ページ番号リンクを生成
for ($i = 1; $i <= $pagecnt; $i++) {
print('<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>');
$i <> $pagecnt?print(" | "):"";
}
?>
<?php
//表示行数
define(_DISPROW_, 10);
//DB接続
$con = mysql_connect("host", "user", "pass");
mysql_select_db("database", $con);
//対象件数よりページ数を取得
$sql = "SELECT COUNT(*) FROM table";
$qry = mysql_query($sql, $con);
$allrow = mysql_result($qry, 0);
$pagecnt = ceil($allrow / _DISPROW_);
//表示ページ番号のレコードを表示
$reccnt = isset($_GET['page'])?($_GET['page'] - 1) * 10:0;
$sql = "SELECT id FROM table ORDER BY id LIMIT ".$reccnt.", "._DISPROW_;
print($sql."<br>");
$qry = mysql_query($sql, $con);
while ($row = mysql_fetch_array($qry)) {
print($row["id"]."<br>");
}
//ページ番号リンクを生成
for ($i = 1; $i <= $pagecnt; $i++) {
print('<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>');
$i <> $pagecnt?print(" | "):"";
}
?>
naktakさま
こんにちは。ご丁寧なご指導を有難う御座います!
只今、アドバイス頂いたとメールがありましたが、後ほど改めてご報告させていただきますので、宜しくお願い申し上げます。
取り急ぎご挨拶まで・・有難う御座いました!
No.1
- 回答日時:
具体的なソースを見たなら、どこがわからないか
を例を挙げながら聞いたほうが効率的です
yambejpさま
お返事有難う御座います。スクリプトも記載しようと送信してはみたのですが、文字数制限に引っかかってしまい、投函することが出来ずにおりました。今回初めての質問なので要領が掴めておりません。以下、そのスクリプトです。
動作環境…PHP4.3 MySQL4.0 Apacha1.3 winXP
(以下、スクリプトは検索結果専用ファイルとして、検索結果一覧ページとなっております。)
<?php
extract($_GET);
mysql_connect('localhost','root','********');
mysql_select_db('TESTdb');
$sql= "select * from test_tb where category like '$category' order by date desc";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
f($rows == 0){
echo "<table>\n";
echo "<tr>\n"; echo "<td>\n";
echo " 掲載はありません";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
exit;
}
else {
echo "掲載数";
echo "件";
while($row = mysql_fetch_array($result)){
echo "<table>\n";
echo "<tr>\n";
echo "<td>\n";
echo "<a href=\"../member.php?id=",$row["id"],"\">", $row["file1"] ,"</a>\n";
echo "</td>\n"; echo "</tr>\n";
echo "<tr>\n"; echo "<td>\n";
echo $row["file2"];
echo "<br />";
echo ": ";
echo $row["file3"];
echo "<br />";
echo "掲載日:";
echo $row["date"];
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
}
}
mysql_close();
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
csvファイルについて教えて下さ...
-
PHP8でWarning:Undefined varia...
-
PHPSpreadsheetによる書き出し...
-
PHPの変わった閉じタグの必要性...
-
セッション関数を使わずにファ...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sqlから多次元配列に要素を格納...
-
phpのエラーについてです
-
DB(MySQL)から複数行のデータを...
-
リストから詳細画面に遷移する...
-
Resource id #3 をフィールドの...
-
テーブルに入っているデータと...
-
stringaddslashes 半角¥が消える
-
PHP+mysqlでSQL文に文字数制限...
-
会員登録したらメールが送られ...
-
検索表示について
-
XAMPPで画面が真っ白になります。
-
ボタンのonclick時における関数...
-
mysql_queryが動かなくて困って...
-
PHP+MYSQL IF文の初歩
-
PHP+MySQLでの検索結果の横並び...
-
"と'の使い方を教えていただけ...
-
mysql_queryでDB検索をしたいが...
-
C++でMySQLを処理したいです
-
縦に長い<table>でなく横に長い...
-
mariadbでのエラー
おすすめ情報