ただいま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で質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FORMで送信ボタンと戻るボタン...
-
データ送信をボタンを押さずに...
-
PHPとCSVで簡易データベースな...
-
form actionで二つ送信先を指定...
-
xamppでformによるデータの送信...
-
WordPressで完全一致検索
-
multipart/form-dataを使ったデ...
-
「 '&lng='」の&の意味が分か...
-
ボタンのクリック数を合計保存...
-
リンクでキーワードを渡すには...
-
【BAT(バッチ)ファイル】Web...
-
PHP8を使うと、大量のWarningが...
-
onedrive にexcelファイルをア...
-
文字化けに関して
-
ヒアドキュメントを中断してinc...
-
文字化けについて
-
空メールの作り方教えて欲しい...
-
透過PNGが透過されない!!
-
「localhostの応答を待っていま...
-
携帯で、phpページからhtmlペー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
form actionで二つ送信先を指定...
-
データ送信をボタンを押さずに...
-
PHPでε(イプシロン)のような...
-
FORMで送信ボタンと戻るボタン...
-
inputタグでphpを呼び出す際、...
-
別のファイルへ値を受け渡す方法
-
テキストボックスにデータベー...
-
ボタンのクリック数を合計保存...
-
リクエストメソッド
-
PHPとCSVで簡易データベースな...
-
【PHP】ページを更新すると勝手...
-
Auth認証エラー
-
multipart/form-dataを使ったデ...
-
PEARでのAuth認証について
-
ワンクリックしかできないクリ...
-
PEAR Image_QRCodeのエラー
-
戻れないです
-
header(Location: next.php) だ...
-
リンクでキーワードを渡すには...
-
【初歩】ログアウトを【2回押さ...
おすすめ情報