
ただいま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>
No.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>
お礼が大分遅くなってしまい申し訳ありませんでした。
PEARを使うよりcakeを使ってやるほうが楽だということで
一応解決いたしました。
情報提供も本当に役にたちました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FORMで送信ボタンと戻るボタン...
-
データ送信をボタンを押さずに...
-
PHPのif文でその処理を途中で抜...
-
Subversionのリポジトリの削除
-
PHPの変数をHTMLで使いたい
-
webroot以外の画像の表示
-
PHPがうまく表示されない・・・?
-
「クラウドにアップロード」」...
-
POSTした値を、別ページにもPOS...
-
.phpファイルが、表示されない
-
'_'(アンダースコア)の使い方...
-
ファイルの遷移がうまく行われ...
-
セッションについての設定なの...
-
phpでうまく画像がダウンロード...
-
C言語でのディレクトリ作成につ...
-
htmlで自分自身を呼び出して整...
-
コマンドプロンプトを指定のデ...
-
パースエラーとは?
-
PHPで複数ファイルのダウン...
-
CSV出力にHTMLが入ってしまう
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FORMで送信ボタンと戻るボタン...
-
テキストボックスにデータベー...
-
引数を正しく読み込む方法
-
【PHP】ページを更新すると勝手...
-
GETメソッドで文字列として+を...
-
wordpressのテーマSightの日付表示
-
form actionで二つ送信先を指定...
-
header.locationで、画面遷移、GET
-
変数について
-
inputタグでphpを呼び出す際、...
-
javascriptでポスト送信したデ...
-
ボタンのクリック数を合計保存...
-
Wordpressのコメント欄受付・表...
-
セッションにオブジェクトを登...
-
セッション PHPとHTML
-
データベース接続 ログインフ...
-
ユーザーに入力してもらった値...
-
問題部分がJavascriptかPHPか分...
-
PHP table内、<a href使って su...
-
値が渡されない
おすすめ情報