2017-04-22 80 views
0

我是一个初学者在PHP中,也许问题是如此简单,但是当我尝试从我的分贝获得哈希,并让密码验证做所有的工作,它总是给我假,即使使用正确的密码。我试图复制粘贴哈希从数据库并把它放在密码验证,它的工作。密码验证与查询不工作

$sql="SELECT * FROM users WHERE username='$myusername'"; 
$result=mysqli_query($connection,$sql); 

// Mysql_num_row is counting table row 
$count=mysqli_num_rows($result); 
// If result matched $myusername, table row must be 1 row 
if($count==1){ 
//This must be the problematic place 
    $hash = mysqli_query($connection,"SELECT jelszo FROM users WHERE username =='$myusername'"); 
    if(password_verify($myjelszo,$hash)) 
    { 
// Register $myusername, $myjelszo and redirect to file "login_success.php" 
$_SESSION['username']= "myusername"; 
$_SESSION['jelszo']= "myjelszo"; 
header("location:login_success.php"); 
    } 
else { 
echo "Wrong Username or Password"; 
} 
+0

为什么不能从单个查询中获取所有详细信息 – Akintunde007

+0

您错误地使用了密码哈希函数。你为什么不读这个用法。在函数中,将散列密码作为第一个参数,输入密码作为第二个参数 – Akintunde007

回答

0

首先,你不应该直接传递变量给您查询,但应该用准备好的语句(在此particualr情况下):

$sql="SELECT * FROM users WHERE username='$myusername'"; 
$result=mysqli_query($connection,$sql); 

应该是这样的:

$stmt= $connection->prepare("SELECT * FROM users WHERE username=?"); 
$stmt->bind_param("s", $myusername); 
$stmt->execute(); 


我看到的另一个问题在此查询中:

$hash = mysqli_query($connection,"SELECT jelszo FROM users WHERE username =='$myusername'"); 

双==应该是一个单一的一个,因为这是一个SQL查询:

$hash = mysqli_query($connection,"SELECT jelszo FROM users WHERE username ='$myusername'"); 

但同样,它应该将其转化为一份声明中被固定以防止注射(见前面的例子)


接下来,我假设'$ myjel​​szo'是你的密码保存在一个变量中,不要净化输入。我们有一个关于它的讨论和测试已经完成,pleasse仔细阅读这个线程有关密码安全=>https://stackoverflow.com/a/36628423/4950530

0

有时,密码验证不工作的PHP大多数版本。我认为最合适的人不需要使用任何PHP方法。

if($myjelszo != $hash)) 
    { 
     $_SESSION['username']= "myusername"; 
     $_SESSION['jelszo']= "myjelszo"; 
     header("location:login_success.php"); 
    } 
else 
    { 
     echo "Wrong Username or Password"; 
    }