あーる学習帳

自分が勉強したことや気になることなど、99%自分用です。コードを書いてるのでPCから閲覧を推奨。

PHPまとめ⑤:会員専用ページを作る、会員登録システムの完成

これで最後なので!!勢いよく!!やります!!

 

今回は以下のファイルを作成・編集する。

f:id:R_de_aru:20180709204633p:plain

member.php

  • ログイン済みか確認し、会員データを取得する 

logout.php

  • ログアウト後はログイン画面にリダイレクトさせる 

db_helper.php

  • 登録されている全会員データを取得する関数を作る 

member_view.php

  • 自身のデータと会員一覧を表示する 

まずはコントローラであるmember.phpを作成する。会員登録済みの会員名も表示させる。ひとまず、ログインしているかどうかを確認する機能を作成する。

<?php
 require_once('config.php');
 require_once('./helper/db_helper.php');
 require_once('./helper/extra\helper.php');

 session_start();

 //ログイン中かどうか確認
 if(empty($_SESSION['member'])){
  header('Location:'.SITE_URL.'/login.php');
  exit();
 }

 //クライアントの会員データを取得
 $member=$_SESSION['member'];
 $dbh=get_db_connect();
 $members=array();
 //全会員データを取得する

 include_once('./views/member_view.php');

ログイン状態の確認はempty()で行い、ログイン中ならばクライアントの配列データを$memberに取得する。

全会員データの取得は関数で行う。以下のコードをdb_helper.phpに追加。

function select_members($dbh){
 $sql="select name from members";
 $stmt=$dbh->prepare($sql);
 $stmt->execute();
 while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
  $data[]=$row;//二次元配列として格納
 }

全会員データを取得するSQLを作成し、複数の会員データは二次元配列として取得できるようにしておく。これをコントローラに加える。

//全会員データを取得する
$members=select_members($dbh); 

 全会員データを関数を使って$membersに入れておく。

会員専用ページのビューファイルとなるmember_view.phpを作成する。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>会員専用ページ</title>
 </head>
 <body>
  <p>
   こんにちは、<?php echo html_escape($member['name']); ?>さん。
   Email:<?php echo html_escape($member['email']); ?>
   <a href="logout.php">ログアウト</a>
  </p>
  <h1>会員専用ページ</h1>
  <hr width="300px" align="left">
  <p style="font-size:small">こちらはログイン後の画面です</p>
  <h2>会員一覧</h2>
  <ul>
  <?php foreach($members as $member): ?>
   <li><?php echo stml_escape($member['name']); ?></li>
  <?php endforeach; ?>
 </body>
</html> 

 クライアント個人のデータと会員一覧が表示されるページになった。

ログアウトの仕組みを作成し、ログアウト後はlogin.phpにリダイレクトする。

<?php
 require_once('config.php');
 session_start();

 $session_name=session_name();
 $_SESSION=array();
 if(isset($_COKKIE[$session_name])===true){
  setcookie($session_name,'',time()-3600);
 }
 session_destroy();
 header('Location:'.SITE_URL.'login.php');

これでこの章で扱うすべてのファイルが完成。あとは実際にテストを行い、動作の確認を行う。

 

案の定ものすごい数のエラーが…。

うまくMySQLにログインできていないだとか、シンタックスエラーだとか、シンタックスエラーだとか、returnを忘れているとか、コロンとセミコロンを間違えてるとか…。

そんなとき、以下のサイトでよさそうなコードを発見。ファイルの先頭に以下のコードを加えておくとすべてのエラーが見つけられるとのこと。

teratail.com

error_reporting(E_ALL);

ini_set('dusplay_errors'.'1'); 

 

デバッグを重ね、なんとか形になりました。

f:id:R_de_aru:20180709222308p:plain

f:id:R_de_aru:20180709222319p:plain

f:id:R_de_aru:20180709222331p:plain

長かった…!!この本で作るPHPの作品はこれですべてになります。

お疲れ様でした!!