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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

3回答

7874閲覧

phpで検索結果をページングする機能についてお教えください。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2016/07/14 07:00

編集2016/07/14 07:06

PHPで検索結果をページングする機能を作成しています。

現状:
検索結果とページ番号は表示することができています。

問題点:
ページ番号のリンクを押しても、そのページへは移動せず、
検索結果がない場合に表示される画面が表示されてしまいます。

リンク先をうまく変更すれば、動くのではないかと思うのですが、
私には方法がわかりません。

どのようにコードを変更すれば、検索データの2ページ目以降を
表示することができるようになるでしょうか?

ヒントでも、間違っている点でもなんでも構わないので
お教えいただけないでしょうか?

よろしくお願いいたします。

以下が私が書いたコードです。


member.php

<!DOCTYPE html> <html> <head> <meta charset="<link rel= "stylesheet" type="text/css" href="style3.css">UTF-8"> <titleテスト</title> </head><div class="wrapper"> <div class= "kai"><body> </div><br/> メンバーリスト <form name="form1" method ="post"action ="member_search.php"> ID(半角); <input type="text" name="vid" value> 氏名; <input type="text" name="nm" value><br/><br/> <input type="submit" value="検索"> </form><br/> </div> </body> </html>

member_search.php

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テスト</title> <link rel= "stylesheet" type="text/css" href="style3.css"> </head> <div class="wrapper"> <div class= "kai">検索結果</div><br/> <body> <?php try { $vid = (string)filter_input(INPUT_POST, 'vid'); $nm = (string)filter_input(INPUT_POST, 'nm'); $dsn ='mysql:dbname=kadai;host=localhost'; $user ='root'; $password=''; $dbh =new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql = "SELECT * FROM mst_member WHERE 1 "; if ($vid != "") { $sql .= " and id = $vid "; } if ($nm != "" ) { $sql .= " and name like '%$nm%' "; if(empty($vid)&& empty($nm)) { print "何も入力されていません。<br/><br/>"; print'<input type="button"onclick="history.back()"value="戻る">'; exit; } $stmt =$dbh->prepare($sql); $data[]=$vid; $data[]=$nm; $stmt->execute($data); $count = $stmt->rowCount(); print "検索結果は".$count."件です。<br/>"; if ($count<1) { print "検索結果がありません。<br/>"; } else { } $adjacents = 3; $total_pages = $count; $targetpage = "member_search.php"; $limit = 10; $page = $_GET['page']; if($page) { $start = ($page - 1) * $limit; } else { $start = 0; } if ($page == 0) $page = 1; $prev = $page - 1; $next = $page + 1; $lastpage = ceil($total_pages/$limit); $lpm1 = $lastpage - 1; $pagination = ""; if($lastpage > 1) { $pagination .= "<div class=\"pagination\">"; if ($page > 1) $pagination.= "<a href=\"$targetpage?page=$prev\">Previous</a>"; else $pagination.= "<span class=\"disabled\">Previous</span>"; if ($lastpage < 7 + ($adjacents * 2)) { for ($counter = 1; $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } } elseif($lastpage > 5 + ($adjacents * 2)) { if($page < 1 + ($adjacents * 2)) { for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } $pagination.= "..."; $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>"; $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>"; } elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) { $pagination.= "<a href=\"$targetpage?page=1\">1</a>"; $pagination.= "<a href=\"$targetpage?page=2\">2</a>"; $pagination.= "..."; for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } $pagination.= "..."; $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>"; $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>"; } else { $pagination.= "<a href=\"$targetpage?page=1\">1</a>"; $pagination.= "<a href=\"$targetpage?page=2\">2</a>"; $pagination.= "..."; for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } } } if ($page < $counter - 1) $pagination.= "<a href=\"$targetpage?page=$next\">Next</a>"; else $pagination.= "<span class=\"disabled\">Next</span>"; $pagination.= "</div>\n"; } $sql2 = "SELECT * FROM mst_member WHERE 1 LIMIT $start, $limit" ; if ($vid != "") { $sql .= " and id = $vid "; } if ($nm != "" ) { $sql .= " and name like '%$nm%' "; } if(empty($vid)&& empty($nm)) { print "何も入力されていません。<br/><br/>"; print'<input type="button"onclick="history.back()"value="戻る">'; exit; } $stmt2 =$dbh->prepare($sql2); $data[]=$vid; $data[]=$nm; $stmt2->execute($data); print'<table class = "info" border=1>'; print "<tr><td></td><td>ID</td><td>名前</td><tr/>"; while($row=$stmt2->fetch(PDO::FETCH_ASSOC)) { print"<tr>" ; print"<td>".$row["id"]."</td>"; print"<td>".$row["name"]."</td>" ; print"<tr/>" ; } print"</table>"; ?> <?=$pagination?> <?php catch (Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <br /> <input type ="button"onclick="history.back()"value="戻る"> </div> </body> </html>

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

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

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

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

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

guest

回答3

0

直接の回答ではありませんが、HTMLの構造がおかしい箇所があるので指摘します。

HTML

1<meta charset="<link rel= "stylesheet" type="text/css" href="style3.css">UTF-8"> 2```ではなく 3```HTML 4<meta charset="UTF-8"> 5<link rel= "stylesheet" type="text/css" href="style3.css"> 6```こうします。 7 8--- 9 10```HTML 11</head><div class="wrapper"> 12<div class= "kai"><body> 13</div> 14```これは 15```HTML 16</head> 17<body> 18<div class="wrapper"> 19<div class= "kai"></div> 20```こうします。 21 22--- 23 24```PHP 25// print"<tr/>" ; 26// ↓ 27 print"</tr>" ; 28```閉じタグはスラッシュ+タグ名です。

投稿2016/07/14 07:31

kei344

総合スコア69398

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

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

退会済みユーザー

退会済みユーザー

2016/07/14 08:35

私の気づいていないミスをご指摘いただき、本当にありがとうございます。 まだまだ、未熟者ですが、今後ともよろしくお願いいたします。
guest

0

ベストアンサー

ページ送りのリンクに、vidおよびnmが引き継がれていません。だからif(empty($vid)&& empty($nm))の条件に引っかかって、なにも表示されないのだと思います。$paginationで生成しているaタグに、?page=$prev&vid=$vid&nm=$nmのようにvidとnmのパラメータも付与してみてください。

投稿2016/07/14 07:28

masaya_ohashi

総合スコア9206

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

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

退会済みユーザー

退会済みユーザー

2016/07/14 08:36

まさにおっしゃっていただいた通りでした。 お教えいただきまして、大変うれしく思います。ありがとうございます。 無事、解決をすることができました! ありがとうございました!
guest

0

とりあえず検索条件を入れた場合のSQL文を表示してみることです
見た感じprepareで処理しているのに変数はSQL文に直書きしているし
プレースホルダーの使い方がかなり変ですね

なお、表示を止めるならWHEREに"and 0"を足してやればよいですよ

投稿2016/07/14 07:19

yambejp

総合スコア114759

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

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

退会済みユーザー

退会済みユーザー

2016/07/14 08:38

いろいろと変な点があることに改めて気づかされました。。 まだまだ勉強が足りませんね。 サンプルとても参考になりました!ありがとうございます! また、機会がありましたら、ぜひご指導のほどよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問