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

chappuru21 chappuru21 chappuru21 @ hotmail.com
2006年 7月 8日 (土) 00:15:42 JST


はじめまして、こんばんは。
今回初めて投函させて頂きます。

とあるサイトのQ&Aにて、sessionを使った認証に関してアドバイスを頂戴したのです
が、DBへ登録は出来ているものの、ID、passを入力してもセッションに登録できない
ためか、ログインできない状態となっております。

動作環境
PHP4.3.7.7
Apacha1.3.29
MySQL4.0.20
WinXP

以下、テスト的にサイトにてお教えいただいたスクリプトを、試行錯誤を繰り返しな
がらのものです。
(色々試しているので、コメントで見難くなっていることをお許し下さい。)

--DB設定--
CREATE TABLE `usr_tb` (
membid int NOT NULL auto_increment,
username varchar(63) default NULL,
passwd varchar(63) default NULL,
nick varchar(127) default NULL,
flg tinyint default 0,
PRIMARY KEY (membid)
)



--dbconn.inc.php--
<?php
require_once('DB.php');

$dsn = 'mysql://root:******@localhost/test';
$options = array(
    'debug'       => 2,
    'portability' => DB_PORTABILITY_ALL,
);

$conn =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
    die($db->getMessage());
}

$conn->disconnect();

?>



--auth.inc.php--
<?php
require_once("dbconn.inc.php");
session_start();//セッション開く

//セッションに値が無い場合はパスワード認証画面を表示
function authform(){
echo <<<EOC
	<form action="$PHP_SELF" method="post">
	ユーザ名 <input type="text" name="username"><br />
	パスワード <input type="password" name="password"><br />
	<input type="submit" name="send" value="送る">
	</form>
EOC;
exit;
}


if(!$_SESSION[username]){
echo "認証が必要です。ユーザー名とパスワードを入力して下さい。";
authform();
}


//ユーザ名とパスワードが送られてきた場合は認証
if($username <> "" && $passwd <> ""){
	//addslashesはSQLインジェクション防止のため
	$user = addslashes(trim($username));
	$passwd = addslashes(trim($password));
	$sql = "SELECT * FROM usr_tb WHERE like username='$user'";
	//$data = $conn->getRow($sql,2);//PEAR で接続、使わない場合は mysql_queryな
ど
	$result = mysql_query($sql);
	$rows = mysql_num_rows($result);

	if($rows == 0){
		echo "<p>該当データがありません。</p>";
		}
	else {
		if($row["passwd"]==$passwd){
			//データベースにあった場合はセッションに登録
			$_SESSION[username] = $row["username"];
			//ついでに諸々の情報をセッションに登録
			$_SESSION[nick] = $row["nick"];//例えばニックネーム
			echo $row["nick"];
		}else{
			echo "パスワードまたはIDに誤りがあります。";
			authform();
			exit;
		}
}
}
?>


--mypage.php--
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>マイページ</title>
</head>
<body>

<?php
session_start();
require_once("auth.inc.php");
?>

MyPAGE

</body>
</html>


以上、PHPを触り始めて間もない初心者の質問にて、このような媒体での質問に恐縮
いたしておりますが、ここ数日、以上の内容を印刷し、日夜持ち歩いてはいるのです
が・・解決できそうで出来ない。と、見えない壁に突き当たった感覚から質問させて
頂きました。お忙しい中恐縮ですが、何処が可笑しいのか、ご教授頂けたら幸いで
す。




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