logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

PHP レッスン — レッスン 3.4 — MySQL DB の操作。DELETE 削除クエリ。

08/12/2019, by Ivan

前のレッスンでは、管理クラス simpleCMS に新しいメソッドを追加する方法を学びました。では、レコードを削除するもう 1 つのメソッド delete() を追加しましょう。

メソッドはいつものように追加します:

public function delete($mid){

}  

 ご覧のとおり、パラメーター $mid、つまり私たちのレコードの id を渡します。前のレッスンを思い出すと、私たちはパラメーターを get リクエストから直接渡す別の方法を使うことにしました。今回は、別の方法でパラメーターを渡してみます。

さて、メソッドを定義したので、index.php ファイルにパスの処理を書きましょう:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // 変数が 1 なら、追加フォームを表示する
		break;
		case 'update':
		  print $obj->display_update();  // 変数が update なら、変更フォームを表示する
		break;
		case 'delete':
		  if($_GET['mid']){ // 変数が delete なら、mid の有無を確認する
		    $obj->delete($_GET['mid']); // メッセージ削除のメソッドを呼び出す
			print $obj->display_public(); // 変数がなければ、メッセージを表示する
		  }else{
		    print '<p>mid が選ばれていません!</p>';
		    print $obj->display_public(); // メッセージのリストを表示する
		  }
		break;
		default:
		  print $obj->display_public(); // 変数がなければ、メッセージを表示する
	  }

すべてが正しく動作し、メッセージが削除されるよう、URL は次の形である必要があります:

http://test/index.php?admin=delete&mid=7

この場合、mid=7 のメッセージが削除されます。そのために、delete() メソッドの実装を書きましょう:

  public function delete($mid){
    mysql_query('DELETE FROM Messages WHERE mid='.$mid) or die(mysql_error());
  }  

レコードを削除する mysql delete クエリが何で構成されているか見てみましょう。まず DELETE という語が来て、その後に 2 つ目の演算子 FROM を書きます。FROM 演算子の後に、レコードを削除したいテーブルを指定します(注意! 削除条件を指定しないと、テーブルのすべてのレコードが削除されます!)。その後、レコード削除の条件を指定します。私たちが関心を持つのは mid のレコードで、その値をメソッドのパラメーターを通じて渡します。最後に、クエリが実行されたかどうかのチェックを書きます。

先に述べたように、私たちのメソッドは URL に 2 つのパラメーター admin=delete&mid=7 があるときに呼び出されます。そのために、display_public() メソッドを少し編集して、各メッセージの下にリンクを追加します:

  public function display_public() { // メッセージ出力のメソッド
    $content = '';
	$sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // 抽出クエリ
	$result = mysql_query($sql) or die(mysql_error());  // 抽出クエリの実行結果を変数に保存する
	while($row = mysql_fetch_array($result)){ // 抽出クエリの変数は、特別な関数 mysql_fetch_array() で処理する必要がある
	  $content .= '<div class="post" id="mid-' . $row['mid'] . '">'; // レコードを包む div
	  $content .= '<span class="time">#' . $row['mid'] . ' ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; 	// 時刻とタイトルを出力する
	  $content .= '<p>' . $row['bodytext'] . '</p>'; // メッセージのテキストを出力する
	  $content .= '<p>';
	  $content .= '<a href="/index.php?admin=update&mid=' . $row['mid'] . '">メッセージを編集</a>'; // メッセージ編集へのリンクを追加する
	  $content .= '<a href="/index.php?admin=delete&mid=' . $row['mid'] . '">メッセージを削除</a>'; // メッセージ削除へのリンクを追加する
	  $content .= '</p>';
	  $content .= '</div>'; // 包む div の終わり
	}
	$content .= '<p><a href="/index.php?admin=add">メッセージを追加</a></p>';
    return $content;
  }

これで、メッセージ削除のリンクをクリックすると、計画どおりにメッセージが削除されます。これで、不要なメッセージを PhpMyAdmin を通じてではなく、サイトから直接、素早くページから削除できます。

あとは、メッセージの編集リンクと削除リンクの間に少し余白を付けるだけです:

.post a{
  padding-right: 5px;
}

 

 これでレッスンは終わりだと思います。次のレッスンでは、複数のテーブルから抽出するためのもう 1 つの重要な演算子 JOIN を取り上げます。