PHPとMySQLを使って掲示板サイトを作ってみる講座、4回目です。
今回は、MySQLへの登録機能付きの確認画面の作り方を解説します。
実際のサイトは、下記にあります。
前回までの記事は、下記の目次からご覧ください。
会員登録フォーム投稿後の確認画面を作成する
ではMySQLへの登録機能付きの確認画面を作っていきましょう。
前回までと同様、CSSと画像登録部分は省き、簡易版を作っていきます。
作成するサイトの外見は次のようになります。
コードはこちらです。
【test3.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 |
<?php session_start(); require('dbconnect.php'); // ★ポイント1★ if (!isset($_SESSION['join'])) { header ('Location: test2.php'); exit(); } // ★ポイント2★ $hash = password_hash($_SESSION['join']['password'], PASSWORD_BCRYPT); // ★ポイント3★ if(!empty($_POST)){ $statement = $db->prepare('INSERT INTO members SET name=?, email=?, password=?, created=NOW()'); $statement->execute(array( $_SESSION['join']['name'], $_SESSION['join']['email'], $hash)); unset($_SESSION['join']); header('Location: test4.php'); exit(); } ?> <!DOCTYPE html> <html lang="ja"> <head> </head> <body> <form action="" method="post"> <input type="hidden" name="action" value="submit"> <div class="label"> // ★ポイント4★ <p>ニックネーム <span class="check"><?php echo (htmlspecialchars($_SESSION['join']['name'], ENT_QUOTES)); ?></span> </p><br /> <p>email <span class="check"><?php echo (htmlspecialchars($_SESSION['join']['email'], ENT_QUOTES)); ?></span> </p><br /> <p>パスワード <span class="check">[セキュリティのため非表示] </span> </p><br /> // ★ポイント5★ <input type="button" onclick="location.href='test2.php?action=rewrite'" value="修正する" name="rewrite" class="button02"> <input type="submit" onclick="location.href='test4php'" value="登録する" name="registration" class="button"> </form> </body> </html> |
★ポイント★ごとにコードの組み方を解説していきます。
ポイント① セッション情報を設定する
ポイント①の部分は、前回からのセッション情報があるかどうかをチェックしています。
1 2 3 4 |
if (!isset($_SESSION['join'])) { header ('Location: test2.php'); exit(); } |
「もし【$_SESSION[‘join’]】がなければ、test.phpに戻ってね。このページは終わりにしてね。」という命令文になります。
【Location】の後は、前のページのURLなどを設定しておきましょう。
【isset()】は、カッコ内の値があるかどうかを確認する関数。
最初にエクスクラメーションマーク【!】をつけると、「~がなければ」という意味になります。

ビックリマーク!は否定の意味。
「ありえな~い!」と覚えておくと便利ですよ。
ポイント② パスワードをセキュアにする
まずは入力したパスワードをpassword_hashで変換し、【$hash】変数に格納しておきます。
1 |
$hash = password_hash($_SESSION['join']['password'], PASSWORD_BCRYPT); |
この【$hash】をMySQLに登録します。これは、ポイント③で解説します。
なおパスワードは以前は【sha1】で暗号化していました。
ですがsha1は同じパスワードを打てば毎回同じ値に変換されてしまい、脆弱性が指摘されてきました。
そのため最近では、あまり使われなくなっています。
今回は、現在よく使用されているpassword_hash という関数を使ってハッシュ化しました。
password_hashを使うと、同じパスワードを入力しても、違う値に変換されます。
ポイント③ MySQLに入力されたデータを登録する
それでは入力されたデータを、MySQLに登録するには、次のように記述します。
1 2 3 4 5 6 7 8 9 10 |
if(!empty($_POST)){ $statement = $db->prepare('INSERT INTO members SET name=?, email=?, password=?, image=?, created=NOW()'); $statement->execute(array( $_SESSION['join']['name'], $_SESSION['join']['email'], $hash)); unset($_SESSION['join']); header('Location: test4.php'); exit(); } |
「【$_POST】の値がカラでなければ、MySQLの【members】というデータベースに、【name】【email】【password】の値を挿入する準備をしてね。時間は今現在のものを挿入してね。」
という意味になります。
その後、array関数を使いつつ、挿入する値をひとつずつ指定しています。
ポイント②で解説した変数【$hash】は、そのままの形でいれていきます。
$変数名->prepare(‘INSERT INTO データベース名 SET 項目名1=?, 項目名2=?’)
ポイント③ 入力された値を表示させる
ポイント③からは、bodyタグ以降の部分です。
1 2 3 |
<p>ニックネーム <span class="check"><?php echo (htmlspecialchars($_SESSION['join']['name'], ENT_QUOTES)); ?></span> </p><br /> |
「【$_SESSION[‘join’][‘name’]】の値を表示してね」という意味になります。
こんなふうに書いておくと、登録フォームに入力した値を確認画面に表示させることができます。
name以外の部分でも、同じように記述しておきましょう。
ただしパスワードについては、セキュリティ上の理由から、あえて表示させないほうが一般的。
今回は、次のようにしておきました。
1 2 3 |
<p>パスワード <span class="check">[セキュリティのため非表示] </span> </p><br /> |

Webアプリは攻撃されやすいだけに、セキュリティが非常に大事。
初心者でも知っておくべき3つの攻撃と対策は、こちらをチェック。
ポイント④ 前のページに戻れる設定をする
最後のポイントは、登録フォームに戻るための設定です。
まずは、前回・前々回に作った会員登録ページのPHPコードを書く部分に、次の命令文を追加しておきましょう。
1 2 3 |
if(isset($_SESSION['join']) && isset($_REQUEST['action']) && ($_REQUEST['action'] == 'rewrite') ){ $_POST =$_SESSION['join']; } |
「もし【$_SESSION[‘join’]】があって、さらに【REQUEST[‘action’]】が送られてきて、そしてこの値がrewrite だったら、【$_SESSION[‘join’]】の内容をフォームに登録してね」という意味になります。
次に、今回作成している確認ページに入れるために、次のように記述してボタンを設置します。
1 |
<input type="button" onclick="location.href='test.php?action=rewrite'" value="修正する" name="rewrite" class="button02"> |
こんな見栄えのボタンができます。
ボタンをクリックすると登録フォームに戻ります。
URLは「test.php?action=rewrite」となっています。入力した内容がちゃんと入っています。
このような設定をしておかないと、ユーザーが「修正する」ボタンをおして戻った場合、いちからフォームに情報を入力せねばなりません。
面倒なですよね。
上記のように設定しておけば、ユーザーが戻ったときに、入力した値がきちんと保存されています。
さいごに
無事登録ができると、MySQLに情報が入っているはずです。
登録後、データベースをチェックしてみてくださいね。
今回までで、会員登録画面の作成は終わりになります。
次回は、登録した情報を使ったログイン画面を作っていきます。
★2021年12月1日編集:
下記コードにimageが入っていたのを削除しました。
1 |
$statement = $db->prepare('INSERT INTO members SET name=?, email=?, password=?, created=NOW()'); |
コメント