住所録を表示するページをPHPで作成しました。
問題なくできたのですが、データが増えたので一度に表示するのは例えば20件とかにして、「次の20件」のようなボタンをおすと、
21件~40件を表示させ、そのページには、
「前の20件」と「次の20件」のボタンを表示させたいと考えています。
最初のページには、「前の20件」ボタンはなく、
最後のページには、「次の20件」ボタンは表示させないように考えています。
どのようにすればよろしいでしょうか。
ご教授ください。
************************************************
作成したPHP
************************************************
<?php
print("<table>");
$cont = mssql_connect("サーバ名","ユーザ名","パスワード");
mssql_select_db('DB名', $cont);
$sql = "select * from テーブル名
$rc = mssql_query($sql,$cont);
while ($array = mssql_fetch_array($rc)) {
print("<tr>");
print("<td>");
print "".$array["氏名"]."";
print("</td>");
print("<td>");
print "".$array["住所"]."";
print("</td>");
print("</tr>");
}
print("</table>");
mssql_close($cont);
?>
************************************************
環境
PHP5.2
Apache2.2
SQLserverVersion5
PHPとSQLは別サーバになります。
両サーバOS:windows
No.1ベストアンサー
- 回答日時:
どうも。
先ほどの質問と似た答えになります。http://okwave.jp/qa3271273.html
hoge.php?p=1
hoge.php?p=2
hoge.php?p=3
...
のように表示するページ番号を指定する方法、
hoge.php?p=1
hoge.php?p=21
hoge.php?p=41
...
のように表示を開始する項目の番号を指定する方法をよく見かけます。
例えば2ページ目で
<a href="hoge.php?p=1">前の20件</a>
<a href="hoge.php?p=41">次の20件</a>
のようなリンクを作って、
引数pの値をPHP側で受け取ってそれに応じて表示する内容を変えるわけです。
引数の処理の話は説明の都合上向こうの質問で説明した方がよさそうなので、向こうでしますね。
回答ありがとうございます。
勉強になります。
HTML側で、↓のような記述を書くのは理解できました。
<a href="hoge.php?p=1">前の20件</a>
<a href="hoge.php?p=41">次の20件</a>
PHP側?で1ページ目の場合、1~20件だけ表示させ、
2ページ目では、21件から40件まで
表示させる方法がわかりません。
SQLではなく、PHPで作るのかなくらいしかイメージできません。
これはどのようにしたらよいのでしょうか。
たくさん聞いてまって申し訳ありません。
宜しくお願い致します。
No.5
- 回答日時:
$_GET['p']で値を受け取ってるんですから、
"<a href=\"test.php?p=" . ($_GET['p'] + 10) . "\">next</a>"
のように10足したのを書くだけですよ。
再帰の意味は分かりますか?
再帰ではないです。
No.4
- 回答日時:
返信が遅くなったこととPGにミスがあってすみません。
わたしの間違いでした。
(1)$sql = "select * from テーブル名 where id = ".$page." AND id <= ".$endData;
ではなく
(1)$sql = "select * from テーブル名 where id = ".$startData ." AND id <= ".$endData;
です。
また、「next」を押して次の10件を表示させたいのなら
再帰プログラムだと思うので
<a href="test.php?p=11">next</a>
にして、
if($startData!=""){
$sql = "select * from テーブル名 where id = ".$startData ." AND id <= ".$endData;
}else{
$sql = "select * from テーブル名 where id <= 10 ";
}
ではどうですか
>(2)のコードで実行すると、idが「19」までのデータが表示され、「next」を押しても、同じ「19」までのデータが表示されます。
「next」を押したときは「10」を受け取っているのでわかりますが、最初に表示したときにも19件表示されるのですか
回答ありがとうございます。
>$sql = "select * from テーブル名 where id >= ".$startData ." AND id <= ".$endData;
に変更したら、
p=10のとき、idが10から19までの表示ができました。
再帰プログラムのところがよくわかりません。
現在は↓のように、
<a href=test.php?p=10>next</a>
と、pが10と固定してありますが、
10から19までのデータが表示されたページでさらに
「next」を押すと、20から29まで表示されるようにしたいです。
これはどうしたらいいのでしょうか。
また一番最初のトップぺージはpの値がないため、
エラーメッセージが出てデータが表示されません。
そのページで「next」を押すと、10から19まで表示されます。
聞いてばかりですが、宜しくお願い致します。
No.3
- 回答日時:
まずデバッグしてみてください
デバッグ項目は
・23行目付近でおかしな点はないか(";"とか抜けてないですか?)
・「print $_GET['p'];」で値が受け取れているかを確認してください
です。
これでもエラーが見つからない場合、1~22行目のソースとどのようにサンプルPGを組み込んでいるのか教えて下さい
また、意味についてですが、「$_GET['p']」というのは
「hoge.php?p=1」というアドレスでページを表示させる場合
「GETで送信されてきた"P"という名前の値を取得」という意味です。
複数の値を送信させたい場合は「hoge.php?p=1&c=1」というように"&"で連結して記述します。
受け取り方は
$_GET['p']と$_GET['c']で受け取ります。
>こちらの「件数」ですが、10件表示したい場合、「件数」のところに「10」と入力すればよかったでしょうか。
すみません説明が悪かったようです。
例のように「$endData = $startData + 20-1」
↑この部分を「10」に変えれば出来ると思います。
$endDataには表示させたい件数が格納されればよいので、
「$startData」には「1,11,21・・・」といった感じで値が格納される(のですよね?)ので
格納する値は「$startData + 表示させたい件数 - 1」となるわけです。
回答ありがとうございます。
ファイルを修正しましたが、エラーになってしまいます。
現状は以下のようになっております。
宜しくお願い致します。
(2)のコードで実行すると、idが「19」までのデータが表示され、「next」を押しても、同じ「19」までのデータが表示されます。
(idは「1,2,3,4,…」のように1づつ増えるフィールドになります。)
(1)のコードで実行すると以下のエラーメッセージが表示されます。
32行目は(1)のコードの行になります。
***エラーメッセージ***
Notice: Undefined variable: page in C:\Program Files\Apache ….php on line 32
「.$page.」の値はどこからとってきたらいいのでしょうか。
****************************************
作成したtest.phpのコード
****************************************
<body>
<a href="test.php?p=10">next</a>
<?php
$startData = $_GET['p'];//GET送信された件数の値を取得
$endData = $startData + 10-1;
//例 $endData = $startData + 20-1;$startDataには「1」が格納されていると仮定
$cont = mssql_connect("サーバ名","ユーザ名","パスワード");
mssql_select_db('[DB名]', $cont);
(1)$sql = "select * from テーブル名 where id = ".$page." AND id <= ".$endData;
(2)"select * from テーブル名 where id <= ".$endData;
$rc = mssql_query($sql,$cont);
?>
<table>
<?php
do{
while ($array = mssql_fetch_array($rc)) {
print("<tr>");
print("<td>");
print $array["氏名"];
print("</td>");
print("<td>");
print $array["住所"];
print("</td>");
print("</tr>");
}
}while (mssql_next_result($rc));//次のデータの読み込み
mssql_close($cont);
?>
</table>
</body>
</html>
**************************
No.2
- 回答日時:
<?php
$startData = $_GET['p'];//GET送信された件数の値を取得
$endData = $startData + 表示させたい数-1;
//例 $endData = $startData + 20-1;$startDataには「1」が格納されていると仮定
$cont = mssql_connect("サーバ名","ユーザ名","パスワード");
mssql_select_db('DB名', $cont);
$sql = "select * from テーブル名 where 件数 = ".$page." AND 件数 <= ".$endData;
$rc = mssql_query($sql,$cont);
?>
省略
<table>
<?php
do{
while ($array = mssql_fetch_array($rc)) {
print("<tr>");
print("<td>");
print $array["氏名"];
print("</td>");
print("<td>");
print $array["住所"];
print("</td>");
print("</tr>");
}
}while (mssql_next_result($rc));//次のデータの読み込み
mssql_close($cont);
?>
</table>
書き方を少し変えましたがこんな感じで出来ると思います。
試していないのでおそらくとしか言えませんが・・・
回答ありがとうございます。
早速実行しましたが、以下のエラーが出ました。
Parse error: syntax error, unexpected '@' in C:\Program Files\Apache…test.php on line 23
(23行目は→「$startData = $_GET['p'];//GET送信された件数の値を取得」になります。)
$_GET['p']のところがよくわかっていません。
pは値はどこを見にいってるのえしょうか。
こちらで指定してやるのでしょうか。
>$sql = "select * from テーブル名 where 件数 = ".$page." AND 件数 <= ".$endData;
こちらの「件数」ですが、10件表示したい場合、「件数」のところに「10」と入力すればよかったでしょうか。
聞いてばかりで申しわけありませんが、
よろしければご教授ください。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- その他(コンピューター・テクノロジー) Pythonの np.indicesに関する質問です。 2 2023/02/07 08:19
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付を基にした乱数生成
-
if (isset($_a)&&$_a)この意味は
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
DTOとEntityの差は何ですか。
-
shシェルスクリプト 空白行の...
-
Excel VBA:特定の文字列以降(...
-
IEを使わないでhtmlテキストを...
-
wordの差し込み印刷で文字...
-
PDOを使った総レコード数(行数...
-
ローカルのコンピュータ名を取...
-
WordでExcelデータを差込...
-
小数点以下0の非表示
-
php 入力画面から確認表示画面...
-
ミュージックのアートワークを...
-
PHPでの画像の形式の変換
-
自動車教習所について 質問 普...
-
ログイン画面から入って、「戻...
-
VBA コレクションに2次元配列...
-
VBS「開いているページ」のURL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付を基にした乱数生成
-
<A href ~で複数の値を渡したい
-
「次の10件を表示する」のよ...
-
PHPでwait処理ってできます?
-
POSTされたかどうか確かめる方...
-
PHPのif文「POSTしていな...
-
PHPでのNULLの正規表現
-
テーブルに送信ボタンをつける
-
PHP フラグ
-
if文の複数条件。
-
逆順表示したい?
-
if (isset($_a)&&$_a)この意味は
-
PHP ハイパーリンク
-
SQLのデータを分割してブラウザ...
-
Luaにて、and or の組み合わせ...
-
$_SERVER["QUERY_STRING"]の仕...
-
null代入とunset()の違いについて
-
whileループの中でフォーム入力...
-
【UWSC】文字をa~zまで回したい...
-
switch文で2つ以上の変数の値...
おすすめ情報