初めてのPHP ⑧。コメントを削除しよう

初めてのPHP ⑧。コメントを削除しよう
この記事はこんな悩みを解決します
  • データベースからデータを削除する方法が知りたい
  • MySQLでよく使うコマンドについて知りたい
  • PHPを勉強したい

前回の記事でコメントを保存できるようになりました。保存できるようになったらコメントを削除できるようにもなりたいですよね。

この記事を読むことでデータベースからデータを削除する方法が分かります。

初めてのPHP ⑧。コメントを削除しよう

まずはviewにデータを削除するための削除ボタンを作って行きます。

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>PHP</title>
</head>
<body>
	<?php if( !empty($error_message) ): ?>
		<ul>
			<?php foreach( $error_message as $value ): ?>
				<li><?= $value; ?></li>
			<?php endforeach; ?>
		</ul>
	<?php endif; ?>
	<form method='POST' action='/comment'>
		<input name='comment'></input>
		<button type='submit'>Submit</button>
	</form>
	<ul>
		<?php foreach($Comments as $Comment): ?>
			<li>
				<?= $Comment->comment; ?>
				<?= "<a href=delete/?id="."$Comment->id".">削除</a>"; ?>
			</li>
		<?php endforeach; ?>
	</ul>
</body>

ブラウザで確認してみましょう。

予想通り出来てますね。
削除ボタンを押すことでdelete/?id=$Comment->idにアクセスするようにしていますのでコントローラーを設定して行きます。

まずはルーティングの設定です。

$router->get('delete', 'controllers/delete.php');

こんな感じでいいかと思います。

では、コントローラーを設定して行きます。

<?php

$database->delete('Comments', [
		'id' => $_GET['id']
	]);
	header('Location: /');

deleteメソッドにテーブル名と配列としてidを渡しています。その処理がうまくいったらホーム画面に戻るようにしています。

deleteメソッドを作って行きましょう。

public function delete($table, $array){
		$sql = "delete from $table where id = :id";

		try{
			$statement = $this->pdo->prepare($sql);
			$statement->execute($array);
		} catch(Exception $e){
			die($e->getMessage());
		}
	}

whereでidの値を指定して削除するようにしています。
この処理をtryで囲い、うまくいかない場合はエラーメッセージを出すようにしています。この辺は保存するときと同じですね。

ブラウザで確認して行きます。

コメント3の横の削除ボタンをクリックしてみます。

うまく、削除出来ました。

データベースからデータを抽出したり、削除する方法は紹介しましたが、データを編集したり特定の順番でデータを抽出したいというときもあるでしょう。

そのときに使える呪文を紹介しておきます。

//データの抽出
select カラム名 from テーブル名
//データの削除
delete from テーブル名 where 条件
//データの編集
update テーブル名 set カラム名 = 入力値, カラム名 = 入力値 where 条件

//曖昧なデータの検索方法
like 'm%' //mで始まる文字列を検索
//抽出データを制限する方法
limit 件数 
//昇順、または降順
order by カラム名 ascまたはdesc

これぐらいを覚えておけばとりあえずは問題ないと思います。

まとめ

今回はデータベースからのデータの削除方法について紹介しました。

保存方法や削除方法からどんな感じで書いていけば良いのかわかったと思います。あとはMySQLのコマンドを勉強していけば応用が利くようになると思います。

関連記事