[PHP-users 29661] Re: sessionを使った認証フォームに関して

Daisuke Yamashita yamashita @ ktk.gr.jp
2006年 7月 8日 (土) 11:52:57 JST


山下です。

こんなんでどうでしょう。
色々と私好みに直している部分がありますが・・・

まず、MySQL側(ユーザー名をユニークに)
ALTER TABLE `usr_tb` ADD UNIQUE `username` (`username`)

auth.inc.php
<?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));

  $sql    = "SELECT * FROM usr_tb WHERE username = '$username'";
  $result = mysql_query($sql);
  $rows   = mysql_num_rows($result);

  if ($rows == 1) {
    $pass = mysql_result($result, 0, "passwd");
    $nick = mysql_result($result, 0, "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;
}
?>


みなさんのご指摘通りに、他にも色々と調べてみてはどうでしょう。

--
山下 <yamashita @ ktk.gr.jp>



PHP-users メーリングリストの案内