nameテーブルのレコードのデータを削除する機能を作成します。
nameテーブルについてはこちらのページをご参照下さい。
動作
まずdelete1.phpでnameテーブル一覧を表示させます。
削除したい名前の横にある「削除する」ボタンをクリックすると、削除画面(delete2.php)へ遷移し、レコードの削除が完了します。
スポンサーリンク
手順
データベース接続の部分は別ファイルにしておきます。
db_sample01.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php function db_connect(){ //データベース接続 $server = "◯◯◯"; $userName = "◯◯◯"; $password = "◯◯◯"; $dbName = "sample01"; $mysqli = new mysqli($server, $userName, $password,$dbName); if ($mysqli->connect_error){ echo $mysqli->connect_error; exit(); }else{ $mysqli->set_charset("utf-8"); } return $mysqli; } ?> |
5〜7行目
環境に合わせて適当な値を入力して下さい。
delete1.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
<?php header("Content-type: text/html; charset=utf-8"); require_once("db_sample01.php"); $mysqli = db_connect(); $sql = "SELECT * FROM name"; $result = $mysqli -> query($sql); //クエリー失敗 if(!$result) { echo $mysqli->error; exit(); } //連想配列で取得 while($row = $result->fetch_array(MYSQLI_ASSOC)){ $rows[] = $row; } //結果セットを解放 $result->free(); // データベース切断 $mysqli->close(); ?> <!DOCTYPE html> <html> <head> <title>name一覧</title> </head> <body> <h1>name一覧</h1> <table border='1'> <tr><td>id</td><td>name</td><td>名前を変更する</td><td>名前を削除する</td></tr> <?php foreach($rows as $row){ ?> <tr> <td><?=$row['id']?></td> <td><?=htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8')?></td> <td> <form action="update2.php" method="post"> <input type="submit" value="変更する"> <input type="hidden" name="id" value="<?=$row['id']?>"> </form> </td> <td> <form action="delete2.php" method="post"> <input type="submit" value="削除する"> <input type="hidden" name="id" value="<?=$row['id']?>"> </form> </td> </tr> <?php } ?> </table> </body> </html> |
56〜59行目
削除ボタンを追加してあります。
delete2.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<?php header("Content-type: text/html; charset=utf-8"); require_once("db_sample01.php"); $mysqli = db_connect(); if(empty($_POST)) { echo "<a href='delete1.php'>delete1.php</a>←こちらのページからどうぞ"; exit(); }else{ if (!isset($_POST['id']) || !is_numeric($_POST['id']) ){ echo "IDエラー"; exit(); }else{ //プリペアドステートメント $stmt = $mysqli->prepare("DELETE FROM name WHERE id=?"); if($stmt){ //プレースホルダへ実際の値を設定する $stmt->bind_param('i', $id); $id = $_POST['id']; $stmt->execute(); //変更された行の数が1かどうか if($stmt->affected_rows == 1){ echo "削除いたしました。"; }else{ echo "削除失敗です"; } //ステートメント切断 $stmt->close(); }else{ echo $mysqli->errno . $mysqli->error; } } } // データベース切断 $mysqli->close(); ?> |
17〜22行目
前ページから受け取ったidでレコードを指定し、削除クエリを作成しています。
今回は削除ボタンを押すといきなりレコードが削除される仕様になっていますが、本来ならば削除することに関して注意を促す確認画面を間に挟むなどの処理を行います。
27行目
affected_rowsは、INSERTやUPDATEクエリにより変更された行の数を返します。
参照ページ
http://php.net/manual/ja/mysqli.affected-rows.php