データベースのデータを検索後、表示されたデータリストからさらに詳細検索するにはどうしたらよいでしょうか?
下記の流れで検索を考えています。
①入力フォームにキーワードを入力し、検索をします。
②検索でヒットしたデータのリストを表示。
③リストの中からさらに詳細データを知りたい場合にさらに検索をかけ、詳細データを表示させる。
例えば、一つ一つのリストの横に「詳細」ボタンを設置してそれをクリックするとそのデータの詳細が表示されるなど。
例えば、下記のようなデータがあるとします。
データテーブル名:list
カラム名 :id, name_1, name_2, age
id name_1 name_2 age
1 佐藤 まさお 22
2 藤田 くにお 25
3 大橋 たけし 24
4 佐藤 まこと 25
5 加藤 たろう 23
入力フォームに「藤」と入力し検索すると下記のようなリストがヒットするとします。(重複は表示させません)
佐藤 「詳細ボタン」
藤田 「詳細ボタン」
加藤 「詳細ボタン」
リストの横の「詳細ボタン」をクリックすると詳細データが下記のように表示される
name_1 name_2 age
佐藤 まさお 22
佐藤 まこと 25
具体的には下記のようにプログラムしましたが、
検索 → リスト化 → 詳細検索
詳細検索でうまく表示されません。
エラー:Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\PHPSample\price.php on line 99(←最終行)
と表示されます。
そもそも、詳細検索で $row['name_1'] をPOST送信することに無理がありますでしょうか?
当方、勉強不足で恐縮ではありますが、ご指導いただけると幸いです。どうぞ宜しくお願いいたします。
---<search.html>----検索フォーム-----------------------------------------------
<省略> <FORM name="form" method="post" action="list.php"> <INPUT type="text" name="search"> <INPUT type="submit" value="検索"> </FORM> ```---<list.php>--------------------------------------------------------------------- ```ここに言語を入力 <HTML> <HEAD> <TITLE>テスト</TITLE> </HEAD> <BODY> <?php $db_user = "****"; //ユーザー名 $db_pass = "*****"; //パスワード $db_host = "localhost"; //ホスト名 $db_name = "kensaku"; //データベース名 $db_type = "mysql"; //データベースの種類 $dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8"; //データーベースに接続 try{ $pdo = new PDO($dsn,$db_user,$db_pass); $pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo ->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); print "接続しました<br>"; }catch(PDOException $Exception){ die('接続に失敗しました:' .$Exception->getMessage()); } //POSTされたデータを受け取る $search = "%{$_POST['search']}%"; try{ $sql = "SELECT DISTINCT name_1 FROM list WHERE name_1 LIKE :name_1"; $stmh = $pdo->prepare($sql); $stmh ->bindValue(':name_1',$search,PDO::PARAM_STR); $stmh ->execute(); $count = $stmh->rowCount(); print "検索結果は".$count."件です<BR>"; }catch(PDOException $Exception){ print"エラー:".$Exception->getMessage(); } if($count <1){ print"検索結果がありません<BR>"; }else{ ?> <TABLE with="450" border="1" cellspacing="0" cellpadding="3"> <TBODY> <tr> <th>name_1</th> </tr> <?php while($row = $stmh ->fetch(PDO::FETCH_ASSOC)){ ?> <TR> <TD align="center"><?=htmlspecialchars($row['name_1'],ENT_QUOTES,'UTF-8') ?></TD> //詳細検索ボタン <TD align="center"><FORM name="form2" method = "post" action="price.php"> <INPUT type ="hidden" name="$row['name_1']"> <INPUT type = "submit" value="検索"> </RORM></TD> </TR> <?php } ?> </TBODY></TABLE> <?php } ?> </BODY> </HTML>
---<price.php>----------------------------------------------------------------------
<省略> //POSTされたデータを受け取る $price="{$_POST[$row['name_1']]}"; try{ $sql = "SELECT*FROM list WHERE name_1 = '$price'; $sth = $pdo->prepare($sql); $sth ->bindValue(':name_1',$price,PDO::PARAM_STR); $sth ->execute(); $count = $sth->rowCount(); }catch(PDOException $Exception){ print'エラー:'.$Exception->getMessage(); } if($count <1){ print'検索結果がありません<BR>'; }else{ ?> <TABLE with='450' border='1' cellspacing='0' cellpadding='8'> <TBODY> <tr> <th>name_1</th><th>name_2</th><th>age</th> </tr> <?php while($row = $sth ->fetch(PDO::FETCH_ASSOC)){ ?> <TR> <TD>{$row['name_1']}</TD> <TD>{$row['name_2']}</TD> <TD>{$row['age']}</TD> </TR> <?php } ?> </TBODY></TABLE> <?php } ?> </BODY> </HTML>
回答2件
あなたの回答
tips
プレビュー