ログイン名とパスワードを使ったログイン処理を作ってみましょう。
ログイン画面を作成します。
login-input.php
<?php require ‘header.php’; ?> <form action=”login-output.php”method=”post”> ログイン名<input type=”text” name=”login”><br> パスワード<input type=”password” name=”password”><br> <input type=”submit” value=”ログイン”> </form> <?php require ‘footer.php’; ?> | パスワードはtype属性をpasswordにします。パスワードは画面に表示されません。 |
login-output.php
<?php session_start(); ?> <?php require ‘header.php’; ?> | PHPで*セッションを使用する場合はsession_start関数を呼び出します。この関数はHTMLなどを出力する前に実行する必要があり、スクリプトの先頭で呼び出してます。 |
<?php unset($_SESSION[‘customer’]); | セッションデータは配列を使って操作します。今回は顧客情報をcustomerに格納してます。 今回はログインにあたって、同名のユーザーが既にログインしていたらログアウト状態にするため、セッションデータから既に存在する顧客情報を削除します。指定した変数を削除するunset関数を使います。 |
$pdo = new PDO(‘mysql:host=localhost;dbname=shop; charset=utf8′,’staff’,’password’); | PDOを使ってshopデータベースに接続します。PDOはPHPとデータベースの接続機能を与えます。 |
$sql = $pdo->prepare(‘select * from customer where login=? and password=?’); | prepareメソッドを使って、SQL文を準備します。ログイン名とパスワード部分は?にしておきます。 |
$sql->execute([$_REQUEST[‘login’],$_REQUEST[‘password’]]); | executeメソッドを使ってSQL文を実行します。executeメソッドの引数は、SQL文の?の部分に設定する値の配列です。ここではリクエストパラメータから取得したものが該当します。 |
foreach ($sql as $row){ $_SESSION[‘customer’]=[ ‘id’=>$row[‘id’], ‘name’=>$row[‘name’], ‘address’=>$row[‘address’], ‘login’=>$row[‘login’], ‘password’=>$row[‘password’] ]; } | 前項で実行した結果を、foreachループを使って処理します。 変数$rowには、データベースから取得した顧客テーブルの行が格納されます。各々の列名をキーにして配列にします。 この配列を$_SESSION[‘customer’]に代入します。 |
if(isset($_SESSION[‘customer’])){ echo ‘ようこそ、’, $_SESSION[‘customer’][‘name’], ‘様’; }else { echo ‘ログイン名またはパスワードが違います’; } ?> <?php require ‘footer.php’; ?> | ログインが成功した場合と失敗した場合のメッセージをif文を使い表示します。 |
ログインに成功し、その証拠に表示がされました。
ログアウト機能
ログアウト画面を作りましょう
logout-input.php
<?php require ‘header.php’; ?> <p>ログアウトしますか?</p> <a href=”logput-output.php”>ログアウトはこちら</a> <?php require ‘footer.php’; ?> |
まだログインしてない場合や、すでにログアウトしている場合は「すでにログアウトされています。」が表示されます。
logout-output.php
<?php session_start(); ?> <?php require ‘header.php’; ?> <?php if (isset($_SESSION[‘customer’])){ unset($_SESSION[‘customer’]); echo ‘ログアウトしました’; } else { echo ‘すでにログアウトされています。’; } ?> <?php require ‘footer.php’; ?> | ログアウトのスクリプトでもセッションをりようするので、最初にsession_start関数を呼び出します。 現在ログインしているかどうかをisset関数で調べます。 そしてログインしている場合には、unset関数を使って、顧客情報が格納された内容を削除します。 |