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