PHPの勉強で、ページリンクを作成したのですが機能しません。
MySQLに番号(id)、性別(sex)、名前(name)の3つのカラムを持つレコードをいくつか格納しました。
そこで性別を選択し、名前を入力し検索すると、一致するレコードを取り出して表示させました。
(性別選択は必須で、名前が未入力であれば選択された性別のレコードを全部抽出)
入力画面は以下です。input.html
HTML
1 <form action="search.php" method="post"> 2 3 性別: 4 <select name="sex" required> 5 <option value="男">男</option> 6 <option value="女">女</option> 7 </select> 8 9 名前: 10 <input type="text", name="name"> 11 12 <input type="submit" value="検索"> 13 14 </form>
抽出してきたレコードをは1ページあたり3レコードになるよう分割しました。search.php
PHP
1<?php 2 3 if(isset($_POST["sex"])){ 4 $sex=$_POST["sex"]; 5 }else { 6 $sex="男"; 7 } 8 9 10if(isset($_POST["name"])){ 11 $name=$_POST["name"]; 12}else { 13 $name=""; 14} 15 16 $pdo = new PDO($dsn, $user, $password); 17 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 18 19//1ページあたり3つ表示させる 20if(isset($_GET['page'])){ 21 $page=(int)$_GET['page']; 22}else { 23 $page=1; 24} 25 26if ($page > 1) { 27 $start = ($page * 3) - 3; 28} else { 29 $start = 0; 30} 31 32 $sql = "SELECT * FROM table WHERE 1 "; 33 34 $data=[]; 35 if(!is_null($sex)){ 36 $sql.="and sex=? "; 37 $data[]=$sex; 38 } 39 if(!is_null($name)){ 40 $sql.="and ( 0 "; 41 $sql.="or name like concat('%',?,'%') "; 42 $data[]=$name; 43 $sql.="or ? like concat('%',name,'%') "; 44 $data[]=$name; 45 $sql.=") "; 46 } 47 $sql.="LIMIT {$start}, 3"; 48 49 $stm = $pdo->prepare($sql); 50 $stm->execute($data); 51 $result=$stm->fetchAll(PDO::FETCH_ASSOC); 52 53 foreach ($result as $row) { 54 echo $row['name']; 55 } 56 57 58 59// テーブルのデータ件数を取得する 60 61$sql = "SELECT * FROM table WHERE 1 "; 62$data=[]; 63if(!is_null($sex)){ 64 $sql.="and sex=? "; 65 $data[]=$sex; 66} 67if(!is_null($name)){ 68 $sql.="and ( 0 "; 69 $sql.="or name like concat('%',?,'%') "; 70 $data[]=$name; 71 $sql.="or ? like concat('%',name,'%') "; 72 $data[]=$name; 73 $sql.=") "; 74} 75 76$stm = $pdo->prepare($sql); 77$stm->execute($data); 78 79//抽出したレコード数 80$records=$stm->rowCount(); 81 82//トータルページ数 83$totalPage = ceil($records / 3); 84 85?> 86 87<?php for ($i=1; $i<= $totalPage ; $i++):?> 88 89<a href="?page=<?php echo $i ?>"><?php echo $i; ?></a> 90 91<?php endfor; ?> 92
input.htmlで「男」を選択すれば問題なく機能します。
しかし「女」を選択して検索すると、確かに「女」で登録された3レコードが表示されますが、下のページリンク(1 2 3...)をクリックすると、「男」のレコードが表示されてしまいます。1をクリックすると、「男」のレコードが上から3つ分表示さます。
つまり、input.htmlのプルダウンメニューの選択が反映されません。
原因が全く分からずに困っています。皆様のお力を貸していただきたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/21 05:56
2017/09/21 14:05
2017/09/22 00:40
2017/09/22 16:24
2017/09/22 16:26