Поэтому, когда я пытаюсь сравнить $ testpass с $ encpass, я каждый раз получаю ошибку, потому что $ encpass усекается функцией mysqli_fetch_array. Есть ли настройка, которую мне может понадобиться изменить в моих настройках PHP или настройках базы данных MYSQL. Мой пароль хранится в базе данных как varchar (255), но я поменяю его на varchar (128) после того, как приведенный ниже код заработает.
<?php
include 'includes/connection.php';
$user=$_POST['User'];
$pass=$_POST['pass'];
function hashpass($red,$algo){
$hash=hash($algo,$red);
return $hash;
}
if($user!=NULL){
$query="SELECT password FROM user_data WHERE User_Name='".$user."' LIMIT 1";
if($query!=NULL){
$result = mysqli_query($conn, $query) or die (mysqli_error($conn)." query=".$query);
while($user_data = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$encpass=$user_data['password'];
}
}else{
echo "ERROR 400";
}
$testpass=hashpass($pass,"sha512");
if($testpass==$encpass){
//login();
echo "PASS";
}else{
echo "result:= ";
var_dump($result);
echo "<br />encpass:= ";
var_dump($encpass);
echo "<br />query:= ";
var_dump($query);
echo "<br />testpass:= ";
var_dump($testpass);
echo "<br />";
}
}else{
echo"No such user";
}
?>
Вышеуказанное приводит к следующему:
result:
object(mysqli_result)[2]
public 'current_field' => null
public 'field_count' => null
public 'lengths' => null
public 'num_rows' => null
public 'type' => null
encpass:
string '78ddc8555bb1677ff5af75ba5' (length=25)
query:
string 'SELECT password FROM user_data WHERE User_Name='test2' LIMIT 1' (length=62)
testpass:
string '78ddc8555bb1677ff5af75ba5fc02cb30bb592b0610277ae15055e189b77fe3fda496e5027a3d99ec85d54941adee1cc174b50438fdc21d82d0a79f85b58cf44' (length=128)
Есть идеи?
Возможно, вы набрали от 255 до 25? Опубликовать дамп структуры базы данных …
Других решений пока нет …