宜しくお願いします。
下記URLを参考にアイテム別ページを作成したのですが
データ量が多い為クエリを利用して10件毎にページを分けたいのですが
やり方が思い浮かびませんどのように記述すれば出来ますでしょうか
http://affiliate.aki-f.com/prog/page/33.html
<?php
require_once('common.php');
$Cid=$_GET['cid'];
$Data=file('cat.csv');
for($i=0;$i<sizeof($Data);$i++){
$line=explode(",",$Data[$i]);
if($line[0]==$Cid){
$CatTitle=$line[1];
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title><?=$CatTitle?> | サンプルリンク集</title>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<body>
<a href="index.php">HOME</a>
<h1><?=$CatTitle?></h1>
<table border="1">
<tbody valign="top">
<?php
$Data=file('item.csv');
for($i=0;$i<sizeof($Data);$i++){
$line=explode(",",$Data[$i]);
if($line[1]==$Cid){
$ImageLink=DeleteEsc($line[2]);
$TextLink =DeleteEsc($line[3]);
?>
<tr>
<td><?=$ImageLink?></td>
<td>
<?=$TextLink?><br><br>
<a href="item.php?id=<?=$line[0]?>">詳細を見る</a>
</td>
</tr>
<?php
}
}
?>
</tbody>
</table>
</body>
</html>
item.csvファイルの中身は
あいうえお,abc
かきくけこ,efg
さしすせそ,hij
たちつてと,lmn
以下省略
No.3ベストアンサー
- 回答日時:
for($i=$P*9;$i<$P*9+9;$i++){ のところ。
検索でヒットした場合のみカウントする必要がありますが、これだとヒットするしないにかかわらず$iがカウントされます。その結果、そのページの内でヒットした分だけが表示されるため「ページ毎に表示件数がバラバラ」になるのでしょう。
混乱しないようまずは該当データのみ抜き出してみるとか。
--------------------------------------
//ヒットしたデータ用の配列を用意
$Data_hit=array();
//とりあえずヒットするデータを取得する
foreach($Data2 as $val){
$line=explode(",",$val);
if($line[1]===$Cid) array_push($Data_hit,$line);
}
//ヒットしたデータを更に表示する分に切り詰める
$Data_hit = array_slice($Data_hit,$P*9,9,TRUE);
//あとは表示するだけ
foreach($Data_hit as $line){
echo "$line[0] $line[1]<br>";
}
----------------------------------------
あるいは 2回まわすのがいやなら
//件数は設定変更できるよう変数にしとく。
$kensuu = 9;
//必要な計算をしておいて
$start = $P*$kensuu;
$end = $start+$kensuu;
//該当データのカウント用
$c=0;
//$Data2を回して…
foreach($Data2 as $val){
$line=explode(",",$val);
//該当しなければ、次へ
if($line[1]!==$Cid) continue;
//ここに来る=該当した、ということなのでカウントして
++$c;
//$start以下なら、関係ないので次へ
if( $c <=$start) continue;
//$endまで来たら、おしまい
if( $c >$end) break;
//ここまで来れば、Hitかつ表示範囲内ということなので表示
echo "$line[0] $line[1]<br>";
}
----------------------------------------
とか。
あるいはまた、いちいち Page=3 とかで計算しないで直で表示開始の番号を受け取るAno2さんの方法でも。どちらにしても、せめてfunction、できればclassにした方がよいとは思いますが。
No.2
- 回答日時:
fileで全件読み込んでいるのですから比較的楽なケースだと思います。
「表示スキップ件数」をQueryStringで引き渡すようにして(存在しなければ0=スキップしない)forの開始数値を変えるだけでいいと思います。最後まで表示していなければ(forのLoop内で表示件数の条件でbreakするときには)「次の○○件」のanchor要素を出力(QueryStringで、?skip=10などを生成)すればいいです(件数部分は($skip + 10)で書けます)。
この回答への補足
ありがとうございます!
回答者No.1さんとは別のやり方なのでしょうか
QueryStringというのを参考書で調べましたが載ってませんでした
なのでググって調べてみましたがよくわかりませんでした
QueryStringとはどういう処理をする物なのでしょうか?
No.1
- 回答日時:
たくさんあるデータをページ分割して表示したいということですよね。
データを表示するほかに、次へ >> などでのページ送りのリンクも必要になってきます。「ページング」と呼ばれていて、あちこちで解説されていますからググってみてくだい。
考え方の一例として、1ページ10件で、Page=1 等で受け取れば、
Page=1の時 0~ 9
Page=2の時 10~19
Page=3の時 20~29
~
となりますよね。ということは、
($Page -1) x 件数 から (件数)個のデータを取得・表示すればよいということになります。
以下が分かりやすいかも。
http://fstyle.ddo.jp/archives/2005/10/cgiphp_1.h …
http://tenderfeel.xsrv.jp/php/639/
※一応「 PHP ページャー 」で探せばPEARをはじめいろいろ配布されてはいますが、一度自分のロジックで作成してみることをお勧めします。
ありがとうございます!質問のURLと同じ所にある
http://affiliate.aki-f.com/prog/page/38.html
を参考にページ送りのリンクを作成し
10件以下の表示には成功出来たのですが
for文の良い回し方?が思いつかず
現状ページ毎に表示件数がバラバラの状態です。
以下が現在のphp文章です
恐らく後一歩の段階だと思うのですがどうすれば良いのでしょうか…
<?php
require_once('common.php');
$Cid=$_GET['cid'];
$P=$_GET["p"];
$Data=file('cat.csv');
$Data2=file('item.csv');
for($i=0;$i<sizeof($Data);$i++){
$line=explode(",",$Data[$i]);
if($line[0]==$Cid){
$CatTitle=$line[1];
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title><?=$CatTitle?> | サンプルリンク集</title>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<body>
<a href="index.php">HOME</a>
<h1><?=$CatTitle?></h1>
<?php
//解説(2)
if($P>0){
$Prev=$P-1;
$PrevPage="<a href='cat.php?cid=1&p={$Prev}'>前の10件</a>";
}
//解説(3)
$Size=sizeof($Data2);
if($Size/10-1>$P){
$Next=$P+1;
$NextPage="<a href='cat.php?cid=1&p={$Next}'>次の10件</a>";
}
echo "$PrevPage $NextPage";
echo "<br />";
?>
<table border="1">
<tbody valign="top">
<?php
for($i=$P*9;$i<$P*9+9;$i++){
$line=explode(",",$Data2[$i]);
if($line[2]==$Cid){
$ImageLink=DeleteEsc($line[2]);
$TextLink =DeleteEsc($line[3]);
?>
<tr>
<td><?=$ImageLink?></td>
<td>
<?=$TextLink?><br><br>
<a href="item.php?id=<?=$line[0]?>">詳細を見る</a>
</td>
</tr>
<?php
}
}
?>
</tbody>
</table>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DTOとEntityの差は何ですか。
-
excel access連携 このテーブル...
-
【C#】DataGridViewの最大列数...
-
wordの差し込み印刷で文字...
-
表を表示するコントロールについて
-
WordでExcelデータを差込...
-
C#でのForm間のデータ受け渡し...
-
MSFlexGridのデータを初期化し...
-
GridViewからチェックボックス...
-
INIファイルに一括書き込みを行...
-
Flashにデータを呼び込む
-
★お手上げ状態です。助けてくだ...
-
ActiveReportのサブレポート機...
-
VBA内でのGetPixelを使用した時...
-
MsgBoxの表示について
-
Dosブロンプトでtabを出力したい
-
Yahoo! JAPAN IDを新規取得でき...
-
「取得先」という表現について
-
小数点以下0の非表示
-
オブジェクトの中身の判定(PHP)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DTOとEntityの差は何ですか。
-
wordの差し込み印刷で文字...
-
【C#】DataGridViewの最大列数...
-
WordでExcelデータを差込...
-
excel access連携 このテーブル...
-
ActiveReportのサブレポート機...
-
「外部データの取り込み」とい...
-
GridViewからチェックボックス...
-
★お手上げ状態です。助けてくだ...
-
INIファイルに一括書き込みを行...
-
VBA内でのGetPixelを使用した時...
-
VB.NET 2017の勉強中です。 今...
-
表を表示するコントロールについて
-
C#でのForm間のデータ受け渡し...
-
ASP.NET GridView の検索画面で...
-
C言語で地図を描きたい
-
MSFlexGridのデータを初期化し...
-
ADOを使用してExcelファイルを...
-
回線速度が64kbpsだったら、64k...
-
エクセルVBAで楽天証券に注...
おすすめ情報