2012-04-26 11 views
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'); 
    } 
    ?> 
+1

FYI、あなたはSQLインジェクションを広く受け入れています。この問題を完全に回避するには、PDOで準備済みのクエリを実行する方法を学ぶ必要があります。 – Brad

+1

"残念ながら、これはクラッシュし続けます。" - これについて詳しく説明できますか?クラッシュは何ですか?どのようなメッセージで? – eis

+0

これは私がApacheのログに表示されるエラーです。ブラウザでは、私は500エラーが発生します。 PHP解析エラー:構文エラー。予期しない '=' /var/www/itinfo/checklogin.php、referer:http://web.domain.com/itinfo/main_login.php – klcant

答えて

0

は、私はこの問題は、このライン

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

失敗をチェックするための適切な方法で、これは、同様mssql_connectとmssql_select_db文のために行くことを

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

注意だと思います。 データベースリソースをmssql_query関数に提供する必要があることに注意してください。

また、.=をスペースなしで使用すると、ほとんどの人が読みやすくなります。私はそれが解析エラーを生成するとは思わないが、それはオペランドから空白を保つのが大変だ。 ($counter+ +;が合法であっても、あなたはしません)

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

関連する問題