phpでPDOについての学習メモ3

やりたいこと

  • 削除ボタンが押されたデータをDBから削除する。
  • 修正した内容をDBで更新する。

    5.削除ボタンが押されたデータをDBから削除する

    まずDBに接続し、実行させるところまでは書いておく。(phpでPDOについての学習メモ1,2より参考にすること) 次に下記のように実装する。

<?php
$sql = 'DELETE FROM contact_form WHERE id = :id';
     $stmt = $pdo -> prepare($sql);
     $stmt -> bindParam(':id',$_POST['id'], PDO::PARAM_INT);
     $stmt -> execute();
?>

注意する点

  • DELETE文はSQL文なので変数はWHEREの中に直接PHP文の変数$_POST['name']とは書けない。
    $stmt->bindParam(':name',$_POST['name'],PDO::PARAM_INT);このようにSQL文の変数に代入してあげる。

6.DBをUPDATEする

DBに接続し実行させるところまでは同じ。 次に下記のコードを参考に実装する。

(edit_confirm.php)
<?php
if (isset ($_POST['id'])){
$sql = "UPDATE contact_form SET name = :name, email = :email WHERE id = :id";
$id = filter_input(INPUT_POST, "id");
    $stmt = $pdo -> prepare($sql);
    $stmt -> bindParam(':id',$id, PDO::PARAM_INT);
    $stmt -> bindParam(':name',$_POST['name'], PDO::PARAM_STR);
    $stmt -> bindParam(':email',$_POST['email'], PDO::PARAM_STR);
    $stmt -> execute();
}
?>
<html>
<head>
<body>
:(省略)
<input type="hidden" name="id" value="<?php echo $_POST['id'];?>">
:(省略)
</body>
</head>
</html>

注意する点  - SETはSET name=:name SET email=:emailみたいにカラムごとにSETを書かなくてよい。ソースコードに書いてあるようにカンマでまとめて書く。 - POSTは短期記憶なのでlist.phpからedit_form.phpにPOST送信したものをedit_form.phpでhiddenを使いワンクッション挟み、UPDATE文を書くまえにissetで受取る。

php PDOで取得したデータをhtml内のtableに表示する方法

やりたいこと

  • 表示させたデータをテーブルで表示させる。

5.表示させたデータをテーブルで表示させる

まずDBに接続し、実行させるところまでは書いておく。(phpでPDOについての学習メモ1,2より参考にすること)

次に下記のコードを参考にテーブルを作っていく。
<table>〜</table>
表(テーブル)をつくるタグ

<tr>〜</tr> table record
表でつくられる横一列のデータ(行)をまとめ

<td>〜</td> table data
セルの要素であり、表の値(データ)を意味する。

<th>〜</th> table theme
セルの要素であり、表の見出しを意味する。

注意する点 - htmlのなかにphpのコードを書くときは<?php ?>で囲むのを忘れないこと。 - DBから表示させたデータはforeachを使いループさせ、全データを表示させるが、このときforeach文はhtmlの上に書かれているDB接続のためのphpコードの中に書かないで、ループさせたいデータを囲っている,<tr>.....</tr>のすぐ上に書くこと。 またforeach文の閉じタグ"}"を<tr>.....</tr>の終わりに書くことを忘れないようにする。

見本

<?php
・
・
DB接続コード(省略)
・
・
?>
<html>
<head>
</head>
<body>
<h1>データ一覧</h1>
<table border="1">
  <tr>
    <th>ID</th>
    <th>NAME</th>
    <th>EMAIL</th>
  <th>DELETE</th>
  <th>FIX</th>
 </tr>
 <?php
 foreach ($stmt as $_POST){
 ?>
 <form action="delete_confirm.php" method="post">
 <tr>
      <td> <?php echo $_POST['id'];?> </td>
      <td> <?php echo $_POST['name'];?> </td>
      <td><?php echo  $_POST['email'];?> </td>
   <td>
     <input type="submit" value="削除" name="delete">
     <input type="hidden" name="id" value="<?php echo $_POST['id'];?>">
</form>
  </td>
<form action="edit_confirm.php" method="post">
  <td><input type="submit" value="修正" name="fix">
  </td>
      <input type="hidden" name="id" value="<?php echo $_POST['id'];?>">
      <input type="hidden" name="name" value="<?php echo $_POST['name'];?>">
      <input type="hidden" name="email" value="<?php echo $_POST['email'];?>">
</form>
</tr>
<?php
}
?>
</table>
</body>
</html>

phpでPDOについての学習メモ2

やりたいこと

  • データを出力させる。
  • 出力したデータを表示させる。

    3.DB内のデータを出力させる

    まず、DBに接続のためのコードを書いた後に、SQL文で出力させたいデータのあるテーブルを指定する。

<?php
$sql = "SELECT * FROM contact_form";
?>

注意する点 - この時テーブル名は,''(シングルクオーテーション)で囲わないこと。 次に、queryを使いSQL文を実行する。

<?php
$stmt = $pdo->query($sql);
?>

4.出力したデータを表示させる

fetchを使い出力したデータを表示させる.

<?php
$result = $stmt->fetch(PDO::FETCH_ASSOC);
print($result['id']);
print($result['name']);
print($result['email']);
?>

これだと一行のデータしか表示されないので以下のようにwhileを使いループさせる。

<?php
while($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
    print($result['id']);
    print($result['name']);
    print($result['email']);
}
?>

phpでPDOについての学習メモ

やりたいこと

  • DBに接続する。
  • DBに入力したデータを追加出来るようにする。

1.DBに接続させる方法

DBにアクセスするためには、どこに接続するのか(host)、誰が接続するのか(user)、本当にその人なのか(password)、 の3つが必要。

<?php
$dsn = 'mysql:host=localhost;dbname=test';
$username = "root";
$password = "";
?>

->きちんと接続されているか以下のコードで確認

<?php
try {
$pdo = new PDO($dsn, $username, $password);
echo "接続成功!";
} catch (PDOException $e) {
 exit('接続失敗。'.$e->getMessage());
}
?>

2.DBに入力したデータを追加させる

<?php
$stmt = $pdo->prepare("INSERT INTO contact_form (name,email) VALUES (:name,:email)");
     $stmt->bindParam(':name',$_SESSION['name']);
     $stmt->bindParam(':email',$_SESSION['email']);
     $stmt->execute();
?>

注意する点

  • prepareはSQL文なので変数は直接VALUESの中にPHP文の変数$_SESSION['name']とは書けない。
    $stmt->bindParam(':name',$_SESSION['name']);このようにSQL文の変数に代入してあげる。

  • このときSESSIONを使っているので文頭にsession start();を描き忘れないこと。

参考にしたサイト