• 締切済み

ページング時のセレクト文が分かりません。

<?php $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このソースでページングしています。$pidが1ページの時はLIMIT 0.10 $pidが2ページの時はLIMIT 10.10 $pidが3ページの時はLIMIT 20.10 としたいのですが、SELECT文はどうしたら良いですか??

  • PHP
  • 回答数4
  • ありがとう数0

みんなの回答

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.5

> 後は、phpのマニュアルとmysqlのマニュアルを参照する。 これ位は出来るだろう。 mysqlのマニュアルで、select文でlimitを使う方法が調べられる。 phpのマニュアルで、select文の中に変数と数式を組み込む方法が調べられる。 調べてから聞きなさい。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.3

> select * from labです。 じゃあ、このselect文にLIMIT付けたらどうなる? それをphpで書き、変数に代入したらどうなる? そのselect文のうち、開始位置を変数にしたらどうなる? 後は、phpのマニュアルとmysqlのマニュアルを参照する。

drmada
質問者

補足

レベルが高すぎて理解できません。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

> やり方が分からない為、レコードを全部だすセレクト文にしてます。 だから、それがどういうselect文かと聞いているんですが…。

drmada
質問者

補足

select * from labです。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

今の時点で、どういうselect文を使用しているのでしょう?

drmada
質問者

補足

やり方が分からない為、レコードを全部だすセレクト文にしてます。

関連するQ&A

  • ページングに関して

    <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このようにしています。現在は、該当データが11件あれば、[1,2]リンクは現れますが、1をクリックしたら11件、2をクリックしても11件表示されます。10件、1件と表示させたいです。方法をどなたか教えていただけないでしょうか?? また、上記のようなコードだとSELECT文はどうすれば良いでしょうか? 自分で調べろという回答は御遠慮下さい。分からないから質問しているのです。

    • 締切済み
    • PHP
  • ページングでの値の引き継ぎ方

    1.html <form method="POST" action="l.php"> <input type="text" name="usersearch"/> <input type="submit" name="button" id="button" value="検索" /> </form> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 2.php $usersearch= $_POST['usersearch']; こんな感じにPHPで受け取ったとして 2.php で <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> こうした場合、<a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; この部分でリンクをクリックした場合、POSTした値が消えてしまっています。どうしたら引き継げますか??

    • 締切済み
    • PHP
  • ページングでhiddenの値が伝わらない

    ページングリンクの値の受け渡しについて。 <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このようなソースなんですが、どうしたらリンク先にhiddenの情報が送れますか?? このページで <input type="hidden" name="usersearch" value="<?php print_r($_POST['usersearch']) ;?>"> として、値を受け取り、ページIDのリンクをクリックした際も、このページで表示します。 このページがa.phpだとしたらリンク先はa.php?pid=1と言ったような具合です。

    • 締切済み
    • PHP
  • ページ番号別にLIMIT定義を変えるには。たすけて

    <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> 例えばページIDが1ならばLIMIT 0,10 ページIDが2ならばLIMIT10,10とするにはどうしたら良いのでしょうか?? 我流で select * from lab where LIMIT $pid*10,10としましたが、エラーになってしまいます。

    • ベストアンサー
    • PHP
  • ページングについて

    $countRe=$num_rows; pager($_GET["id"],$countRe); function pager($id,$countRe){ if($id=="") $id=1; $maxPage=ceil($countRe/5); if($maxPage==1 or $maxPage<$id) return false; if($id>6){ $startPage=$id-5; $startMore="<a href=\"$PHP_SELF?id=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?id=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } 現在このようなコードでページングしています。 該当内容が10件未満ならリンクは出ず、10件以上なら「12」とリンクが出てくれるのは良いのですが、 1ページに11件表示され2ページにも同じ内容が11件表示されてしまいます。どのようにしたら、1ページ目で10件、2ページ目で1件表示してくれるのでしょうか??

    • 締切済み
    • PHP
  • ページング。困っています。

    分かる方はいませんか?? <?PHP $countRe=$num_rows; function pager($id,$countRe){ if($id=="") $id=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$id) return false; if($id>6){ $startPage=$id-5; $startMore="<a href=\"$PHP_SELF?id=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?id=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> 現在、このようなソースでページングをしています。1ページにつき10件ずつ表示させたいのです。該当データ11件になったら、ちゃんとリンクが[1,2]と出てくれますが、1ページ目に11件、2ページ目でも11件出てしまいます。理想は説明不要だと思いますが、1ページ目に10件、2ページ目で余りの1件表示させたいです。このソースの問題ではなくSELECT文の問題なんでしょうか??LIMIT 0,10としたら11件該当しなければならないのに10件しか該当しないとなり、これはこれでおかしくなります。

    • 締切済み
    • PHP
  • ページングでの問題点

    <?php DB接続文等 $search_query = "select SQL_CALC_FOUND_ROWS * from ilab"; $usersearch= $_POST['usersearch']; $clean_search = str_replace('、', ' ',$clean_search); $clean_search = str_replace(' ', ' ',$usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $pid = intval($_GET['pid']); if ($pid < 1) $pid = 1; $limit_start_rows = ( $pid - 1 ) * 10; $search_query .= " LIMIT {$limit_start_rows}, 10"; $result = mysql_query($search_query); $num_rows_result = mysql_query("SELECT FOUND_ROWS()"); $num_rows = mysql_fetch_assoc($num_rows_result); $num_rows = $num_rows['FOUND_ROWS()']; if($num_rows== 0){ $message="該当データは見つかりませんでした。"; } else $message=$num_rows ."件該当しました<br/>"; echo $message; ?> <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このソースだとテキストボックスに未入力だと、全件表示してしまいます。 そして、例えば、「東京」等で検索し、12とリンクがつくわけですが、2を押したら東京の2の情報ではなく、全件データの2(10件~20件)が表示されてしまいます。どうすれば上記問題点を改善できるでしょうか??

    • 締切済み
    • PHP
  • チェックボックスの値の受け渡しについて

    現在、複数のチェックボックスの値を配列にしてパラメータで送ったのち、そのパラメータを引き継いで、ページング処理をしようとしてエラーが出て困っております。 【ページングの処理】 function pager($idname,$countRe){ $id =$_GET[$idname]; foreach($_GET as $key => $value){ if ($key != $idname){ $other_param .= "&".$key."=".urlencode($value); } } if($id=="") $id=1; $maxPage=ceil($countRe / PER_PAGE); if( ($maxPage == 1) or ($maxPage < $id) ) return false; if($id > VIEW_PAGE_MENU_WIDTH + 1){ $startPage = $id - VIEW_PAGE_MENU_WIDTH; $startMore = "<a href=\"$PHP_SELF?".$idname."=".($startPage - 1).$other_param."\">".PREV_MARK." </a>\n"; }else{ $startPage = 1; } if($id + VIEW_PAGE_MENU_WIDTH < $maxPage){ $endPage = $id + VIEW_PAGE_MENU_WIDTH; $endMore = " <a href=\"$PHP_SELF?".$idname."=".($endPage + 1).$other_param."\"> ".NEXT_MARK."</a>\n"; }else{ $endPage = $maxPage; } $page_footer=""; for($i = $startPage ; $i <= $endPage ; $i++){ $page_footer.= " ".(($id == $i)?"<span style='font-size:120%'>$i</span>\n":"<a href=\"$PHP_SELF?$idname=$i$other_param\">$i</a>\n"); } $page_footer = $startMore.$page_footer.$endMore; print $page_footer; } ----------------------------------------------------- 【エラー内容】 Warning: urlencode() expects parameter 1 to be string, array given in どうやら foreach($_GET as $key => $value){ if ($key != $idname){ $other_param .= "&".$key."=".urlencode($value); } } の部分でチェックボックスの値が第1引数ではないのでエラーが返っていると思うのですが、どなたかエラーが出ないようにご教授ください。 お願いいたします。

    • ベストアンサー
    • PHP
  • php ページャー

    php ページャー機能がうまくいきません。 ご教授お願いいたします。 ページリンク2、3と押しても ページが移動しません。 ずっと一ページ目のままです。 解決方法よろしくお願いいたします。 index.php peger.php 書きソースはpeger.phpです。 index.htmlとのソースの違いは if(preg_match('/^[1-9][0-9]*$/', $_GET['page']) ){ $page = (int)$_GET['page']; }else{ $page = 1; } のプログラムががindex.phpにはないだけです。 <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>検索</title> </head> <body> <?php if(preg_match('/^[1-9][0-9]*$/', $_GET['page']) ){ $page = (int)$_GET['page']; }else{ $page = 1; } $page = 1; $limit = 2; $offset = $limit * ($page - 1); $dsn='mysql:dbname=****;host=****'; $user='*****'; $password='*****'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT count(*) FROM `mst_product`'; $stmt=$dbh->prepare($sql); $stmt->execute(); $db=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); $sql = 'SELECT * FROM mst_product ORDER BY code DESC LIMIT '.$limit.' OFFSET '.$offset.' ' ; $stmt = $dbh->prepare($sql); $stmt->execute(); $db = null; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo $row['name']; echo'</br>'; echo $row['price']; } echo '<ul class="pager">'; ?> <?php if($page > 1){?> <li><a href="pager.php?page=<?php echo $page-1; ?>"> << </a></li> <?php } for($i = $page; $page-2 < $i && $i <= $page+4 && $i <= $lastpage; $i++){ ?> <?php if($i == $page){ ?> <li><a href="kensaku_pager.php?page=<?php echo $i; ?>"><?php echo '<font color="#FF4DC4">'.$i.'</font></a></li>'; }else{?> <li><a href="pager.php?page=<?php echo $i; ?>"><?php echo $i.'</a>'; ?> <?php echo '</li>'; } } if($page < $lastpage){ ?> <li><a href="pager.php?page=<?php echo $page+1; ?>"> >> </a></li> <?php } ?> </ul> </body> </html>

    • ベストアンサー
    • PHP
  • php掲示板でページング機能を装備したいのですが

    下記のプログラムのみでは投稿が0にもかかわらず12345...10次へ » となってしまいます。理想は13件投稿の場合10件表示で、一ページ目は 13件中10件表示 1|2次へ>> としたいです。 PHP初心者です。どこに記述するかなど、できるだけ分かりやすくお願いいたします><申し訳ございません。 <?php function paging($limit, $page, $disp=5){ //$dispはページ番号の表示数 $next = $page+1; $prev = $page-1; $start = ($page-floor($disp/2)> 0) ? ($page-floor($disp/2)) : 1;//始点 $end = ($start> 1) ? ($page+floor($disp/2)) : $disp;//終点 $start = ($limit <$end)? $start-($end-$limit):$start;//始点再計算 if($page != 1 ) { print '<a href="?page='.$prev.'">&laquo; 前へ</a>'; } //最初のページへのリンク if($start>= floor($disp/2)){ print '<a href="?page=1">1</a>'; if($start> floor($disp/2)) print "..."; //ドットの表示 } for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス if($i <= $limit && $i> 0 )//1以上最大ページ数以下の場合 print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 } //最後のページへのリンク if($limit> $end){ if($limit-1> $end ) print "..."; //ドットの表示 print '<a href="?page='.$limit.'">'.$limit.'</a>'; } if($page <$limit){ print '<a href="?page='.$next.'">次へ &raquo;</a>'; } /*確認用 print "<p>current:".$page."<br>"; print "next:".$next."<br>"; print "prev:".$prev."<br>"; print "limit:".$limit."<br>"; print "start:".$start."<br>"; print "end:".$end."</p>";*/ } $limit = 10;//最大ページ数 $page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 paging($limit, $page); ?> またlogファイルなどの関連ファイル名はどこに記述されているかわからないので、このファイルをindex.phpにしたとして、ほかに必要なファイルがあれば教えていただきたいです。宜しくお願いいたします。 参考URL http://tenderfeel.xsrv.jp/php/639/

    • 締切済み
    • PHP