【PHP・MySQL】データベースに画像を保存・表示する方法 第5回「画像を削除する」
ここまでの記事はこちら
今回は最後の総仕上げです。データベースに登録した画像を削除できるようにしていきましょう。
解説
削除リンクの変更
list.php の削除リンクを 9 ~ 11 行目のように変更します。
9行目
<a href="javascript:void(0);"
ここでは、「削除」をクリックした時に何も起こらないように a タグのリンクを無効にしています。
10行目
「削除しますか?」という確認アラートを出して、「OK」が押されたら delete.php に移動するという処理を書いています。
少し複雑そうに見えますが、以下の 4 行を 1 行にまとめているだけです。
var ok = confirm('削除しますか?');
if (ok) {
location.href='delete.php?id=<?= $images[$i]['image_id']; ?>';
}
「キャンセル」が押された場合は何も処理を実行しません。
画像を削除する
次に画像削除の処理を書く delete.php ファイルを作成します。
delete.php という名前でファイルを作成して、以下のようにコードを書きます。
image.php と同じように image_id を受け取って、その image_id をもとにデータを削除します。
削除したら list.php に遷移して完了です。
まとめ
以上で完成です!
画像を扱うときは、画像をデータベースに保存するか、フォルダにアップロードするか迷うところです。
プロジェクトによりますが、以下の場合はデータベースに直接保存したほうが扱いやすいことが多いです。
- 画像が mediumblob 型で保存できるサイズの場合
- ユーザーのプロフィール画像やアイコンなど、特定のデータとリンクしている場合
- 画像投稿が複数のユーザーから同時に行われる可能性が高い場合
どちらが良い・悪いというものではないので、ご自身のプロジェクトに合わせてお選びください!
サンプルコード
ここまでのサンプルコードは「ダウンロード」ボタンから一括ダウンロードできます。
サンプルコードをそのまま使用したのですが、どうしても画像がばってんになってしまい表示されません。どうすればよろしいですか。
画像はデータベースに正しく保存されていますでしょうか?
コメント失礼します。
サンプルコードを参考に画像投稿機能を作成することができました。
削除機能のところで、削除キーを付与して、投稿者のみが削除できるようにすることは可能でしょうか。
もし可能であれば、方法を教えていただきたいです。
よろしくお願いいたします。
当サイトを見つけていただきありがとうございます!
ご質問についてですが、方法は多々ありますが可能だと思います。
こちらでコードを全て書くことはできないのでヒントのみになってしまいますが
という流れになると思います。
または Cookie を使ってブラウザに削除キーを保存しておくのも良いかもしれません。
Cookie が削除されてしまうと画像も削除できなくなってしまいますが、投稿者に削除キーの入力を求める必要もないので利便性は良いかと思います。
参考になれば幸いです。
この度は急な質問にも早急にご回答いただき、
誠にありがとうございます。
お陰様で、なんとか実装できそうです!
丁寧に説明していただきとても助かりました。
これからも参考にさせていただきます。
実装できそうとのことで良かったです!
当サイトが少しでもお役に立てば嬉しいです