0

私のエラーは、変数がテーブルから取得されていないことにあると確信しています。ただし、ユーザー名とパスワードを要求しているのと同時に、そのデータを要求しているというエラーは表示されません。テーブルは、[ユーザー名]、[パスワード]、[会社] で構成されます。目標は、ユーザー名とパスワードが確認された後、会社の名前に基づいてユーザーを誘導することです。最後にエコーがかかり続けます。

ここにコードがあります

   function RegisterUser($usename, $password, $company)
{
   // hash the pwd
   $hpwd = hash('sha256',$password);
   $q ='insert into users values(username, password, company) values(?,?,?)';
   $stmt = PDO::prepare($q);
   $stmt->exectue(array( $username, $hpwd, $company));
}
// validate user and return the company if successfull

function ValidateUser($username, $password, &$company)
{
   $hpwd = hash('sha256',$password);
   $q ='select company from users where username=? AND password=?';
   $stmt = PDO::prepare($q);
   $stmt->exectue(array( $username, $hpwd));
   if( ($company = $stmt->fetch(PDO::FETCH_COLUMN)) === false )
   {
     $company = header( 'Location: login.php' );
   } 

   elseif($company == "monkeynones"){
        header( 'Location: admin1.php' );
        }
4

2 に答える 2

2

あなたのクエリは間違っています:

$sql = "SELECT 'password' and 'company' from users where 'username' = '$username';";

する必要があります

$sql = "SELECT `password`, `company` from `users` where `username` = '$username'";

識別子の前後には、引用符ではなくバッククォートを使用してください。andはコンマに置き換えられ、クエリの末尾のセミコロンは不要です。

于 2013-10-06T22:31:44.873 に答える
0

新しいプログラマーがユーザー名とパスワードの認証を適切に行うことを学ぶことは非常に重要であり、この長い記事を書く必要があると感じました。

まず、eicto が指摘したように、mysql 拡張機能は非推奨であり、実際に使用するべきではありません。

だからメタルに。
php.net にアクセスして、PDOについて学んでください。

暗号化されていないパスワードを保存しないでください。

これがあなたがすべきことです:

PDO をセットアップします。

// you need to store $link somewhere. in a class preferrably
function InitPDO(&$link)
{
   // havet the database handle all strings as UTF-8.
   $options = array('PDO::MYSQL_ATTR_INIT_COMMAND' => 'set names utf8');
   $link = new PDO ( 'mysql:host='.$config['dsn_host'].';dbname='.$config['dsn_db'], $config['username'], $config['password'], $options ) ;

   // If there is an error executing database queries, have PDO to throw an exception.
   $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $link->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}

ユーザー登録時。

function RegisterUser($username, $password, $company)
{
   // hash the pwd
   $hpwd = hash('sha256',$password);
   $q ='insert into users values(username, password, company) values(?,?,?)';
   $stmt = $link->prepare($q);
   $stmt->execute(array( $username, $hpwd, $company));
}

// ユーザーを検証し、成功した場合は会社を返します

function ValidateUser($username, $password, &$company)
{
   $hpwd = hash('sha256',$password);
   $q ='select company from users where username=? AND password=?';
   $stmt = $link->prepare($q);
   $stmt->execute(array( $username, $hpwd));
   if( ($company = $stmt->fetch(PDO::FETCH_COLUMN)) === false )
   {
     $company = 'invalid'; // because user auth failed';
   } 
   //else all is good
}

テスト使用例。

// assumes there is a 'login.php' and a 'invalid.php' file
$link = null;
InitPDO( $link );
RegisterUser('tester','password','login');
VerifyUser('tester','password', $redir );
if( file_exists( $redir . '.php' ) )
{
   header( 'Location: '. $redir . '.php' );
   exit;
}
echo 'error. no valid page found to fullfill query';
于 2013-10-06T22:44:08.027 に答える