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>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/07/14 08:35