こいちゃんの趣味全開!!

クリエイターズネットワーク参加サイトのひとつ。趣味を書き綴ります。そこのあなた、お願い、ひかないでーっ。

/include/login.php

2012.11/2 by こいちゃん

掲示板プログラム、最初はユーザー認証のページ。

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

function loginFormHtml($username = NULL, $status = NULL) {
	if($status == 'AUTH_WRONG_LOGIN') {
		echo('認証エラー ログインしてください。');
	}
	echo <<<LOGINFORM
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ログインページ</title>
<style type="text/css"><!--
	body {
		margin-top:  20px;
		margin-left: 40px;
	}
	p.cookie {
		color: red;
	}
	h2 {
		margin-bottom: 15px;
	}
--></style>
</head><body>
<h2>ログインページ</h2>
<table class="Auth-form"><form method="POST" action="">
	<tr><th>ユーザー名:</th><td><input type="text" name="username" size="40" class="auth_user" /></td></tr>
	<tr><th>パスワード:</th><td><input type="password" name="password" size="40" class="auth_user" /></td></tr>
	<tr><th /><td><input type="submit" value="ログイン" /><input type="reset" value="リセット" /></td></tr>
</form></table>
<p class="notice">
	ログインを維持するためにはブラウザのクッキーが有効になっている必要があります。<br />
	どうしてもログインできない場合、データベース接続設定が間違っている可能性があります。管理者へ連絡してください。
</p>
</body></html>
LOGINFORM;
}

$auth = new Auth("DB", $auth_connect_pearDB, "loginFormHtml");
$auth->start();
#ログアウト処理
if(isset($_GET['logout']) && $_GET['logout'] == 1 ) {
	$auth->logout();
	echo <<<END
<html><head><title>ログアウト完了</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="refresh" content="5; url=./index.php" />
</head><body>
<p class="logout">
	ログアウトしました。<br />
	<a href="./index.php">もう一度ログインする</a><br />
	5秒後にログインページに転送します。
</p>
</body></html>
END;
}

#ログインしていたら
if($auth->getAuth()) {
	$Auth_data['username'] = $auth->getUsername();
	$temp1 = <<<END
<p class="byAuth">
あなたは {$Auth_data['username']} としてログインしています。

END;
	if($Auth_data['username'] == 'admin') {
		$temp1 .= "<a href=\"/admin-menu.php\">管理者メニュー一覧へ</a>\n";
		$temp1 .= "<a href=\"./admin.php\">設定</a>\n";
	}

	$temp2 = <<<END
<a href="{$_SERVER['PHP_SELF']}?logout=1">ログアウト...</a>
<a href="./index.php">トップへ戻る</a>
</p>

END;
	$Auth_data['script'] = $temp1.$temp2;
} else {
#	echo('認証エラー ログインしてください。');
	exit;
}
?>

 

では、解説をしていきます。

2~3行目
必要なライブラリの取り込みをしています。
Auth.phpはPear::Authの事、config.phpはデータベースなどの情報が記録されています。

5行目
loginFormHtmlはPear::Authを使うための専用関数です。

9~37行目
ヒアドキュメントでHTMLを出力しています。
HTMLの内容はログインフォーム。ユーザー名とパスワードを入力させるだけの簡単なHTMLで、ここでしか使わないスタイルシートはhead内でまとめて出力しています。
認証情報は平文のまま送信されるため、Javascriptを追加するなどの改造をしたほうがいいと思います。ちなみに作者はHTTPSを使っています。

40~41行目
Pear::Authを開始します。
データベースに認証情報を記録しているので、Pear::Authが使うPear::DB形式で書いた接続情報を格納した変数($auth_connect_pearDB :  /include/config.phpで宣言済み)を引数として読み込ませます。

43~57行目
GETで取り込んだ変数をチェックしてログアウトが命ぜられているか確認し、ログアウトフラグが立っていればログアウト処理を行います。
ログアウト処理自体は44行目だけで、45行目以降はログアウトが完了したことをユーザーに通知するためのHTMLをヒアドキュメントで出力しています。

59~78行目
既にログインしている場合の処理です。
各ページのヘッダーとして1行のバーを出力します。ただ、この処理をしている時点でHTMLを出力してしまうとほかのスクリプトを書く際に不便なので、変数$Auth_data[‘script’]に一時的に格納します。

67~70行目
管理者アカウントadminでログインしている場合のみ管理用のリンクを追加します。

79~82行目
ログインできなかった場合の処理です。
この後に処理を続行してしまうと認証に成功した人だけが閲覧してもいいページが表示されてしまうためスクリプトを強制終了します。

Tags: ,

Posted in PHPで動く掲示板プログラム |

Comments are closed.