回答編集履歴
6
追記
answer
CHANGED
@@ -4,12 +4,14 @@
|
|
4
4
|
//--------------①検索用ここから------------------>
|
5
5
|
function getHostData($params){
|
6
6
|
if(!isset($params['search'])){
|
7
|
-
return[];
|
7
|
+
return[]; //これ返したらどうなるかわかって入れてるのだろうか
|
8
8
|
}
|
9
9
|
try{
|
10
10
|
$pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root','',
|
11
11
|
array(PDO::ATTR_EMULATE_PREPARES => false));
|
12
12
|
} catch (PDOException $e) {
|
13
|
+
//せっかくException捕捉してるのにその内容をどこにも出さないのでは問題が何か分からない。
|
14
|
+
//というか、接続のところだけcatchしても意味がない。全ての処理がうまくいく保障なんてないのでDB関係の処理は一通り囲っておくべき
|
13
15
|
exit();
|
14
16
|
}
|
15
17
|
|
@@ -58,7 +60,7 @@
|
|
58
60
|
$sql->bindValue(":offset", $offset, PDO::PARAM_INT);
|
59
61
|
$sql->execute();
|
60
62
|
|
61
|
-
//これだと検索したときと
|
63
|
+
//これだと検索したときと一緒にできない
|
62
64
|
|
63
65
|
$hostData=[];
|
64
66
|
//---------------②ページング用ここまで-------------
|
5
修正
answer
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
if(!empty($params['name'])){
|
17
17
|
$where[] = "name like '%{$params['name']}%'";
|
18
|
-
}
|
18
|
+
}//SQLインジェクション対策してください。
|
19
19
|
|
20
20
|
if($where){
|
21
21
|
$whereSql = implode(' OR ', $where);
|
4
修正
answer
CHANGED
@@ -130,6 +130,7 @@
|
|
130
130
|
|
131
131
|
if($p > 0){
|
132
132
|
echo '<a href="2.php?p=', $prev_num, '">前へ</a>','</td>'; //検索条件もつけないと他のページで対応できない(今回質問者が聞いていること)
|
133
|
+
//,でも動かないことはないけど意味合いとしては「文字列連結」だから . の方が適切。統一すべき
|
133
134
|
} else {
|
134
135
|
echo '最新';
|
135
136
|
}
|
3
修正
answer
CHANGED
@@ -153,4 +153,12 @@
|
|
153
153
|
</body>
|
154
154
|
</html>
|
155
155
|
|
156
|
-
```
|
156
|
+
```
|
157
|
+
|
158
|
+
リクエストパラメータについて基本的な知識がついていないことで非効率で拡張性もなく達成に向かっていないコードになっています。
|
159
|
+
下記きちんと読んで概念を理解してください
|
160
|
+
- [HTTPとPOSTとGET](https://qiita.com/Sekky0905/items/dff3d0da059d6f5bfabf)
|
161
|
+
- [[PHP] リクエストパラメータ・セッションに関するまとめ](https://qiita.com/mpyw/items/7852213f478e8c5a2802)
|
162
|
+
|
163
|
+
teratail内を探せば類似の問題はあります。
|
164
|
+
- [PHP ページ移動時のデータ保存について](https://teratail.com/questions/26387)
|
2
修正
answer
CHANGED
@@ -58,7 +58,7 @@
|
|
58
58
|
$sql->bindValue(":offset", $offset, PDO::PARAM_INT);
|
59
59
|
$sql->execute();
|
60
60
|
|
61
|
-
//これだと検索したときと同居できないんじゃ?
|
61
|
+
//これだと検索したときと同居できないんじゃ?
|
62
62
|
|
63
63
|
$hostData=[];
|
64
64
|
//---------------②ページング用ここまで-------------
|
@@ -129,13 +129,13 @@
|
|
129
129
|
$total_page= ceil($total_res / $limit);
|
130
130
|
|
131
131
|
if($p > 0){
|
132
|
-
echo '<a href="2.php?p=', $prev_num, '">前へ</a>','</td>';
|
132
|
+
echo '<a href="2.php?p=', $prev_num, '">前へ</a>','</td>'; //検索条件もつけないと他のページで対応できない(今回質問者が聞いていること)
|
133
133
|
} else {
|
134
134
|
echo '最新';
|
135
135
|
}
|
136
136
|
|
137
137
|
if($total_page-1 > $p){
|
138
|
-
echo '<a href="2.php?p=', $next_num, '">次へ</a>','</td>';
|
138
|
+
echo '<a href="2.php?p=', $next_num, '">次へ</a>','</td>';//検索条件もつけないと他のページで対応できない(今回質問者が聞いていること)
|
139
139
|
} else {
|
140
140
|
echo '末尾';
|
141
141
|
}
|
1
修正
answer
CHANGED
@@ -58,7 +58,7 @@
|
|
58
58
|
$sql->bindValue(":offset", $offset, PDO::PARAM_INT);
|
59
59
|
$sql->execute();
|
60
60
|
|
61
|
-
//これだと検索したときと同居できないんじゃ?
|
61
|
+
//これだと検索したときと同居できないんじゃ?検索条件はSESSIONで持ちまわるとかで対応可能。
|
62
62
|
|
63
63
|
$hostData=[];
|
64
64
|
//---------------②ページング用ここまで-------------
|
@@ -88,7 +88,7 @@
|
|
88
88
|
if(!empty($_GET)){ // $_GETの存在はチェックする必要ないのでは
|
89
89
|
$hostData = getHostData($_GET);?> // $_GETはスーパーグローバル変数なので引数で渡す必要はなし。
|
90
90
|
<div class="col-xs-6 col-xs-offset-3">
|
91
|
-
<?php if(isset($hostData) && count($hostData)): ?>
|
91
|
+
<?php if(isset($hostData) && count($hostData)): ?>
|
92
92
|
<p class="alert alert-success"><?php echo count($hostData) ?>件見つかりました。</p>
|
93
93
|
|
94
94
|
<table class="table">
|
@@ -100,6 +100,8 @@
|
|
100
100
|
<tbody>
|
101
101
|
<?php
|
102
102
|
while ($row = $sql -> fetch(PDO::FETCH_ASSOC)){ //$hostDataのデータが無駄になった。
|
103
|
+
//「検索結果0件」はlimitやoffsetで絞っても0は0なのでそのためだけに$hostDataを作るのはコストが高すぎる。
|
104
|
+
//例え10件ページングで12件ヒットしたとして「p=3」とブラウザのURL切り替えられても「検索結果0」というのは理論的に合っている
|
103
105
|
echo '<tr>';
|
104
106
|
echo '<td>', htmlspecialchars($row['name']),'</td>';
|
105
107
|
echo '</tr>';
|
@@ -140,13 +142,11 @@
|
|
140
142
|
//----ページング用ここまで------
|
141
143
|
|
142
144
|
/*
|
143
|
-
SQLは
|
145
|
+
SQLは下記2本で充分今回の対応が可能 無駄なDB接続・SQL実行が多すぎるのでデータ件数が何千件何万件となったときかなり危険
|
144
146
|
select * from hosts $whereSql に offset limit つけたもの(要は現ページに表示するデータ)
|
145
147
|
|
146
|
-
select count(*) from hosts $whereSql (要は検索結果の全件数)
|
148
|
+
select count(*) from hosts $whereSql (要は検索結果の全件数)
|
147
|
-
|
148
|
-
|
149
|
-
|
149
|
+
|
150
150
|
*/
|
151
151
|
?>
|
152
152
|
|