現在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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アラートでyes noを作りたいです。
-
PHPで[]の使い方について
-
dbに登録したデータをphpのプル...
-
検索結果にラジオボタンを付加...
-
文字化けが解決できません。お...
-
DBで検索結果に該当するデータ...
-
sortable ギブアップです…助け...
-
PHPでCSV出力したいです。
-
checkboxクリック時、SQLを実行...
-
PHP 10件表示 "前へ" "次へ"
-
ユーザー名、パスで認証して、...
-
MySQLでデータベースにデータin...
-
<VB.NET>INSERT文でDBにデータ...
-
テキストボックスに入れた内容...
-
JAVA SQLServerException 列名 ...
-
VBAをつかってクエリの情報を抽...
-
Accessのテーブルへ複数の主キ...
-
SQLのUPDATE文につい...
-
XAMPPで画面が真っ白になります。
-
Pro*Cの構文エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DBで検索結果に該当するデータ...
-
phpでmysqlを使ってデータベー...
-
アラートでyes noを作りたいです。
-
PHPで[]の使い方について
-
dbに登録したデータをphpのプル...
-
チェックボックスによる複数の...
-
SELECT結果から動的にコンボボ...
-
mysql_queryで日本語文字列が文...
-
phpでデータリスト作成
-
チェックボックスでチェックし...
-
mysqlから取得した配列をカンマ...
-
PHP+MySQLでの配列のinsert文に...
-
php テーブルが作成できない
-
sortableを使用したデータのUPDATE
-
PHP と MySQL でテーブルの行数...
-
PHPのプルダウンメニューにDBの...
-
MySQLに保存した画像を表示したい
-
python pandas 行ごとに列名(...
-
PHPでMySQLのデータを2次元配...
-
php修正について
おすすめ情報