電子書籍の厳選無料作品が豊富!

ただいまPEAR入門を参考に勉強しているのですが
認証部分でつまずいてしまっています。
どなたか御教授いただけませんでしょうか。
簡単なログイン認証をするためにサンプル通りのコードを
作って表示テストを行うものなのですが
認証できたら「認証済みです」
できていなければ「ID/パスワードが違います」
と表示されるようなものです。
IDもパスワードもきちんと入れているのですが認証できないため
悩んでいます。
以下そのコードを書きますので助言いただけるとありがたいです。

*contents.php*
<?php
require_once("Auth.php");
function loginFunction($usr, $status){
require_once("loginForm.php");
}

$params = array(
"dsn" => "mysqli://pear:pass@localhost/pear",
"table" => "auth",
"usernamecol" => "username",
"passwordcol" => "password");

$myAuth = new Auth("DB", $params, "loginFunction");
$myAuth -> start();

if($myAuth -> getAuth()){
print("認証済です。");
}

?>

*loginForm.php*

<?php
switch($status){
case AUTH_IDLED :
case AUTH_EXPIRED :
$err = "ログイン期限が切れています。再ログインしてください。";
break;

case AUTH_WRONG_LOGIN :
$err = "ユーザID/パスワードが間違っています。";
break;
}
?>
<html>
<head>
<title>ログインページ</title>
</head>
<body>
<form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>">
<table border="0">
<tr>
<th align="right">ユーザID:</th>
<td><input type="text" name="username" size="15" maxlength="20"></td>
</tr>
<tr>
<th align="right">パスワード:</th>
<td><input type="password" name="password" size="15" maxlength="20"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="ログイン">
</td>
</tr>
</table>
<font color="red"><?php print($err); ?></font>
</form>
</body>
</html>

A 回答 (1件)

問題点:


(1)PEAR:AuthでMySQLを使って認証するには、PEAR:DBが必要です。
(Windowsの場合、PEAR:DBを別途インストール必要です)
(2)PEAR:Authの配置フォルダ階層が違うかもしれません。
(3)$statusという変数は、そのままでは呼び出されません。
Authクラスをnewするときに渡されるコールバック関数の引数として実装します。
function loginFunction($username,$status){ ←関数の引数
※ローカル変数は、スコープの中でしか使えません。
(4)
function loginFunction($usr, $status){
require_once("loginForm.php");
}
は2重に自分自身をすべて読み込むことになるので不要です。

確認点:
(1)mysqliは、PHP5以上でしか使えません。
(2)MySQLのpasswordテーブルに入れるのは、パスワードではなく、
md5ハッシュです。たとえば、パスワードが'abc'ならば、
<?php
print md5('abc');
?>
900150983cd24fb0d6963f7d28e17f72
になります。
(3)PEAR:DBの後継のPEAR:MDB2を使うことも可能です。その場合は、DB.phpと、"DB"の部分をそれぞれ、
PEAR:MDB2.phpと、"MDB2"に書き換えればOKです。

サンプルコードを以下に載せます。
ログアウトのファンクションもおまけにつけてみました。
---------------------------------------------------------

<html>
<head>
<title>ログインページ</title>
<script language="JavaScript" type="text/javascript">
<!--
function logout(){
window.location = "loginForm.php?logout=1";
}
//-->
</script>

</head>
<body>
<?php
require_once("Auth/Auth.php");
require_once("DB.php");
function loginFunction($username,$status){
switch($status){
case AUTH_IDLED:
break;

case AUTH_EXPIRED:
$err = "ログイン期限が切れています。再ログインしてください。";
break;

case AUTH_WRONG_LOGIN:
$err = "ユーザID/パスワードが間違っています。";
break;
default:
$err = "";
}
print("<font color=\"red\">".$err."</font>");
}

$params = array(
"dsn" => "mysqli://pear:pass@localhost/pear",
"table" => "auth",
"usernamecol" => "username",
"passwordcol" => "password"
);

$myAuth = new Auth("DB", $params, "loginFunction");
$myAuth -> start();

if(!empty($_GET['logout']) && $_GET['logout']=1){
print("ログアウトしました。");
$myAuth->logout();
}

if($myAuth -> getAuth()){
print("認証済です。");
}else{

}

?>

<form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>">
<table border="0">
<tr>
<th align="right">ユーザID:</th>
<td><input type="text" name="username" size="15" maxlength="20"></td>
</tr>
<tr>
<th align="right">パスワード:</th>
<td><input type="password" name="password" size="15" maxlength="20"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="ログイン">
<input type="button" value="ログオフ" onClick="javascript:logout()">
</td>
</tr>
</table>
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

お礼が大分遅くなってしまい申し訳ありませんでした。
PEARを使うよりcakeを使ってやるほうが楽だということで
一応解決いたしました。
情報提供も本当に役にたちました。
どうもありがとうございました。

お礼日時:2007/06/05 14:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!