質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2644閲覧

検索結果の表示数を指定したい

ariiiiiga

総合スコア66

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/31 02:52

前提・実現したいこと

データベースから検索した結果を取得する機能をつくっています。
ページングのphp部分でlimitを5に設定していますが検索に該当するデータが全て表示されてしまいます。

検索結果の表示数を指定して、それ以降を次へのページに表示させたいのですが、
どこを直すべきなのかがわかりませんので、解決策を教えて頂きたいです。

宜しくお願い致します。

該当のソースコード

<?php //検索用 function getHostData($params){ if(!isset($params['search'])){ return[]; } $pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root','', array(PDO::ATTR_EMULATE_PREPARES => false)); $where = []; if(!empty($params['name'])){ $where[] = "name like '%{$params['name']}%'"; } if($where){ $whereSql = implode(' OR ', $where); $sql = 'select * from hosts where ' . $whereSql ; }else{ $sql = 'select * from hosts'; } $sql .= " order by post_id desc"; //SQL文を実行する $HostDataSet = $pdo->query($sql); //扱いやすい形に変える $result = []; while($row = $HostDataSet->fetch( PDO::FETCH_ASSOC )){ $result[] = $row; } return $result; } //ページング用 $p = isset($_GET['p']) ? intval($_GET['p']) : 0; $limit = 5; $v_page = $limit + 1; $offset = $p * $limit; $pdo=new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root',''); $sql=$pdo->prepare('select * from hosts order by post_id desc limit :limit offset :offset '); $sql->bindValue(":limit", $v_page, PDO::PARAM_INT); $sql->bindValue(":offset", $offset, PDO::PARAM_INT); $sql->execute(); $total_res=$sql->rowCount(); $next_num = $p+1; $prev_num = $p-1; $total_page= ceil($total_res / $limit); ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8" > <title>トップページ</title> </head> <body> <h2>検索フォーム</h2> <div class="col-xs-6 col-xs-offset-3 well"> <form method="get"> <div class="form-group"> <label for="InputName">ホスト名</label> <input name="name" class="form-control" id="InputName" value="<?php echo isset($_GET['name'])? htmlspecialchars($_GET['name']) : '' ?>"> <button type="submit" class="btn btn-default" name="search">検索</button> </form> </div> <?php   //検索結果表示 if(!empty($_GET)){ $hostData = getHostData($_GET);?> <div class="col-xs-6 col-xs-offset-3"> <?php if(isset($hostData) && count($hostData)): ?> <p class="alert alert-success"><?php echo count($hostData) ?>件見つかりました。</p> <table class="table"> <thead> <tr> <th>名前</th> </tr> </thead> <tbody> <?php foreach($hostData as $row){ echo '<tr>'; echo '<td>', htmlspecialchars($row['name']),'</td>'; echo '</tr>'; } ?> </tbody> </table> <?php else: ?> <p class="alert alert-danger">検索対象は見つかりませんでした。</p> <?php endif; ?> </div> <?php } ?> <br> <?php    //ページング $tmp = $_GET; if($p > 0){ $tmp['p'] = $prev_num; echo '<a href="index.php?' . http_build_query($tmp) . '">前へ</a>','</td>'; } else { echo '最新'; } if($total_page-1 > $p){ $tmp['p'] = $next_num; echo '<a href="index.php?' . http_build_query($tmp) . '">次へ</a>','</td>'; } else { echo '末尾'; } ?> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/31 02:59

前の質問を無視して進んでいい内容ではないですよ。 https://teratail.com/questions/171747 解決すればこの質問には至らないはずです。 (というか私の回答きちんと読んでください。無駄も多すぎてどこから突っ込んでいいやらわからないツギハギコードです)
m.ts10806

2019/01/31 04:01

コードを提示するならせめてエラーがないものを。 PHPコードの中に全角空白が混じっています。 あと、とりあえず何も解説なしのリファクタリングしたコードを後で回答として提示するのでこれで終わりにしてください。
guest

回答3

0

ベストアンサー

余計な部分が多いようですね。。
データを持ってくるSQLにoffset(取得開始位置)、limit(取得件数)を付けて総件数を取得すればほぼ行けると思います。
ざっくりですが以下でどうでしょう?
※パスワード部分はご自身の環境に合わせてください。

PHP

1<?php 2// 取得件数 3define('PAGE_LIMIT', 10); 4 5$dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', 'localhost', 'mydb'); 6$options = array(PDO::ATTR_EMULATE_PREPARES => false); 7 8// DB接続 9try { 10 $pdo = new PDO ($dsn, 'root', 'パスワード', $options); 11} catch ( PDOException $e ) { 12 exit('Could not connect to database:'.$e->getMessage()); 13} 14 15// リクエストパラメータの取得 16$search = filter_input(INPUT_GET, 'search'); 17$p = !is_numeric(filter_input(INPUT_GET, 'p')) ? 0 : filter_input(INPUT_GET, 'p'); 18$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_SPECIAL_CHARS); 19 20// 取得開始位置 21$offset = $p * PAGE_LIMIT; 22 23// SQL生成 24$where = []; 25$whereSql = null; 26 27if ( $name ) { 28 $where[] = "name like :name"; 29} 30 31if ( count($where) > 0 ) { 32 $whereSql = " where ".implode(' OR ', $where); 33} 34 35$sql = $pdo->prepare('select SQL_CALC_FOUND_ROWS * from hosts '.$whereSql.' order by post_id desc limit :limit offset :offset'); 36 37$sql->bindValue(":offset", $offset, PDO::PARAM_INT); 38$sql->bindValue(":limit", PAGE_LIMIT, PDO::PARAM_INT); 39if ( $name ) { 40 $sql->bindValue(":name", "%" . addcslashes($name, '\_%') . "%", PDO::PARAM_STR); 41} 42$sql->execute(); 43 44// 検索結果取得 45$result = $sql->fetchAll(); 46 47// Total件数 48$totalRow = $pdo->query("SELECT FOUND_ROWS() as TOTAL"); 49$all = $totalRow->fetch(PDO::FETCH_ASSOC); 50 51?> 52<!DOCTYPE HTML> 53<html lang="ja"> 54<head> 55 <meta charset="UTF-8"> 56 <meta http-equiv="Content-Style-Type" content="text/css"> 57 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 58 <link rel="stylesheet" as="style" href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" type="text/css" media="all" onload="this.rel='stylesheet'"> 59 <link rel="stylesheet" as="style" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css" media="all" onload="this.rel='stylesheet'"> 60</head> 61 <body> 62 <h2>検索フォーム</h2> 63 <div class="col-xs-6 col-xs-offset-3 well"> 64 <form method="get"> 65 <div class="form-group form-inline"> 66 <label for="InputName">ホスト名</label> 67 <input name="name" class="form-control" id="InputName" value="<?= $name ?>"> 68 <button type="submit" class="btn btn-default" name="search" value="1">検索</button> 69 </div> 70 </form> 71 </div> 72 73 <? if ( $search ) : ?> 74 <div class="col-xs-6 col-xs-offset-3"> 75 <? if ( $all['TOTAL'] > 0 && $search ) : ?> 76 <p class="alert alert-success"><?= number_format($all['TOTAL']) ?>件見つかりました。</p> 77 <table class="table"> 78 <thead> 79 <tr> 80 <th>名前</th> 81 </tr> 82 </thead> 83 <tbody> 84 <? foreach($result as $key => $value) : ?> 85 <tr> 86 <td><?= $value['name'] ?></td> 87 </tr> 88 <? endforeach; ?> 89 </tbody> 90 </table> 91 <!-- ページネーション --> 92 <? if ( $p > 0 ) : ?> 93 <a href="index.php?search=1&name=<?= $name ?>&p=<?= $p-1 ?>" class="pull-left">戻る</a> 94 <? else : ?> 95 <span class="pull-left">最新</span> 96 <? endif; ?> 97 98 <? if ( $all['TOTAL'] - (PAGE_LIMIT * $p ) > PAGE_LIMIT ) : ?> 99 <a href="index.php?search=1&name=<?= $name ?>&p=<?= $p+1 ?>" class="pull-right">次へ</a> 100 <? else : ?> 101 <span class="pull-right">末尾</span> 102 <? endif; ?> 103 104 <? else : ?> 105 <p class="alert alert-danger">検索対象は見つかりませんでした。</p> 106 <? endif; ?> 107 </div> 108 <? endif; ?> 109 </body> 110</html>

投稿2019/01/31 07:41

編集2019/01/31 14:29
mayoi_maimai

総合スコア1583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/31 07:43

>SQL_CALC_FOUND_ROWS 存在忘れてた・・。
mayoi_maimai

2019/01/31 07:55

けどデータ量が多いと辛いんですよね(汗)。。
m.ts10806

2019/01/31 08:05 編集

確かに、データ量が多いときはやはりcount()でしょうね。 しかしあれですね。ページングHTMLのところ、私かなり蛇足してしまってますね笑 基本自身が作ったことあるコードからロジック持ってきてましたけど、ページ数が多いときの中略まで入れようとして気づいて途中でやめました。 いずれにしても質問者さんがどこまで理解できるか加味してない自己満と割り切ってます。(求められても解説する気なし・・・。そこまで難しいコードではないですし、オブジェクト指向もないですし)
mayoi_maimai

2019/01/31 08:14

>確かに、データ量が多いときはやはりcount()でしょうね。 ですね。 この形式のページングは久しぶりに作ったので一瞬(。´・ω・)ん?とかなりました。。 いつもはmts10806さんと同じような形式が多いですね。 既にクラス化していますが参考になりました!
m.ts10806

2019/01/31 08:17

もう一歩踏み込めばinputのフォームとsql作るところまで(登録絡むならバリデーションも)配列で定義するんですけどね。そこまでやるとやりすぎかなと。 たまにこういう回答するとついつい楽しくなりますね。
退会済みユーザー

退会済みユーザー

2019/01/31 08:24 編集

これ、ちゃんと見てないけど、 $namae … 初期化時にエンコードしちゃってます/LIKE なので %_ のエスケープを考えないと? $_SERVER['PHP_SELF'] … XSS! $where の組み立て方も気になります。
m.ts10806

2019/01/31 08:35

> $_SERVER['PHP_SELF'] … XSS! これも忘れてた・・・。 index.phpじゃない名前でテストコード作ってたのでとりあえずでやっちゃってました。
ariiiiiga

2019/01/31 11:52

ありがとうございます。 下記の4か所のphpコードがそのまま表示されているのですが、これは開発環境が原因でしょうか? ・html内の検索結果を表示する部分の3行目ー>0 && $search) : ?> ・その下のforeach内ー>$value) : ?> ・ページネーションの最初のif文ー>0 ):?> ・ページネーション末尾の方のif文の1行目ー>PAGE_LIMIT ):?> <p class="alert alert-success"><?= number_format($all['TOTAL']) ?>件見つかりました。</p> <p class="alert alert-danger">検索対象は見つかりませんでした。</p> この2つが最初から表示されてしまいました。 Notice: Undefined variable: value in D:\xampp\htdocs\test\2.php on line 86 86行目:<td><?= $value['NAME'] ?></td> このエラーが出てしまいました。 宜しくお願い致します。
mayoi_maimai

2019/01/31 12:30

失礼しました。。 <?= $value['NAME'] ?> ↓ <?= $value['name] ?> phpコードがそのまま出ている部分ですが、 <? if ↓ <?php if で、どうでしょう??
ariiiiiga

2019/01/31 13:27

ありがとうございます!できました! <td><?= $value['name'] ?></td> この検索結果を出力している部分にもうひと項目$value['point']を追加して、出力結果1・2・3の3段階で3種類の星の画像を表示させたいのですが、可能でしょうか?
mayoi_maimai

2019/01/31 14:34 編集

可能ですよ。 以下の手順でお試しください。 1.<th>名前</th>の下にポイントのセルを作ります。 <th>名前</th> <th>ポイント</th> 2.ポイント部分は<td><?= $value['name'] ?></td>の下にセルを追加します。 <td><?= $value['name'] ?></td> <td><? for ( $i=0; $i<$value['point']; $i++ ) :?>★<? endfor; ?></td> ※★部分をimgタグにすれば大丈夫だと思います。
mayoi_maimai

2019/01/31 14:30

>te2jiさん おぉ。。。修正してみましたm(__)m
ariiiiiga

2019/01/31 14:44

<td><? for ( $i=0; $i<$value['point']=1; $i++ ) :?>1の画像<? endfor; ?></td> <td><? for ( $i=0; $i<$value['point']=2; $i++ ) :?>2の画像<? endfor; ?></td> <td><? for ( $i=0; $i<$value['point']=3; $i++ ) :?>3の画像<? endfor; ?></td> これであってますか?
mayoi_maimai

2019/01/31 14:52

違いますね。。 $value['point']にはDBに保存された数字が入っているので以下のままでokです。 <td><? for ( $i=0; $i<$value['point']; $i++ ) :?>★<? endfor; ?></td> ちょっと見にくいかもしれませんが上記は以下と同じです。 for ( $i=0; $i<$value['point']; $i++ ) { echo "★"; }
ariiiiiga

2019/01/31 14:57

すいません。出力結果が、 -1の時星1個の画像 1の時星2個の画像 3の時星3個の画像 になるのですがその場合はどう変えたらいいですか?
mayoi_maimai

2019/01/31 15:06

かっこ悪いですが以下でできます。 ただ-1.gif、1.gif、2.gifにするとかあらかじめ画像データを配列化するとかした方がよいと思います。 <td> <? if ( $value['point'] == '-1' ) : ?> <img src="-1の画像"> <? else if ( $value['point'] == '1' ) : ?> <img src="1の画像"> <? else if ( $value['point'] == '2' ) : ?> <img src="2の画像"> <? else if ( $value['point'] == '3' ) : ?> <img src="3の画像"> <? endif; ?> </td>
ariiiiiga

2019/01/31 15:13

わかりました! いつもありがとうございます!
mayoi_maimai

2019/01/31 15:21

基本をしっかりとしておけば応用もできてくると思います。 皆さんの回答を見ながらコードを追いかけてわからない部分を調べるといったことを繰り返せば慣れてくると思いますよ。
m.ts10806

2019/01/31 21:54 編集

質問者さんが学ぶべきは元の回答のコードの細かいミスではなく考え方の部分ですよ。 mayoi_maimaiさんと私のコードは方向性は違いますが出力結果は同じようなものです。 つまり一覧表示とページングというどこにでもあるようなありふれたものでも表現方法は無限にあるということです。 にも関わらずphpの構文でつまずいているご自身の現在地は自覚された方が良いです。DBとかページングとか言ってる段階ではなさそうです。デバッグから覚えてください。 もっとミニマムなコードからひとつずつ階段をのぼっていってください。 三歩進んで五歩下がってますよ。
ariiiiiga

2019/02/01 06:36

mayoi_maimaiさん ページング部分の”次へ”と”戻る”が$nameにしか対応していないのですが、もう一つ$shopを追加するやり方を教えていただけないでしょうか? 宜しくお願い致します。
m.ts10806

2019/02/01 06:40 編集

横からすみませんが、 要件の後出し、追加はマナー違反と思います。しかも解決済みとなった後ですよね。 それに、ここまでやってもらっているのですからそろそろ自分で考えましょう。teratailはサポートセンターではありません。 3歩進んで10歩下がる気ですか?
m.ts10806

2019/02/01 06:42 編集

(条件を増やす対応も加味した作りをしている私のコードを一切見ていないのも分かりました)
guest

0

動作確認のためHTMLは最小限に。

php

1 2<?php 3define("RECORD_LIMIT",10); 4 5function h($str){ 6 if(is_array($str)) return ''; 7 8 return htmlspecialchars($str); 9} 10 11function executeSql($sql,$option){ 12 try{ 13 $pdo = new PDO('mysql:host=localhost;dbname=***;charset=utf8','***','***', 14 [PDO::ATTR_EMULATE_PREPARES => false]); 15 16 //echo $sql; 17 //var_dump($option); 18 $stmt = $pdo->prepare($sql); 19 foreach($option as $clm_name=>$setting){ 20 //echo $clm_name; 21 //var_dump($setting); 22 $value = $setting["value"]; 23 if($setting["type"]=="like"){ 24 $value = "%{$value}%"; 25 } 26 27 $stmt->bindValue(':'.$clm_name,$value,$setting["param"]); 28 } 29 $stmt->execute(); 30 return $stmt; 31 32 }catch(PDOException $e){ 33 var_dump($e);die; 34 } 35} 36 37function getData(){ 38 $data = []; 39 $data['record'] = []; 40 $data['count'] = null; 41 42 if(is_null(filter_input(INPUT_GET,'search'))) return $data; 43 44 $where_condition = []; 45 $search_option = []; 46 47 $name = filter_input(INPUT_GET,'name'); 48 if(!is_null($name) && !empty($name)){ 49 $where_condition[] = ' name like :name '; 50 $search_option['name'] = ['value'=>$name,'type'=>'like','param'=>PDO::PARAM_STR]; 51 } 52 53 $where = ''; 54 if(count($where_condition) > 0){ 55 $where = ' where '.implode(' OR ', $where_condition); 56 } 57 58 //var_dump($whereCondition); 59 //var_dump($where); 60 try{ 61 62 $count_sql = 'select count(*) as count from hosts'.$where; 63 64 //echo $count_sql; 65 $count_stmt = executeSql($count_sql,$search_option); 66 if($count_stmt){ 67 $data['count'] = $count_stmt->fetch()['count']; 68 } 69 70 $p = filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT); 71 $page = (!is_null($p)) ? (int)$p :1; 72 $start = (RECORD_LIMIT * ($page - 1)); 73 74 $display_sql = 'select * from hosts'.$where.' order by post_id desc limit :start,'.RECORD_LIMIT; 75 $search_option['start'] = ['value'=>$start,'type'=>'eq','param'=>PDO::PARAM_INT]; 76 //echo $display_sql; 77 $select_stmt = executeSql($display_sql,$search_option); 78 //var_dump($select_stmt->fetchAll());exit; 79 80 $data['record'] = $select_stmt->fetchAll(PDO::FETCH_ASSOC); 81 82 }catch(PDOException $e){ 83 var_dump($e);die; 84 } 85 return $data; 86} 87 88function pagerHtml($record_count=0){ 89 $pagerHtml=''; 90 $pageCnt = ceil($record_count / RECORD_LIMIT); 91 $p = filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT); 92 $page = (!is_null($p)) ? (int)$p :1; 93 94 $get_condition = []; 95 96 $name = filter_input(INPUT_GET,'name'); 97 if(!is_null($name) && !empty($name)){ 98 $get_condition[] = 'name='.urlencode($name); 99 } 100 $search_option = ''; 101 if(count($get_condition) > 0){ 102 $search_option = '&'.implode('&',$get_condition); 103 } 104 105 $pagerHtml = '<ul>'; 106 if($page > 1 && $page !== 2){ 107 $pagerHtml .= '<li><a href="'.h($_SERVER['PHP_SELF']).'?search=&p=1'.$search_option.'">first</li>'; 108 } 109 if($page > 1){ 110 $pagerHtml .= '<li><a href="'.h($_SERVER['PHP_SELF']).'?search=&p='.($p-1).$search_option.'">prev</li>'; 111 } 112 for($i=1;$i<=$pageCnt;$i++){ 113 $page_active = ''; 114 if($page === $i){ 115 $page_active =' class="active"'; 116 } 117 $pagerHtml .= '<li'.$page_active.'><a href="'.h($_SERVER['PHP_SELF']).'?search=&p='.$i.$search_option.'">'.$i.'</li>'; 118 } 119 if($page < $pageCnt){ 120 $pagerHtml .= '<li><a href="'.h($_SERVER['PHP_SELF']).'?search=&p='.($p+1).$search_option.'">next</li>'; 121 } 122 if($page < $pageCnt && $page !== (int)($pageCnt-1)){ 123 $pagerHtml .= '<li><a href="'.h($_SERVER['PHP_SELF']).'?search=&p='.$pageCnt.$search_option.'">last</li>'; 124 } 125 $pagerHtml .= '</ul>'; 126 127 return $pagerHtml; 128} 129 130$data_set = getData(); 131//var_dump($data_set); 132 133$input_name = filter_input(INPUT_GET,'name'); 134$record_html = ''; 135if(is_null($data_set['count'])){ 136 $record_html = '<p>検索条件を入力し、「検索」を押してください</p>'; 137}else if($data_set['count'] === 0){ 138 139 $record_html = '<p>1件も見つかりませんでした</p>'; 140}else{ 141 $record_count = h($data_set['count']); 142 $record_html = <<<EOF 143<p>{$record_count}件見つかりました</p> 144<table> 145 <thead> 146 <tr> 147 <th>id</th> 148 <th>name</th> 149 </tr> 150 </thead> 151 <tbody> 152 153EOF; 154 foreach($data_set['record'] as $rownum=>$row){ 155 $record_html.='<tr id="row_'.$row['post_id'].'">'; 156 foreach($row as $value){ 157 $record_html.='<td>'.h($value).'</td>'; 158 } 159 $record_html.="</tr>\n"; 160 } 161 162 $record_html .= <<<EOF 163 </tbody> 164</table> 165 166EOF; 167} 168?> 169<!DOCTYPE HTML> 170<html lang="ja"> 171<head> 172<meta charset="utf-8" > 173<title>トップページ</title> 174<style> 175ul li{ 176 display: inline; 177 } 178li{ 179 margin-right:5px; 180 } 181 ul li a{ 182 color:#58ACFA; 183 } 184 ul li.active a{ 185 color:#f00; 186 } 187</style> 188</head> 189 <body> 190 191 <h2>検索フォーム</h2> 192 <form method="GET"> 193 <label for="InputName">ホスト名</label> 194 <input name="name" id="InputName" value="<?=(!is_null($input_name))? h($input_name) : '' ?>"> 195 <button name="search">検索</button> 196 </form> 197 198 <?=$record_html ?> 199 <?=pagerHtml($data_set['count']) ?> 200 </body> 201</html>

投稿2019/01/31 06:00

編集2019/01/31 08:34
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/31 08:41

PDO の ERRMODE_EXCEPTION !w やっぱ、ふれーむわーくだよなぁ。。。
m.ts10806

2019/01/31 08:55

ですねえ。 あまり手続きもりもりで書くもんじゃないですね。画面から正常系動かすだけならいいけど、どうしても抜けが出てしまう。
ariiiiiga

2019/01/31 13:36

ありがとうございました。できました。 出力項目がすべてになっているので下記の部分をselect nameなど絞りたいです。 $display_sql = 'select * from hosts'.$where.' order by post_id desc limit :start,'.RECORD_LIMIT; select nameに変更するとがNotice: Undefined index: post_idが下記の部分に出てしまいますがどうしたらいいのでしょうか? foreach($data_set['record'] as $rownum=>$row){ $record_html.='<tr id="row_'.$row['post_id'].'">'; foreach($row as $value){ $record_html.='<td>'.h($value).'</td>'; } $record_html.="</tr>\n"; } 宜しくお願い致します。
m.ts10806

2019/01/31 19:07 編集

SQL勉強してください。 私はコピペであなたがやりたいこと全てを網羅したコードを渡したわけではないです。ご自身の都合で改修したのならご自身の責任で整合性をとってください。そのエラーは何も珍しいことはないです。基本です。 考え方を学ばないと何もできあがりません。 デバッグコードを埋め込んであるのを気づきましたか?実際の動作には不要なのでコメントアウトをしてあります。 私もこのコードを作るためにデバッグをしています。つまりデバッグの要所ですね。 気になるならコメントアウトを解除してみるといいです。 私もそれなりに仕事でphpやってきていますから、言ってしまえばプロのコードです(このコードはだいぶレベルは落としてますが) 学ぶことは多いはずですよ。
guest

0

getHostDataで対象データを抽出したいのですよね?
getHostData内にはlimitが記載されていないですから
すべてが出力対象でしょう

投稿2019/01/31 03:01

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ariiiiiga

2019/01/31 03:14

ありがとうございます。 表示数は指定できたのですが、5件以降の表示を見るため次へを押すと最初の5件が表示されてページは一番最後になってしまいます。 原因わかりませんか?
yambejp

2019/01/31 03:15

offsetの指定がおかしいんじゃないですかね (まぁ全体的におかしいんですけど)
ariiiiiga

2019/01/31 03:29

調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問