0

ユーザー名とハッシュ化されたパスワードをテーブルに保存しているサイトがあります。この情報 (ユーザー名とハッシュ化されたパスワード) を、ログイン サイトから渡されたログイン情報と比較しようとしています。残念ながら、これはクラッシュし続けます。私が間違っていることについて誰かが私を正しい方向に向けることができれば、私はそれを感謝します. 以下は、ログインを確認するために使用しているコードです。私はまだPHPにかなり慣れていないので、それは非常に単純なものかもしれません。

<?php

$myServer = "server.domain.com";
$myUser = "readaccess"; 
$myPass = "password"; 
$myDB = "database";

        $dbhandle = mssql_connect($myServer, $myUser, $myPass)
            or die("Couldn't connect to SQL Server on $myServer");          

        $selected = mssql_select_db($myDB, $dbhandle)
            or die("Couldn't open database $myDB");

// username and password sent from form 
    $myusername=$_POST['myusername']; 
    $mypassword=$_POST['mypassword'];

//declare the SQL statement that will query the database
    $query = "SELECT password, salt ";
        $query. = "FROM dbo.members ";
        $query. = "WHERE username = '$myusername' ";

        $result = mssql_query($query)
            or die('A error occured: ' . mssql_get_last_message());

// SQL_num_row is counting table row
    $count=mssql_num_rows($result);         
    if($count) < 1) //no such user exists
    {
           header('Location: main_login.php');
    }

    $userData = mssql_fetch_array($result, MSSQL_ASSOC);
    $hash = hash('sha256', $userData['salt'] . hash('sha256', $mypassword) );

    if($hash != $userData['password']) //incorrect password
        {
           header('Location: main_login.php');
    }
    else {
    header('Location: index.php');
    }
  ?>
4

1 に答える 1

0

問題はこの行だと思います

$result = mssql_query($query)
        or die('A error occured: ' . mssql_get_last_message());

失敗を確認する適切な方法は次のとおりです。

$result = mssql_query($query, $dbhandle);
if(!$result)
    die('A error occured: ' . mssql_get_last_message());

これは、mssql_connect および mssql_select_db ステートメントにも当てはまることに注意してください。データベース リソースを mssql_query 関数に提供する必要があることに注意してください。

.=また、スペースを入れずに使用すると、ほとんどの人が読みやすくなります。解析エラーが発生するとは思いませんが、オペランドから空白を除外することは非常に理にかなっています。$counter+ +;(合法であってもやらないだろう。)

今後質問する場合は、表示されているエラー メッセージを必ず含めてください。行番号を参照している場合は、コード サンプルでその行を指摘してください。この場合、問題は完全に解析/構文エラーであるため、ハッシュやSQLとは関係がないと思います。

于 2012-05-04T19:20:58.437 に答える