![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
私はPHPの初心者ですが、ステップアップを兼ねてサイト内検索を作ろうかと思っています。
今回こちらのサイト様(http://affiliate.aki-f.com/prog/cat/cat9.html)を参考にさせて頂きました。
・絞込み検索(and検索)
・1ページを10件表示に制限する
上記のサンプルプログラムを組み合わせてみたのですが
表示結果に問題があり、なんとか修正できないかと思い投稿させて頂きました。
------------------------表示結果------------------------
2件見つかりました。全2件 | 次の10件
・JavaScriptハッカーズ・プログラミング
・コピーするだけですぐに使えるJavaScript
・<空白>
・<空白>
・<空白>
・<空白>
・<空白>
・<空白>
・<空白>
・<空白>
--------------------------------------------------------
2件表示のはずが、10件表示されてしまいます。
さらに、2件しか該当していないに「次の10件」まで表示されてしまいます。
なんとか、検索結果に基づいた表示にしたいのですが
どなたか知恵を貸していただければと思います。
宜しくお願い致します。
--------------------------ソース-------------------------
if($_GET["key"]==""){
print"キーワードを入力してください";
}else{
$KeyWord=$_GET["key"];
$KeyWord=htmlspecialchars($KeyWord);
$KeyWord=mb_convert_encoding($KeyWord,"EUC-JP","auto");
$KeyWord=mb_convert_kana($KeyWord,s);
$ArrKeyword=explode(" ",$KeyWord);
$Result=array();
$Data=file("item.csv");
for($i=0;$i<sizeof($Data);$i++){
$lines=strip_tags($Data[$i]);
$Match=true;
for($n=0;$n<sizeof($ArrKeyword);$n++){
if(!eregi($ArrKeyword[$n],$lines)){
$Match=false;
break;
}
}
if($Match==true){
array_push($Result,$Data[$i]);
}
}
?>
<?php
$n=sizeof($Result);
if($n==0){
print"見つかりませんでした";
}else{
print"{$n}件見つかりました";
?>
<?php
$P=$_GET["p"];
if($P>0){
$Prev=$P-1;
$PrevPage="<a href='allitem.php?p={$Prev}'>前の10件</a>";
}
$Size=sizeof($Result);
if($Size/10-1>$P){
$Next=$P+1;
$NextPage="<a href='allitem.php?p={$Next}'>次の10件</a>";
}
?>
全<?=$Size?>件 | <?=$PrevPage?> <?=$NextPage?>
<ul>
<?php
for($i=$P*10;$i<$P*10+10;$i++){
$line=explode(",",$Result[$i]);
$ID=$line[0];
$Title=strip_tags($line[3]);
print"<li><a href='item.php?id={$ID}'>{$Title}</a></li>";
}
?>
<?php
}
}
?>
</ul>
----------------------------------------------------------
No.2ベストアンサー
- 回答日時:
こんにちは。
#1です。さて お礼のコメントありがとうございました。
>「次の10件」の問題は、頭では理解しているつもりなのですがプログラムの具体的な修>正までたどり着けませんでした。。。
大丈夫大丈夫、もう一息ですって(笑)。
「次の10件」の表示の考え方…下に記載するのは
ひとつの例ですが…
まず
・その件数をすべて表示するには、何ページ必要か(A)
・現在表示されているページ数は何ページ目か(B)
を考えると、「次の10件」が表示されていいのは
A>B
の時だけですね。A<B は そもそもあり得ないし、
A=Bなら最後のページということになりますからね。
そしてAは、
全件数($Size) A
--------------------------
0~10 のとき 1
11~20 2
21~30 3
…
になるように、$Sizeを使って表現する。
Bは、$Pより1大きいだけですね。
これを、if 文の条件式に入れてやれば、うまく
動作すると思います。
もし追加でご質問等ありましたら、お気軽にどうぞ。
時間がかかってしまって誠に申し訳ありません。
アドバイスを元に試行錯誤しまして無事解決いたしました。
この度は本当に助かりました。
No.1
- 回答日時:
こんにちは。
まず、
$Size = 表示すべきデータの総件数
$P = 現在の表示ページ数(0=1ページ目)
という解釈でよろしいでしょうか?
まず「次の10件」という文字が表示される条件を考えてみると、
表示すべきデータの総件数が、$P*10+10、つまり現在ページの
最終行に表示されるべき「番目数(表示対象となるデータの
何番めにあたるか)」よりも大きい必要がありますね。
たとえば、総件数が22件で、現在のページ数が2($Pの値は1)
だったら、表示すべきですね。逆に、総件数が2件で、現在のページ
数が1($Pの値は0)ならば、「次のページ」がないのですから、
表示してはダメということになりますね。
次に、10件表示されてしまうケース。
ソース終わりのほうの
--------------------------------------
for($i=$P*10;$i<$P*10+10;$i++){
--------------------------------------
ですが、これだと $P の値がいくつであっても、無条件に10回
処理されてしまうことになりますね。
ですので、
「$i」の値が $Sizeを超えるようであれば そこで終了してループを抜ける
というようにプログラムすることが必要でしょう。
いちおう考え方だけカンタンに示してみました。追加でご質問あれば、気軽にどうぞ。
アドバイスを元にプログラムを修正致しましたら、10件表示される問題は解消いたしました。
有難う御座いました。
「次の10件」の問題は、頭では理解しているつもりなのですがプログラムの具体的な修正までたどり着けませんでした。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「次の10件を表示する」のよ...
-
<A href ~で複数の値を渡したい
-
<python>戻り値
-
日付を基にした乱数生成
-
ブラウザ上でリストの出し入れ
-
「取得先」という表現について
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
excel access連携 このテーブル...
-
【C#】DataGridViewの最大列数...
-
phpでcookieがうまく保存されない
-
小数点以下0の非表示
-
ブラウザを閉じた後もセッショ...
-
format関数について
-
Excel VBA:特定の文字列以降(...
-
ミュージックのアートワークを...
-
バッチファイルでpingの結果を...
-
1ヶ月後の日付を出力したい
-
WordでExcelデータを差込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<A href ~で複数の値を渡したい
-
「次の10件を表示する」のよ...
-
テーブルに送信ボタンをつける
-
日付を基にした乱数生成
-
PHPのif文「POSTしていな...
-
POSTされたかどうか確かめる方...
-
PHPでwait処理ってできます?
-
microtime関数は、結構イイカゲ...
-
Google chart API 、PHP、MySQL...
-
vbYesNoの使い方
-
PHP ハイパーリンク
-
if (isset($_a)&&$_a)この意味は
-
アクセスキーについて
-
「ソースコードは 左~右へと読...
-
<python>戻り値
-
Luaにて、and or の組み合わせ...
-
null代入とunset()の違いについて
-
2個のプログラムは結果は同じ...
-
PHP5で 定義されているINFの実...
-
逆順表示したい?
おすすめ情報