2014-11-03 18 views
6

doğrulamaz. Bunları password_verify kullanarak doğrularım. Benim veritabanında bir karma şifreyi girmek ve bunu doğrulamaya çalıştığınızdapassword_verify Ben password_hash aracılığıyla benim eklenen şifreleri karma karma

Ancak, her iki çıkışlar hep birbirinden farklıdır.

<?php include 'header.php';?> 
<body> 
<form role="form" method="post" action="login.php"> 
    <div class="form-group"> 
    <label for="usrname">Username:</label> 
    <input type="text" class="form-control" name="usrname" placeholder="Enter username"> 
    </div> 
    <div class="form-group"> 
    <label for="passwrd">Password:</label> 
    </div> 
    <input type="password" class="form-control" name="passwrd" placeholder="Enter password"> 
    <br> 
    <input type="checkbox">Remember Me 
    <br> 
    <br> 
    <button type="submit" class="btn btn-default">Submit</button> 
</form> 
</body> 
</html> 

login.php (işleyici):

<?php 
include 'vars.php'; 
include 'header.php'; 
$sql="SELECT * FROM members WHERE usrname='$usrname'"; 
$result=mysqli_query($con,$sql); 
$count=mysqli_num_rows($result); 
$row=mysqli_fetch_row($result); 
$verify=password_verify($hash,$row[2]); 
if($verify){ 
    $_SESSION["usrname"]=$usrname; 
    echo "Correct"; 
} 
else { 
    echo "user: " . $usrname. "<br>"; 
    echo "pass: " . $hash. "<br>"; 
    echo "db: " . $row[2]."<br>"; 
    echo "Wrong Username or Password"; 
} 
?> 

vars.php:

<?php 
$h='localhost';$u='caelin';$p='****';$d='ombouwnh'; 
$con=mysqli_connect($h,$u,$p,$d); 
$usrname=$_POST['usrname']; 
$passwrd=$_POST['passwrd']; 
$hash=password_hash($passwrd, PASSWORD_DEFAULT); 
?> 

sayfalarım, şöyle

main_login.php (form) vardır Kullanarak giriş yapmaya çalıştığımda

kullanıcı adı 'caca' ve parola 'caca' Her ikisini de tekrar denediğimde farklı bir çıktı alıyorum. Bu özel sorunu stackoverflow'ta bulamıyorum.

TIA

PS

PS. Daha fazla ayrıntı gerekiyorsa,

+4

sütun uzunluğu karma karşılamak için yeterli olduğundan emin olun; Bu genellikle bir çok hata yapar. –

+1

varchar (255) @ Fred-ii- – caelin

+0

'$ satır [2]' sayısının doğru olduğundan emin olun. Bu gerçekten masandaki 3. sütun, doğru mu? Artı 'session_start();' yüklü, değil mi? '$ _SESSION ['usrname']' 'alakasız olabilir. –

cevap

11

fonksiyon password_verify(); iki parametre alır onlara sormak; karma olmayan bir girdi ve onu karşılaştırmak için saklanan bir karma. Karma olmayan girişi otomatik olarak saklanan sürümle karşılaştırır. Yani ilk kodunuz zaten hashed bir şifreyi yeniden yazdı. Bu gibi görünmelidir:

$verify=password_verify($_POST['passwrd'],$row[2]); 

if($verify){ 
    $_SESSION["usrname"]=$usrname; 
    echo "Correct"; 
} 
else { 
    echo "user: " . $usrname. "<br>"; 
    echo "pass: " . $hash. "<br>"; 
    echo "db: " . $row[2]."<br>"; 
    echo "Wrong Username or Password"; 
} 
+2

Gitmek için yol Andrew. OP'nin çözümü aldığına sevindim. OP'den, yorumunu görmeden önce kendimi kullandığım bir şey göndermemi istemiş olsaydım sordum. OP'nin kodu ile çalışmak ve bir başkasının kodu yerine asıl sorunun çözümünü bulmak her zaman en iyisidir. * Şerefe * +1 –

3


Sen şifreyi rehashed - sadece password_verify için düz metin parola ve (db) sizin karma geçmesi ve işe yarıyor.

+0

20 dakika önce cevaplandı ve kabul edildi; teşekkür ederim. –

+0

Üzgünüz, soru açıp cevabı yazdım ama wifi bağlantım düzeltilinceye kadar gönderilemedi (için – Djordje