

現在PHPとMYSQLを使用しております。
SQLでデータベースから$fldが一致したデータだけ抽出したデータを
10件ずつ表示させて”次へ”を押すと11~20件目が表示。
また”次へ”を押すと...といった感じに"次へ"と"前に"を表示させたいのですがどうしてもやり方がおもいつきません。
どなたかご存知の方ご教授お願いできませんでしょうか。
ここに今出来ていますスクリプトを記載させて頂きます。
extract($_REQUEST);
if (!isset($page)) {
$page = 1;
}
if(!empty($fld)) {
//$fldに検索したい住所が入ってます。
$local = addslashes($fld);
$where .= "add1 = '$fld' && ";
}
if(!empty($where)) {
$where = substr($where, 0, -3);
$where = "WHERE " . $where;
}
$sql = "select count(*) as cnt from ○○ ". $where;
$rst = mysql_query($sql);
$row = mysql_fetch_array($rst);
$tcnt = $row["cnt"];
mysql_free_result($rst);
$totalpage = ceil($tcnt / $PAGESIZE);
$pagehead = "<B>$tcnt 件みつかりました。 " . "[" . ($PAGESIZE * ($page - 1) + 1) . "-";
if ($page < $totalpage) {
$pagehead .= ($PAGESIZE * $page) . "] を表示</B>";
}
else {
$pagehead .= "$tcnt] を表示</B>";
}
$sql = "select * from ○○ ". $where. " order by renban desc limit " . $PAGESIZE * ($page - 1) . ", $PAGESIZE";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
if($rows == 0){
echo "<p>登録データがありません。</p>";
}
else {
while($row = mysql_fetch_array($result)){
echo "<p>";
echo $row["renban"];
echo " ";
echo $row["tourokubi"];
echo "<br />";
echo $row["people"];
echo " ";
echo $row["add1"];
echo $row["add2"];
echo "-";
echo $row["sta"];
echo " ";
echo $row["tel"];
echo $row["url"];
echo $row["sejitu"];
echo $row["pr"];
echo "</p><hr />";
}
}
?>
<?= $pagehead ?>
<?php
mysql_free_result($result);
mysql_close;
$param_local = rawurlencode($local);
if ($page > 1) {
$body .= "<A href = '$PHP_SELF?page=" . ($page - 1) . "&tcnt=$tcnt&local=". $param_local. $param_category. "'>" . "前の $PAGESIZE 件</A>";
}
if ($totalpage > 1 and $page < $totalpage) {
$body .= "<A href = '$PHP_SELF?page=" . ($page + 1) . "&tcnt=$tcnt&local=". $param_local. $param_category. "'>" . "次の $PAGESIZE 件</A>";
}
?>
<?= $body ?>
</body>
</html>
No.3ベストアンサー
- 回答日時:
ちょっとどこで使用したいのかわからないのですが・・・
======= 選択をするphp =======
----- プルダウンA -----
東京都
神奈川県
埼玉県
以下各都道府県名表示
・Aから東京都を選択
ここで
【東京23区の数】件のデータ中 1件~10件 を表示しています
を表示する
----- プルダウンB -----
東京都足立区
東京都北区
東京都葛飾区
東京都荒川区
以下10件まで表示
Bから選択された値をtokyo.phpへPOST
=============================
======= tokyo.php =======
23区情報を受け取って表示
=========================
上記のように「~から~を表示しています」処理はプルダウンBに対してだけ行うということでいいのでしょうか?
Bに対してだけなのであれば
>2 件のデータ中 1件~2件の用に表示はされるのですが
これが表示できていれば
>【条件に一致したデータはありません】となります。
このようにelse側が選択されることはないはずなのですが。
それとも、
tokyo.phpへ23区をPOSTしたあとにtokyo.phpの中で足立区なら足立区の詳細を出力する際に「~から~を表示しています」を使用したいのでしょうか?
SQL自体はおかしくないとは思うのですが、いずれにしても、
各変数をechoで画面にこまめに出力しながらデバッグしていく癖をつけたほうがいいかと思います。
SQLにおいても同様です。
mysql_queryする前にechoしてみて変数に正しい値がきちんと入っていて、自分が投げたいSQL文として成り立っているかなどを確認することが大事だと思います。
ご教授していただきましたおかげで無事にこちらの仕様に合わせた感じに仕上げることが出来ました!本当に色々とありがとうございます。
スクリプトなどを拝見していたのですが、書き方など大変勉強になりました。
自分も早くあのようにかけるようになりたいと意欲が沸きました。
まだ全体の中からみますと作り途中なのですが、また機会がありましたら
是非宜しくお願いいたします。
どうもありがとうございました!
No.2
- 回答日時:
自分のサイトで使用しているロジックです。
内容をかなりはぶいたり、出力部分をechoに変えたりしたのでそのまま動くかはわかりませんが、流れはつかんでもらえるかと思います。
※自己流なので、このやり方がベストかどうかはわかりかねます。。
<?php
//offsetが空又は不正な文字列なら初期化
if(isset($_GET['offset'])){
$offset = $_GET['offset'];
$offset = (!$offset or !is_numeric($offset) or $offset<0)?0:(int)$offset;
}
else{
$offset = 0;
}
//1ページに表示する件数
$page1 = 10;
/* DB接続・選択処理を書いてください */
//SQL処理
$sql_nolimit = "select colname from hogetbl where hoge = 'hogehoge' order by colname;";
$sql_limit = "select colname from hogetbl where hoge = 'hogehoge' order by colname limit ".$offset.",".$page1.";";
$rs_nolimit = mysql_query($sql_nolimit) or die("quary faild sql_nolimit");
$rs_limit = mysql_query($sql_limit) or die("quary faild sql_limit");
$maxrows_nolimit = mysql_num_rows($rs_nolimit);
$maxrows_limit = mysql_num_rows($rs_limit);
//総ページ数
$pagesuu = ceil($maxrows_nolimit / $page1);
//「~から~を表示しています」の先頭と末尾の数字
$startno = $offset + 1;
if(($offset+$page1) < $maxrows_nolimit){
$endno = $offset + $page1;
}
else{
$endno = $maxrows_nolimit;
}
//検索結果が0件なら
if($maxrows_nolimit == 0){
echo '条件に一致したデータはありません<br>';
}
//1件以上あれば
else{
echo $maxrows_nolimit.' 件のデータ中 '.$startno.'件~'.$endno.'件 を表示しています<br>';
}
//リンクと「前へ」「次へ」を生成
//最後のページ
if(($offset > 0) and ($maxrows_nolimit <= ($offset + $page1))){
$previous = "thisfile.php?offset=" . ($offset - $page1) . "&page1=" . $page1;
echo '<a href="'.$previous.'"> 前へ </a><br>';
}
//最初のページ
elseif(($offset <= 0) and ($maxrows_nolimit > ($offset + $page1))){
$next = "thisfile.php?offset=" . ($offset + $page1) . "&page1=" . $page1;
echo '<a href="'.$next.'"> 次へ </a><br>';
}
//最初<ページ<最後
elseif(($offset > 0) and ($maxrows_nolimit > ($offset + $page1))){
$previous = "thisfile.php?offset=" . ($offset - $page1) . "&page1=" . $page1;
$next = "thisfile.php?offset=" . ($offset + $page1) . "&page1=" . $page1;
echo '<a href="'.$previous.'"> 前へ </a> <a href="'.$next.'"> 次へ </a><br>';
}
//データ表示
while($rec = mysql_fetch_array($rs_limit)){
echo $rec['colname']."<br>";
}
?>
この回答への補足
さっそくこちらで色々と試してみたのですが、
2 件のデータ中 1件~2件の用に表示はされるのですが
住所の例えば一つ目のプルダウンメニューで【東京都】なら東京都の一覧が表示され、
その中から「更に詳しく」というプルダウンがあり、23区情報を出力して10件毎表示をしたいと考えているのです検索してもデータがあるにも
【条件に一致したデータはありません】となります。
きっと私の$sql文が間違っていると思うのですが
そこで一つお伺いしたいのですが私が変更したのは
$sql_nolimit = "select add1 from woo where add1 = '$fld' order by add1;";
$sql_limit = "select add1 from woo where add1 = '$fld' order by add1 limit ".$offset.",".$page1.";";
$fld に add1がはいっており、こちらのadd1を出力し、その検索結果を毎回10件表示にしたいのですが、$sql文はあっていると思いますか?
gogo_tea様
またご回答して頂きどうもありがとうございます。
以前ご回答して頂きました時もgogo_tea様のおかげで無事に解決でき
勉強にもなりました。
今回につきましてもさっそく試させて頂きます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DBで検索結果に該当するデータ...
-
複雑なSELECT文のの書き方について
-
SQLのSUM関数で取得した値を参...
-
PHPで[]の使い方について
-
PHPとMysqlによる正規表現について
-
mysqlから取得した配列をカンマ...
-
phpでmysqlからデータを取り出...
-
[PHP+MySQL] データをランダム...
-
リストボックスのリストの数に...
-
PHPの記事IDの作り方
-
JAVA SQLServerException 列名 ...
-
実行時エラー3131 FROM 句の構...
-
LocalのNotesメールDBをVBAで参...
-
phpにて出欠登録管理を作成して...
-
cakePHPでSQLが実行できない。
-
【PHP】クエリーの実行に失敗し...
-
Accessのテーブルへ複数の主キ...
-
PHP(PDO)でDBの情報を完全一...
-
PHP4でのSmarty派生クラスの定...
-
php postgres Insert と updat...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
文字化けが解決できません。お...
-
VBA初心者です。
-
phpでmysqlを使ってデータベー...
-
DBで検索結果に該当するデータ...
-
smartyでMySQLから連想配列取り...
-
PHPのプルダウンメニューにDBの...
-
[PHP+MySQL] データをランダム...
-
sortable ギブアップです…助け...
-
mysqlから取得した配列をカンマ...
-
sortableを使用したデータのUPDATE
-
PHPでMySQLデータを呼び出し、w...
-
PHP+MySQLでの配列のinsert文に...
-
XML初心者です。
-
検索結果($_POST)が2ページ目...
-
smartyのforeachの使い方?
-
SELECT結果から動的にコンボボ...
-
pg_queryの結果を2回とりだす...
-
PEARのPagerの設定の仕方
おすすめ情報