[PHP-users 29672] Re: sessionを使った認証フォームに関して
chappuru21 chappuru21
chappuru21 @ hotmail.com
2006年 7月 9日 (日) 14:11:00 JST
おはよう御座います。
早速のお返事有難う御座います。感謝しております。
>立松様
検索条件(AND)の件、有難う御座います。色々と私なりに調べては居たものの、
素人故、得たい内容のものが見つからなかったため、このような的を得たご指摘に感
謝いたします。
>鈴木様
デバックの考え方を有難う御座います。
フォームにて入力後、POSTした後すべての表示の際に、echo文にて入力データを確認
してみましたが、どれもきちんと渡されているようです。
現在のコードは昨夜メールで公開させて頂いたものに少し手を加えているだけのもの
ですが、DBに参照できないためか、はたまたセッションに登録できないためか、
フォームを抜け出る事が出来ずにおります。(こういった際もデバックをすべきなん
ですよね。そうとは思って色々試しているのですが、思うように出来ないでいうのが
現状です。)
また、下記コードは、先日こちらのMLにて、山下様よりご教授いただいたものです
が、2行目のrequire_once("dbconn.inc.php");を外し、DBへの接続コードを本文中に
入れる事で、認証させる事が出来ました。
そこで改めてアドバイス頂きたいのは、
1・私が記載したコードにおいて、tableに接続(認証?)出来ない、考えられる理
由は何か?可笑しなところは何処か?
2・お教えいただいた下記スクリプトにおいて、require_onceを外しているが、これ
を外したことで上手く行った考えられる原因、および外した事で考えられる障害とは
何か?
3・同じく下記スクリプトを取り入れる条件として、
> >まず、MySQL側(ユーザー名をユニークに)
> >ALTER TABLE `usr_tb` ADD UNIQUE `username` (`username`)
と、アドバイス頂いたが、変更する意味(フィールド名は一緒)はどういったところ
にあるのか?です。
・・・この件も調べてはいるのですが、「変更する意味と、変更した事によるその働
き」が分からずにおります。
(現在、下記コードにおいての動作確認は、DBを変えずに動かしております。)
素晴らしい有識者の皆さんを前に、このような質問を繰り返すのもお恥ずかしい限り
では御座いますが、「動いたから良かった!」ではなく、「何で?何処が可笑しい
の?」と、今後に繋げたいと思っておりますので、お忙しい中恐縮ですが、今一度ご
教授いただけたら幸いに思います。
<?php
//require_once("dbconn.inc.php");
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username != "" || $password != "") {
$username = addslashes(trim($username));
$password = addslashes(trim($password));
mysql_connect('localhost','root','******');//require_onceを外して追加した
mysql_select_db('test');//require_onceを外して追加した
$sql = "SELECT * FROM usr_tb WHERE username = '$username'";
//$data = $conn->getRow($sql,2);//PEAR で接続、使わない場合は mysql_query等
ですかね
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
if ($rows == 1) {
$pass = mysql_result($result, 0, "passwd");
$nick = mysql_result($result, 0, "nick");
//$pass = data("passwd");
//$nick = data("nick");
if ($pass == $password) {
$_SESSION['username'] = $username;
$_SESSION['nick'] = $nick;
} else {
$Err = "IDまたはパスワードに誤りがあります。";
}
} else {
$Err = "IDまたはパスワードに誤りがあります。";
}
} else {
$Err = "認証が必要です。ユーザー名とパスワードを入力して下さい。";
}
// 未エラー、$_SESSION['username'] が未登録の場合
if ($Err != "" && $_SESSION['username'] == "") {
authform($Err);
}
function authform($Err) {
echo $Err;
echo <<<EOC
<form method="post">
ユーザ名 <input type="text" name="username"><br />
パスワード <input type="password" name="password"><br />
<input type="submit" name="send" value="送る">
</form>
EOC;
exit;
}
?>
PHP-users メーリングリストの案内