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']); } ?>
- このままだと横一列にデータが表示されて見にくいので['email'])の後に、
.'<br>'
をつけて改行する。参考にしたサイト
- queryを参考
https://www.flatflag.nir87.com/select-932 - fetchを参考
https://qiita.com/mitsuru793/items/45b2452284e321c7a5a9
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();を描き忘れないこと。
参考にしたサイト
- PDOでINSERTする(PHPでMySQLにデータ挿入) https://qiita.com/tabo_purify/items/0a69fd48018c4ebfd2f2