【PHP】初心者でもわかる!ログイン、会員登録機能の作り方

2020.04.21 /

PHPのコーディング

こんにちは、PHP大好きKくんです。こちらはPHPプログラミングに関するシリーズ記事です。

さて、これからECサイトや会員様向けのサイトを作ろうと思ったけど、ログイン機能や会員登録機能を実装するところでいきなり足止めをくらっていませんか?

ここでは、PHPとMySQL(データベース)を使ったログイン機能、会員登録機能の作り方を初心者でもわかりやすくお伝えします。

ECサイトなどを作る際の、まず始めの一歩。しっかり把握して、PHPプログラマーの道を目指しましょう。

会員情報用のデータベースとテーブルの作成

テーブル作成に必要な情報の洗い出し

まずはじめに必要になるのはデータベース(テーブル)を作成するための情報です。

今回作成するページは、会員登録とログインページです。

この2つの機能を実装するために、テーブルに必要な情報はなんでしょう。楽天などのECサイトで会員登録したときのことを思い出してみてください。どういった情報を入力しましたか?

その入力した情報を保持するためにテーブルを作成し、各要素分の箱を作る必要があります。

今回作る会員情報テーブルは簡易的に名前、住所、電話番号、会員ID、パスワードを保持する物とします。

ECサイト用データベースの作成

それでは今回作るECサイト用のデータベースから作成していきます。

PHPをご自身のパソコンで使うためにApacheやMySQLをインストールしたい方は下記をご覧ください。

まず、MySQLに接続しましょう。

mysql -u ユーザー名 -p

すると、MySQLからパスワードの入力を求められます。

Enter password:パスワードを入力

パスワードがあっていれば、MySQLがコマンドを受け付けられる状態であることを示す、mysql>が表示されます。

mysql>

より詳しいコマンドによるMySQLの操作方法は下記リンクを参考にしてください。

次にECサイト用のデータベースを作成します。名前はECにします。

create database EC;

これでECサイト用データベースである、ECができました。

会員情報テーブルの作成

それでは次に会員情報テーブルの作成をします。

テーブル名はUSER、必要な項目は会員ID、パスワード、名前、住所、電話番号です。テーブルの作成には、Create tableコマンドを使用し、下記のように入力します。

create table user(id varchar(30),password varchar(30),name varchar(30),address varchar(50),tel int);

これでUSERテーブルが作成できました。

ログインフォーム作成

プログラムコードの確認

次はデータベースから離れて、HTMLの記述を見ていきましょう。

ログインページでログイン情報(ユーザーID、パスワード)を入力するフォームは下記のように入力します。

※CSSでのデザインは行なっておりません。

<form action="confirm.php" method="post">
<p>会員IDを入力:<input type="text" name="user" required></p>
<p>パスワードを入力:<input type="password" name="password" required></p>
<p><input type="submit" value="ログイン"></p>
</form>

これでログイン情報を入力するためのフォームは整いました。

実際にどのような仕組みになっているか解説していきます。

formタグを使用して情報を送信する

ログイン情報を入力するためのボックスは、formタグを使って実装しています。このformタグを使うことにより、入力された情報を指定したページに送信することができます。

formタグ内のactionに情報を送るページを指定します。またmethodで情報の送り方(POST送信かGET送信)を指定できます。

nameでそれぞれのinputに名前をつけることにより、情報を受け取るページで、送られた情報をその名前で取得できます。

会員登録フォーム作成

プログラムコードの確認

次は会員登録フォームを作成していきます。

会員登録に必要な情報は、会員ID、パスワード、名前、住所、電話番号ですね。

それでは、まず先ほど作ったログインフォームの下に下記HTMLを記述します。

<form action="index.php" method="post">
<h2>新規会員登録</h2>
<p>会員ID:<input type="text" name="user"></p>
<p>パスワード:<input type="password" name="password"></p>
<p>名前:<input type="text" name="name"></p>
<p>住所:<input type="text" name="address"></p>
<p>電話番号:<input type="tel" name="tel"></p>
</from>

ここでの会員登録フォームが何をしてるのかはもうわかりますよね。

入力されたそれぞれの情報を、index.php(現在ページ)にPOSTで送信しています。

次にPHPプログラムの記述です。

プログラムの概要としては、POSTで送信された会員情報を会員情報テーブルに入れます。会員情報テーブルに入れることにより、会員登録完了とします。

プログラムは下記のように記述します。

<?php
if(isset($_POST['user'])) {
$dsn='mysql:dbname=EC;charset=utf8';
$user='ユーザー名';
$password='パスワード';
$dbh = new PDO($dsn,$user,$password);
$stmt = $dbh->prepare("INSERT INTO USER VALUES(:user,:password,:name,:address,:tel)");
$stmt->bindParam(':user', $_POST['user']);
$stmt->bindParam(':password', $_POST['password']);
$stmt->bindParam(':name', $_POST['name']);
$stmt->bindParam(':address', $_POST['address']);
$stmt->bindParam(':tel', $_POST['tel']);
$stmt->execute();
}
?>

どのような流れでプログラムが動いているのか、それぞれ詳しくみていきましょう。

データベースに接続する(PDO接続)

まず会員登録ボタンが押下された場合のみにデータベース操作を行うように、issetを使用し、スーパーグローバル関数である($_POST['user']があるか確認しています。

if(isset($_POST['user']))

POSTが送信されていた場合のみ、MySQLデータベースに接続します。今回はPDO接続を行っております。

$dsn='mysql:dbname=EC;charset=utf8';
$user='ユーザー名';
$password='パスワード';
$dbh = new PDO($dsn,$user,$password);

上記により、MySQLデータベースに接続でき、データベースの操作(選択、挿入、削除など)ができるようになります。

データベースに挿入する

次にPOSTで送られた会員情報をデータベースに登録します。

POSTで送られた情報はスーパーグローバル関数$_POSTで取得することができます。

スーパーグローバル関数のPOSTに入っている会員情報を、SQL文のinsertを使用して、データベースUSERに挿入していきます。

$stmt = $dbh->prepare("INSERT INTO USER VALUES(:user,:password,:name,:address,:tel)");
$stmt->bindParam(':user', $_POST['user']);
$stmt->bindParam(':password', $_POST['password']);
$stmt->bindParam(':name', $_POST['name']);
$stmt->bindParam(':address', $_POST['address']);
$stmt->bindParam(':tel', $_POST['tel']);
$stmt->execute();

ここではBindParamを使って、SQL分の各パラメーターに変数を入れる措置を行なっています。

ログインの可否

プログラムコードの確認

最後にログインフォームにユーザーID、パスワードを入力してログインした時に、会員登録されていれば「ログイン成功」、会員登録されていなければ「ログイン失敗」と表示されるPHPプログラムを作成します。

新たにconfirm.phpというページを作り、その中に以下のコードを記述します。

<?php
if(isset($_POST['user'])) {
$dsn='mysql:dbname=EC;charset=utf8';
$user='ユーザー名';
$password='パスワード';
$dbh = new PDO($dsn,$user,$password);

$stmt = $dbh->prepare("SELECT * FROM user WHERE id=:user");
$stmt->bindParam(':user', $_POST['user']);
$stmt->execute();
if($rows = $stmt->fetch()) {
if($rows["password"] ==  $_POST['password']) {
print "<p>ログイン成功</p>";
}else {
print "<p>ログイン失敗</p>";
}
}else {
print "<p>ログイン失敗</p>";
}
}
?>

これにより、会員情報テーブルに問い合わせを行い、ログインの可否ができるようになりました。

それではPHPプログラムの動きを見ていきましょう。

POSTデータを受け取る

スーパーグローバル変数のPOSTを使い、index.phpからPOST送信された情報を受け取ります。

データベースに接続する前にissetを使って、中身があるかないかの判別を行なっています。

if(isset($_POST['user']))>

もし中身がなければ、ログイン失敗と表示されます。

データベースへ問い合わせ

PDO接続でデータベースに接続します。

次にSQL文のselectを使用して、USERテーブル内に入力されたユーザーIDがあるか確認し、あればパスワードが合っているかを確認しています。

$stmt = $dbh->prepare("SELECT * FROM user WHERE id=:user");
$stmt->bindParam(':user', $_POST['user']);
$stmt->execute();
if($rows = $stmt->fetch()) {
if($rows["password"] ==  $_POST['password']) {
print "<p>ログイン成功</p>";
}else {
print "<p>ログイン失敗</p>";
}
}else {
print "<p>ログイン失敗</p>";
}
}
?>

ユーザーID、パスワード共に合っていれば、「ログイン成功」を表示します。間違っていれば、「ログイン失敗」を表示します。

まとめ

いかかでしたでしょうか。ここで紹介しているPHPプログラムを使って簡易的なログインの可否が行えるようになりましたか。

ログイン後にページ遷移した際、ログインしているかどうかはセッション機能を使う必要があります。それに関しては別記事で紹介していきます。

ECサイトを作るための最初の一歩ですが、まずはデータベース操作、PHPの書き方をマスターして、あなたが望むECサイトを作れるようになりましょう。