前提・実現したいこと
PHPで作成しているデータベースのidを削除したい
PHPでフォーム作成の練習のためにアプリを制作しています。
フォームのデータをデータベースに登録し、データを参照するところまでは実装できたのですが、データを削除することができません。
削除のボタンを実行すると、idが削除されて、福田さんの項目を全て削除できるようにしたいです。
発生している問題・エラーメッセージ
index.php
<table> <tr> <th>氏名</th> <th>フリガナ</th> <th>電話番号</th> <th>メールアドレス</th> <th>お問い合わせ内容</th> </tr> <?php foreach($result as $col): ?> <tr> <td><?php echo $col['name'] ?></td> <td><?php echo $col['kana'] ?></td> <td><?php echo $col['tel'] ?></td> <td><?php echo $col['email'] ?></td> <td><?php echo $col['body'] ?></td> <td><a href="edit.php?id=<?php echo $col['id']; ?>">編集</a></td> <td><a href="delete.php?id=<?php echo $col['id']; ?>">削除</a></td> </tr> <?php endforeach; ?> </table>
delete.php
<?php session_start(); require 'contact.php'; var_dump($_GET['id']); try { $dbh = new PDO('mysql:host=localhost;dbname=jobpop;charset=utf8mb4', 'root', 'root'); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch (PDOException $e){ echo $e->getMessage(); exit; } try { $stmt = $dbh->prepare('DELETE FROM users WHERE id = :id'); $stmt->execute(array(':id' => $_GET["id"])); echo "削除しました。"; $dbh = null; // $sql = "DELETE FROM contacts WHERE id = 37"; // $res = $dbh->query($sql); } catch (Throwable $e) { echo $e->getMessage(); exit; } ?>
試したこと
delete.phpにて、var_dumpで変数を確認。var_dump($_GET['id']);でnullが返ってくる。
ちなみにコメントアウトしてますが、delete.phpの
$sql = "DELETE FROM contacts WHERE id = 37"; $res = $dbh->query($sql);
こちらで実行するとデータが削除できてます。
なので、データベースの接続とかではなさそうです。
ただ、queryだといちいちidの番号を指定しないと削除できないので、prepareを使って実装をしたい。
解決した方法
・SELECT文飲み直し。
before
$sql = 'SELECT name,kana,tel,email,body FROM contacts';
after
$sql = 'SELECT id,name,kana,tel,email,body FROM contacts';
delete.php
before
$stmt->execute(array(':id' => $_GET["id"]));
after
$stmt->execute(array(':id' => $col["id"]));
回答2件
あなたの回答
tips
プレビュー