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