nameテーブルの名前を変更するシステムを作成します。
nameテーブルについてはこちらのページをご参照下さい。
動作
まずupdate1.phpでnameテーブル一覧を表示させます。
変更したい名前の横にある「変更する」ボタンをクリックすると、変更画面(update2.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行目
環境に合わせて適当な値を入力して下さい。
updata1.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 |
<?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></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> </tr> <?php } ?> </table> </body> </html> |
nameテーブルを表示させるだけなので、基本的な説明は以下のページをご参照して下さい。
50〜53行目
nameテーブルのidで行を特定し、update2.php画面へと遷移させます。
update2.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 |
<?php header("Content-type: text/html; charset=utf-8"); require_once("db_sample01.php"); $mysqli = db_connect(); if(empty($_POST)) { echo "<a href='update1.php'>update1.php</a>←こちらのページからどうぞ"; exit(); }else{ if (!isset($_POST['id']) || !is_numeric($_POST['id']) ){ echo "IDエラー"; exit(); }else{ //プリペアドステートメント $stmt = $mysqli->prepare("SELECT * FROM name WHERE id=?"); if ($stmt) { //プレースホルダへ実際の値を設定する $stmt->bind_param('i', $id); $id = $_POST['id']; //クエリ実行 $stmt->execute(); //結果変数のバインド $stmt->bind_result($id,$name); // 値の取得 $stmt->fetch(); //ステートメント切断 $stmt->close(); }else{ echo $mysqli->errno . $mysqli->error; } } } // データベース切断 $mysqli->close(); ?> <!DOCTYPE html> <html> <head> <title>変更画面</title> </head> <body> <h1>変更画面</h1> <p>名前を変更して下さい。</p> <form action="update3.php" method="post"> <input type="text" name="name" value="<?=htmlspecialchars($name, ENT_QUOTES, 'UTF-8')?>"> <input type="hidden" name="id" value="<?=$id?>"> <input type="submit" value="変更する"> </form> </body> </html> |
POSTを受け取る基本的な動作は以下のページもご参照下さい。
8行目
このページに直接アクセスされた場合の判定をしています。
17〜29行目
受け取ったidでnameテーブルを検索し、データを取得します。
update3.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 |
<?php header("Content-type: text/html; charset=utf-8"); require_once("db_sample01.php"); $mysqli = db_connect(); if(empty($_POST)) { echo "<a href='update1.php'>update1.php</a>←こちらのページからどうぞ"; exit(); }else{ //名前入力チェック if (!isset($_POST['name']) || $_POST['name'] === "" ){ $errors['name'] = "名前が入力されていません。"; } if(count($errors) === 0){ //プリペアドステートメント $stmt = $mysqli->prepare("UPDATE name SET name=? WHERE id=?"); if ($stmt) { //プレースホルダへ実際の値を設定する $stmt->bind_param('si', $name, $id); $name = $_POST['name']; $id = $_POST['id']; //クエリ実行 $stmt->execute(); //ステートメント切断 $stmt->close(); }else{ echo $mysqli->errno . $mysqli->error; } } } // データベース切断 $mysqli->close(); ?> <!DOCTYPE html> <html> <head> <title>変更画面</title> </head> <body> <h1>変更画面</h1> <?php if (count($errors) === 0): ?> <p>変更完了しました。</p> <?php elseif(count($errors) > 0): ?> <?php foreach($errors as $value){ echo "<p>".$value."</p>"; } ?> <?php endif; ?> </body> </html> |
13〜15行目
名前の入力チェックを行なっています。今回は$errors[]は配列にする必要はありませんが、もし名前以外の項目がある場合は、このようにしておくと良いです。
49〜57行目
名前の入力項目のチェックで分岐させている。
次はこちらのページへ