[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 メーリングリストの案内