2017-09-25 1 views
2

J'ai un problème. Je hashing mon mot de passe using PHP mais quand je le vérifie son donner le message suivant.Impossible de vérifier le mot de passe après le hachage à l'aide de PHP

Avis: Undefined variable: liXZkG452 en /opt/lampp/htdocs/test/verify.php sur la ligne 2
Échec

J'expliquais mon code ci-dessous.

hash.php

<?php 
$password="[email protected]"; 
$hash = password_hash($password, PASSWORD_BCRYPT); 
echo $hash; 
?> 

Le echo ci-dessus est de donner cette valeur $2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq et encore je compare dans le fichier ci-dessous.

verify.php

<?php 
$hash="$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq"; 
$password="[email protected]"; 
if (password_verify($password, $hash)) { 
    echo 'login'; 
}else{ 
    echo 'Failed'; 
} 
?> 

La fonction ci-dessus me donne la question. Aidez-moi s'il vous plaît à résoudre ce problème.

+7

Vous devez utiliser singlequotes '' 'au lieu de guillemets doubles. Vous avez des identifiants variables '$' dans les guillemets doubles, donc PHP pense que c'est en fait une variable. L'utilisation de guillemets simples permettrait de contourner cela. – Qirel

+0

@Qirel: parfait et merci. Quelle était l'erreur Puis-je savoir? – subhra

+1

Comme je l'ai dit, '$' est l'identifiant de la variable. Donc PHP pense que quelque chose après '$' est le nom de variable. Dans les guillemets doubles, PHP utilise des variables, mais pas avec des guillemets simples. – Qirel

Répondre

2

Vous devez utiliser des chaînes à guillemets simples plutôt que des chaînes à guillemets doubles autour de votre variable $hash, car PHP interprétera $ comme un identificateur de variable à l'intérieur de chaînes à double guillemets. Ensuite, il suppose que tout ce qui vient ensuite, est le nom de la variable (ce qui explique pourquoi vous obtenez cette "variable indéfinie .." notice). Les deux premières instances de $ dans la chaîne ne seront pas traitées de cette façon, car ce n'est pas un nom de variable valide (il commence par un nombre).

Le code ci-dessous affichera "login", car le $hash est désormais cité avec des guillemets simples.

$hash = '$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq'; 
$password = "[email protected]"; 
if (password_verify($password, $hash)) { 
    echo 'login'; 
} else { 
    echo 'Failed'; 
}