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

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

ただいまの
回答率

89.05%

ベースのデータを検索後、表示されたデータリストをさらに詳細検索するには?

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,211

iamsin

score 15

データベースのデータを検索後、表示されたデータリストからさらに詳細検索するにはどうしたらよいでしょうか?

下記の流れで検索を考えています。

①入力フォームにキーワードを入力し、検索をします。
②検索でヒットしたデータのリストを表示。
③リストの中からさらに詳細データを知りたい場合にさらに検索をかけ、詳細データを表示させる。
例えば、一つ一つのリストの横に「詳細」ボタンを設置してそれをクリックするとそのデータの詳細が表示されるなど。

例えば、下記のようなデータがあるとします。

データテーブル名: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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/07/09 14:00

    コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。

    キャンセル

  • kei344

    2016/07/10 16:16

    編集ありがとうございます。```で囲う場合、開始部分の```を```PHPとすると、PHP用のコードハイライタが効きます。

    キャンセル

回答 2

checkベストアンサー

+1

気になった点のみ挙げます。

list.php
・FORMの開始タグがない
・名前のINPUTタグのnameに値を入れている。またPHPコード外なので次のようにする。
<INPUT type ="hidden" name="$row['name_1']">

<INPUT type ="hidden" name="name" value="<?=$row['name_1']?>">
※nameは仮なので適宜直してください

price.php
・$rowはlist.phpの変数なので使えない
・名前はname(仮)から取得する
$price="{$_POST[$row['name_1']]}";

$price=$_POST['name'];

その他、上記に付随する箇所の修正が必要です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/11 12:48

    ご指摘誠にありがとうございます。
    希望の検索が可能になりました。
    もっと基本から勉強します。ありがとうございました!

    キャンセル

+1

// list.php
//詳細検索ボタン
<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>


// list.php
//詳細検索ボタン
<TD align="center"><FORM name="form2" method = "post" action="price.php">
<INPUT type ="hidden" name="$row['name_1']">
<INPUT type = "submit" value="検索">
</FORM></TD> // RORM -> FORM
</TR>
// price.php
$sql = "SELECT * FROM list WHERE name_1 = '$price';
$sth = $pdo->prepare($sql);
$sth ->bindValue(':name_1',$price,PDO::PARAM_STR);


// price.php
$sql = "SELECT * FROM list WHERE name_1 = '$price'"; // <- " 閉じてない
$sth = $pdo->prepare($sql);
$sth ->bindValue(':name_1',$price,PDO::PARAM_STR);

TDの中が、<?php ?>の中にいない↓

?>
<TR>
    <TD>{$row['name_1']}</TD>
    <TD>{$row['name_2']}</TD>
    <TD>{$row['age']}</TD>
</TR>
<?php

シンタックスエラーは機械的にチェックできることです。文法チェック機能のあるエディタを使ってください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/10 16:14

    ご指摘誠にありがとうございます。
    構文チェックができるエディタを利用するように致します。

    構文エラーのところを修正しましたが、
    <price.php>
    //POSTされたデータを受け取る
    $price="{$_POST[$row['name_1']]}";

    のところでエラーがでます。
    クォーテーションを色々いじってみましたが直りません。


    キャンセル

  • 2016/07/10 16:16

    どんなエラーが出たのか、エラーメッセージは必ず明記してください。
    エラーメッセージは全ての環境で同じメッセージが出るわけではありません。

    キャンセル

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

  • ただいまの回答率 89.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る