PHP レッスン — レッスン 3.4 — MySQL DB の操作。DELETE 削除クエリ。
前のレッスンでは、管理クラス 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 を取り上げます。