[PHP]一覧のデータを一つを抽出する方法


先日、記載した記事でデータベースを取得したデータを一覧にして表示を行なった。

今回は、これらの記事の詳細を見れるのようなプログラムを作成する。

始めに、
新しくprofile.phpとprofile.tpl.phpを用意する。

まず、profile.phpにてデータベースとリンクさせる設定を行う。

<?php 
$pdo=new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root','root');
$message='トレーニングマックス';
$sql='SELECT dbPractice.id,dbPractice.name,dbPractice.bench,dbPractice.deadlft,muscle.model FROM dbPractice 
INNER JOIN muscle ON dbPractice.body_id =muscle.body_id
WHERE dbPractice.id=:id';
$statement=$pdo->prepare($sql);
$statement->bindValue(':id',$id,PDO::PARAM_INT);
$statement->execute();
$human=$statement->fetch(PDO::FETCH_ASSOC);
$statement=null;
$pdo=null;
require_once 'view/profile.tql.php';
?>

通常のデータベースの読み込みと違う部分は、全てを取得するのではなく、id一つ分を取得する。よって、sql文が

$sql='SELECT dbPractice.id,dbPractice.name,dbPractice.bench,dbPractice.deadlft,muscle.model FROM dbPractice 
INNER JOIN muscle ON dbPractice.body_id =muscle.body_id
WHERE dbPractice.id=:id';//WHERE dbPractice.id=idにより一つ分のid変数を指定する

WHERE dbPractice.id=idにより一つ分のid変数を指定する
そして、

$statement->bindValue(':id',$id,PDO::PARAM_INT);

によって変数idをバインドする。

また、変数idの指定を

if(isset($_REQUEST['id'])){
    $id=$_REQUEST['id'];}

とリクエストがあった場合に変数idを定義させる。

そしてデータを取得する際に、

$human=$statement->fetch(PDO::FETCH_ASSOC);
//fetch()で一つのデータを取得

これでデータが取得出来たのであとは、
profile.tpl.php,profile.tql.phpにて
詳細画面の追加と詳細画面へ遷移するボタンの実装を行う

php profile.tpl.php

<?php include('header.tpl.php');?>
<body>
   <h1><?php echo $message;?></h1>
     <ul>
     <li>NAME:<?php echo $human['name']?></li>
     <li>BP:<?php echo $human['bench']?></li>
     <li>DL:<?php echo $human['deadlft']?></li>
     <li>type:<?php echo $human['model']?></li>
     </ul>
  <p><a href="sql.php">リストに戻る</a></p>

</body>
sql.tpl.php
<?php include('header.tpl.php');?>
<body>
   <h1><?php echo $message;?></h1>
   <table>
   <tr>
        <td>名前</td>
        <td>BP</td>
        <td>DL</td>
        <td>bodymake</td>
        <td>詳細</td>
     </tr>
   <?php 
   foreach($result as $value){?>
     <tr>
        <td><?php echo $value['name']?></td>
        <td><?php echo $value['bench']?></td>
        <td><?php echo $value['deadlft']?></td>
        <td><?php echo $value['model']?></td>
        <td><a href="profile.php?id=<?php echo $value['id']; ?>">詳細はこちらから</a></td>
     </tr>
  <?php }?>
   </table>

</body>

これで詳細画面を見ることが出来るようになった。

ブログのタイトル一覧から詳細へ見れるような機能が実装出来そうですy(^^)y