現在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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
phpでmysqlを使ってデータベー...
-
PHPのプルダウンメニューにDBの...
-
PHP 勤務時間の合計を出したい
-
チェックボックスでチェックし...
-
mysqlから取得した配列をカンマ...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
JAVA SQLServerException 列名 ...
-
Pro*Cの構文エラー
-
PHP4でのSmarty派生クラスの定...
-
縦に長い<table>でなく横に長い...
-
mysql_query等でレコード数を変...
-
VBAをつかってクエリの情報を抽...
-
LocalのNotesメールDBをVBAで参...
-
INSERT,DELETEを同時に
-
Resource id #3 をフィールドの...
-
テキストボックスに入れた内容...
-
変数にNULLを代入したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
アラートでyes noを作りたいです。
-
checkboxクリック時、SQLを実行...
-
dbに登録したデータをphpのプル...
-
PHPでMySQLデータを呼び出し、w...
-
PHP・MySQL使用で、年齢制限を...
-
Smartyを用いたコードの書き方...
-
文字化けが解決できません。お...
-
DBで検索結果に該当するデータ...
-
テーブル内の文字によりログイ...
-
PHP+MySQLでの配列のinsert文に...
-
ラジオボタンをループすること...
-
sortableを使用したデータのUPDATE
-
記事のコメント数表示について
-
htmlとphpの分離
-
エクセルVBAについて
-
入れ子のようにしてデータを作...
-
重複したフィールドに関して
-
VBA初心者です。
-
PHPでの検索機能がうまく動きま...
おすすめ情報