在注册表中比较两个密码

时间:2016-02-02 21:01:36

标签: php mysql forms passwords

我试图找到一种方法,可以在将信息添加到数据库之前比较我的注册表单中的两个哈希密码。

但是我不确定我是否正确地使用了这个,如果我错过了一个可以让我这样做的负载。

我是否需要放置完全独立的变量来链接到表单中发布的密码?在尝试比较密码之前,我是否需要先执行我的语句?

会感激一些指导。谢谢。

require 'connection.php';

$message = '';

if (!empty($_POST['username']) && !empty($_POST['password'])):

  $sql = "INSERT INTO users (FirstName, LastName, Role, Email, Username, Password) VALUES (:firstname, :lastname, :role, :email, :username, :password)";
  $stmt = $conn->prepare($sql);

  $stmt->bindParam(':firstname', $_POST['firstname']);
  $stmt->bindParam(':lastname', $_POST['lastname']);
  $stmt->bindParam(':role', $_POST['role']);
  $stmt->bindParam(':email', $_POST['email']);
  $stmt->bindParam(':username', $_POST['username']);
  $password = $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_DEFAULT));
  $confirmpassword = $stmt->bindParam(':confirmpassword', password_hash($_POST['confirmpassword'], PASSWORD_DEFAULT));

if($password == $confirmpassword):

  if ($stmt->execute()):
    $message = 'Well done! You have successfully registered with us!';
    header('Location:loginPage.php');
  else:
    $message = 'There seems to be an issue getting you registered.';
  else:
    $message = 'Your passwords do not match, please enter them correctly.';
endif;

endif;

endif;

1 个答案:

答案 0 :(得分:3)

作为社区维基提交。欢迎每个人(合格)修改。

正如chris85在评论中所述:

  

"将$ _POST ['密码']设置为$ password,将$ confirmmpassword设置为$ _POST ['确认密码']。我想如果你当前var_dump $ password是一个对象,而不是一个字符串。"

您(最有可能)想要做的是检查用户在未示出的 HTML表单中输入的密码是否与两个输入匹配。

if (!empty($_POST['username']) && !empty($_POST['password'])):

$username = $_POST['username'];
$password = $_POST['password'];
$confirmpassword = $_POST['confirmpassword']; // assuming the same in HTML form name attribute

if($password == $confirmpassword):

  $sql = "INSERT INTO users (FirstName, LastName, Role, Email, Username, Password) VALUES (:firstname, :lastname, :role, :email, :username, :password)";
  $stmt = $conn->prepare($sql);

...

  else:
    $message = 'Your passwords do not match, please enter them correctly.';

检查错误。

如果您希望稍后通过SELECT验证密码,请使用password_verify()

另外,正如我在评论中所述,我不明白你为什么要使用:

$confirmpassword = $stmt->bindParam(':confirmpassword', ...

这有点矫枉过正,它确实没用,它也会给你一个错误,因为你的查询中没有绑定它。

  • 只需将其删除即可。