PHPで、1ページに20件表示とか ページング機能をつけたいのですが一向に分かりません。ASPでは、pagesize関数で作れたのですが・・・。
サンプルソースとかありませんか?

A 回答 (2件)

セッション管理を使ってやるのが一般的です。


この質問では、何のデータを表示するのか分かりませんが、例えば、データベースにとろくされているデータを表示するときは、SQL文とオフセットをセッションに記憶させておいて、次ページを表示します。

<?php
$offset=0;
$size=20;
session_start();
session_register("sql");
$sql="select * from table_name LIMIT $size OFFSET $offset";
 :
 :
$offset=$offset+$size;
 :
 :
の様な形です。(省略しすぎ?(^^;)

この回答への補足

DBからのデータの表示なのですが、
LIMIT OFFSET というのは・・・??
今調べてみたのですが SQLの構文とかですか??
こんなことも分からなくてお恥ずかしい限りです・・・。

補足日時:2001/10/02 15:52
    • good
    • 0

DBは何でしょう?


もしPostgreSQLであれば、私が作った、「次を表示クラス」を差し上げますが。

メールアドレスも必要ですが。
    • good
    • 0
この回答へのお礼

PostgreSQLです。
ぜひお願いします。
質問者データのコメントのところにアドレス載せました。
そこに、メールお願いいたします。

お礼日時:2001/10/02 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QASPソースコードをPHPソースコードに書き換え

下記のASPソースコードをPHPソースコードに書き換えようとしています。

<%
Set ObjConn = Server.CreateObject("ADODB.Connection")

ObjConn.Open "database_1"

Set ObjRS = Server.CreateObject("ADODB.Recordset")

ObjRS.Open "food", ObjConn, 3, 3

ObjRS.Filter = "jewelry_0_ID=" & Request.QueryString("No")

If ObjRS.EOF Then
Response.Write("選択された名称の区分はありません。<br><hr>")
Response.Write("<a href=""index.html"">区分選択に戻る</a>")
Response.End
End If

Do While Not ObjRS.EOF
Response.Write("<tr><td>")
Response.Write(ObjRS.Fields("名称").Value)
Response.Write("</td><td>")
ObjRS.MoveNext
Loop

ObjRS.Close

ObjConn.Close
%>

PHPに不慣れであるため、このうち、

Set ObjRS = Server.CreateObject("ADODB.Recordset")

ObjRS.Open "jewelry", ObjConn, 3, 3

ObjRS.Filter = "jewelry_0_ID=" & Request.QueryString("No")

と、

ObjRS.Close

をどのようにすればよいか、分かりません。PHPには、レコードセットを開くという概念はないのでしょうか?下記URIには、見当たりません。

http://php.plus-server.net/ref.uodbc.html

下記のASPソースコードをPHPソースコードに書き換えようとしています。

<%
Set ObjConn = Server.CreateObject("ADODB.Connection")

ObjConn.Open "database_1"

Set ObjRS = Server.CreateObject("ADODB.Recordset")

ObjRS.Open "food", ObjConn, 3, 3

ObjRS.Filter = "jewelry_0_ID=" & Request.QueryString("No")

If ObjRS.EOF Then
Response.Write("選択された名称の区分はありません。<br><hr>")
Response.Write("<a href=""index.html"">区分選択に戻る</a>")
Response.End
End If

Do While Not O...続きを読む

Aベストアンサー

phpでは、まずsql文の発行が必要で、レコードを返すSQL文においてはレコードセットをfetchするという形式になります。
connect したら、odbc_execまたは、 odbc_prepare → odbc_execute でsql文を発行、
その後、odbc_fetch_arrayやodbc_fetch_object で一行ずつ取り出します。
htmlのtableタグ形式で全行出力するならodbc_result_all
拡張子phpになってるマニュアルの方が、user noteにいろいろ例文があります。
http://jp.php.net/manual/ja/function.odbc-execute.php

QPHP MySQL ページング処理

はじめまして、
現在ページング処理で悩んでます。ご協力お願いします。
PHP4.4.6とMySQLを使用し
1ページ10件 MAXページ99ページ
前次12345・・・のように表示させ・・・の部分をクリックすると
データが51件以上 前次45678・・・
データが60件以下 前次23456
データが70件以下 前次34567
のように表示させるにはどのような処理、考え方をしたらよいでしょうか?
なんとか自力で 前次12345 は表示、動作できたのですがその先どうしたらいいか解かりません。質問解かりにくいかもしれませんが、どうかお知恵をお貸しください。よろしくお願いします。

Aベストアンサー

#3です。
もう一度読み直したのですが、、
>前次12345・・・
は1をクリックした場合どこへ飛ぶのでしょうか。
現在1ページ目が表示されているとすれば前という表示もあるとおかしいので、
次23456・・・
となるのではないでしょうか?
2ページ以降を表示しているとしても1というのはどういう状況でなら表示するのかが思い浮かびませんでした。。
その辺が気になったのですがとりあえず自分の解釈の前提で説明させていただきます。参考程度に目を通してください。

どこまで出来ているのかちょっとわからないのでどこから説明したらよいのかもわかりませんが、私はSQLにLIMITをかけて処理をする方法を普段使っています。
最初のページからスタートした場合私の場合なら
次 2 3 4 5 6 ・・・
という表示にします。
次と2は同じリンクが張られます。
10件ずつ表示することを前提に、
LIMITに使うオフセット数は
2→offset=10
3→offset=20
4→offset=30
以下6まで続く
となります。
つまり(ページ数-1)*10がそのページに張られるリンクのオフセット数となります。
で本題というか
60<データ件数<=70 なら 前次34567
の考え方ですが、仮にデータ件数が68だとするとページ数は7ですよね。
なので(7-1)*10=60が最後のページのオフセット数です。
表示させたいのは
34567
なのですが、表示が34567となるためには3の前にある2をクリックした時ですよね。
ということは2に張るリンクのオフセット数と同じオフセット数ということになります。
長くなってしまいましたが
・・・に張るリンクのオフセット数は
最後のページのオフセット数 - (10*5)
となります。
この例の場合は60 - 50 = 10
ですね。

$onepage = 10; //1ページの表示件数
$self = $_SERVER['SCRIPT_NAME'];
$lastofst = ($lastpage-1)*10; //最終ページオフセット
$jumpofst = $lastofst - 50; //リンクに張られるオフセット
//リンク先文字列生成
$jump = $self . "?ofst=" . $jumpofst . "&onepage=" . $nepage;
$str .= '<a href="'.$jump.'">'."・・・".'</a>';
echo " ".$str;

こんな感じかと思います。
34567自体の表示は
最後が7とわかればスタートが7-5から1を加えながら7になるまでforで生成してあげればいいですよね。

#3です。
もう一度読み直したのですが、、
>前次12345・・・
は1をクリックした場合どこへ飛ぶのでしょうか。
現在1ページ目が表示されているとすれば前という表示もあるとおかしいので、
次23456・・・
となるのではないでしょうか?
2ページ以降を表示しているとしても1というのはどういう状況でなら表示するのかが思い浮かびませんでした。。
その辺が気になったのですがとりあえず自分の解釈の前提で説明させていただきます。参考程度に目を通してください。

どこまで出来ているのか...続きを読む

Qphpでページング処理の書き方

環境:php+mysql

サイト内検索をphpで書いてます。

■やりたいこと
検索結果が10件として1ページの検索結果数を3件とした場合
ページングは4ページまでとして、最終ページの4ページ目で
「次へ」のボタンを非表示にしたいです。

■現状
検索結果は表示されますが、検索結果ページで 「次へ」 や 「戻る」
ボタンをつけて動作する際、いつまでの「次へ」やボタンが表示されページングできてしまいます。。

実際に書いている処理
<?php
if ($num > 3){//検索結果が3件以上でページングが表示される
if($page>0){
echo "<a href='./re.php?key={$a}&pages=".($page-1)."'>前の3件</a>";
}
echo "|<a href='./re.php?key={$a}&pages=".($page+1)."'>次の3件</a>";

}
?>


if ($num > 3)で何か処理を書かなければならないと思いますが、、
アドバイスいただければ幸いです。
よろしくお願いいたします。

環境:php+mysql

サイト内検索をphpで書いてます。

■やりたいこと
検索結果が10件として1ページの検索結果数を3件とした場合
ページングは4ページまでとして、最終ページの4ページ目で
「次へ」のボタンを非表示にしたいです。

■現状
検索結果は表示されますが、検索結果ページで 「次へ」 や 「戻る」
ボタンをつけて動作する際、いつまでの「次へ」やボタンが表示されページングできてしまいます。。

実際に書いている処理
<?php
if ($num > 3){//検索結果が3件以上でページングが表示される
if($page>0...続きを読む

Aベストアンサー

最後のページNoを算出して、それ以下なら次へを表示すればよいのでは?
$page_limit = ceil($num/3); //3で割って切り上げ
if($page < $page_limit){ echo "次へ";}

余計なことですが、クエリが pages で変数が$page。 発見しにくいバグが紛れ込みやすいような…。

Qデータベースのページング出力を行うPHPのコード

現在、phpとmySQLを勉強しています。

データベース名:animal、テーブル名:pet、フィールド名が順にID:title:url:scoreで
1:ねこ:neko.com:43
2:いぬ:空白:24
3:空白:空白:空白
4:とり:bird.com:62

というデータがあります。

このとき、
1<a href="neko.com">ねこ</a>43<br>
2<a href=" ">いぬ</a>24<br>
3<a href=" "></a><br>
4<a href="bird.com">とり</a>62<br>

のように10行ずつhtmlに出力するPHPを書こうと思っています。
10行ずつですので、上の例だとURLの最後の書き換えによってpage=2、page=3、…とアクセスできます。


自分でもmysqlを呼び出し、要素を変数に格納して、foreachを使って最後まで順繰りに出力するように作成して、ページングするように作ってみたのですが、どうも正常に出力されません。

考えましたがどうにも原因が不明なので、どなたかこのような動作を示すPHPの模範コードを書いていただけないでしょうか。

PHPは未だ勉強中ですが、教えていただいたコードと自分のコードを比較して、より精進したいと思います。

どうかよろしくお願いします。

現在、phpとmySQLを勉強しています。

データベース名:animal、テーブル名:pet、フィールド名が順にID:title:url:scoreで
1:ねこ:neko.com:43
2:いぬ:空白:24
3:空白:空白:空白
4:とり:bird.com:62

というデータがあります。

このとき、
1<a href="neko.com">ねこ</a>43<br>
2<a href=" ">いぬ</a>24<br>
3<a href=" "></a><br>
4<a href="bird.com">とり</a>62<br>

のように10行ずつhtmlに出力するPHPを書こうと思っています。
10行ずつですので、上の例だとURLの最後の書き換え...続きを読む

Aベストアンサー

簡単なページング機能付きで書いてみました。
細部でなにかしら修正が必要かもしれないのでがんばってください。
(質問文を見るとGETを使うような記述でしたがこれはPOSTで処理してます)
検索機能とか付けてみるのも勉強になると思いますよ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="No-Cashe">
<meta http-equiv="Cache-Control" content="No-Cache">
<title>リスト</title>
<script type="text/javascript">
<!--
function changepage (page) {
document.forms["linkform"].page.value = page;
document.forms["linkform"].submit();
}
-->
</script>
</head>
<body>
<?php
// MYSQL DB接続パラメータ設定(自分の環境に合わせて設定)
$host=""; // ホスト名
$user=""; // ユーザー名
$pass=""; // パス
$dbname=""; // 使用DB名

// 表示するページの決定
if (isset($_POST["page"])) {
$page=$_POST["page"];
} else {
$page=1;
}
// MYSQLコネクト
mysql_select_db($dbname,mysql_connect($host,$user,$pass)) or die("DBコネクトエラー");
// 1ページ表示最大件数設定
$maxrow=10;
// 全件数を取得
$sql = "SELECT count(*) as count FROM pet";
$result=mysql_query($sql);
$row=mysql_fetch_assoc($result);
$count = $row["count"];
// 表示するページのデータの先頭行と最終ページの値を計算する
$first = (($page-1)*$maxrow);
$maxpage=intval((($count-1)/$maxrow)+1);
// ページリンク作成(表示ページの番号は少し大きくする)
$pagelink = "全".$count."件<br>\n";
for ($i=1;$i<=$maxpage;$i++) {
$pagelink = $pagelink."<a href=\"#\" onclick=\"changepage('".$i."');return false;\">";
if ($i==$page) {
$pagelink = $pagelink."<font size=\"+2\">".$i."</font></a> ";
} else {
$pagelink = $pagelink.$i."</a>\n";
}
}
print($pagelink."<br><hr>");

// 情報を取得
$sql = "SELECT id,title,url,score FROM pet";
$sql = $sql." ORDER BY id limit ".$first.", ".$maxrow;
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)) {
?>
<?php print($row["id"]); ?><a href="<?php print($row["url"]); ?>"><?php print($row["title"]); ?></a><?php print($row["score"]); ?><br>
<?php
}
?>
</table>
<form action="list.php" name="linkform" method="post">
<input type="hidden" name="page" value="">
</form>
</body>
</html>

簡単なページング機能付きで書いてみました。
細部でなにかしら修正が必要かもしれないのでがんばってください。
(質問文を見るとGETを使うような記述でしたがこれはPOSTで処理してます)
検索機能とか付けてみるのも勉強になると思いますよ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="No-Cashe">
<meta http-equiv="Cache-Control" content="No-Cache">
<title>リスト</title>
<script type="text/javascript">
<!--
function ...続きを読む

Q$_REQUEST とphpファイルでphp?item=500&xt=100とか言うああいうページと関連があるのでしょうか

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1437399
で$_REQUEST の理解を深めたく質問中ですが
$_REQUEST の[ ]の中の変数は結局、
?item=500&xt=100の部分を作るためのものなんでしょうか
とくにDBとの関連で必要でしょうか

たとえば
stage.phpのコードで
<?php
…$name=$_REQUEST['name']…
if($name='a'){echo'<html>a</html>'}
if($name='b'){echo'<html>b</html>'}
stage.php?name=a
stage.php?name=b
というページができるという理解でしょうか?
(すいません、質問に個所でしてしまって)

Aベストアンサー

質問を読む限り、大きな勘違いをしているように思います。

$_REQUEST変数は、スクリプトの外部から値を得るための変数です。例えばstage.php?a=1 というリクエストがあったら、stage.php内の$_REQUEST["a"]に1が入っています。ただそれだけの変数です。

外部から値を得る変数は他にも$_POST,$_GET,$_COOKIEなどあります。これは例えばPOSTメソッド送られたパラメータ、COOKIEの値など、外部の値の種類によって変数が違います。$_REQUEST変数はこれらが全部含まれているんです。仮に$_POST["a"]に1、$_COOKIE["b"]に2という値が入っていたとすると、#_REQUEST["a"]=1,$_REQUEST["b"]=2という値が同時に現れます。

個人的にはほとんど使わない変数ですね。なぜならその値がどこから来たのかはわからないので、下手をするとセキュリティホールになり得るからです。$_REQUEST変数を研究する前に、$_POST,$_GET,$_COOKIEあたりを先に理解した方がいいと思いますし、スクリプト上の実装もこれらを使った方が良いと思います。

どこまで噛み砕いて書けばいいのかわからないのですが、これでもわからなければ初心者向けの入門本で基本的なところを学んだ方が良いかも知れません。

質問を読む限り、大きな勘違いをしているように思います。

$_REQUEST変数は、スクリプトの外部から値を得るための変数です。例えばstage.php?a=1 というリクエストがあったら、stage.php内の$_REQUEST["a"]に1が入っています。ただそれだけの変数です。

外部から値を得る変数は他にも$_POST,$_GET,$_COOKIEなどあります。これは例えばPOSTメソッド送られたパラメータ、COOKIEの値など、外部の値の種類によって変数が違います。$_REQUEST変数はこれらが全部含まれているんです。仮に$_POST["a"]に1、$_COOKIE...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報