2012-04-26 3 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 Parse: синтаксическая ошибка, неожиданный '=' в /var/www/itinfo/checklogin.php в строке 23, референт: http://web.domain.com/itinfo/main_login.php – klcant

ответ

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, так как это полностью синтаксическая ошибка.

Смежные вопросы