Php 比较注册表中的两个密码
我试图找到一种方法,在信息被添加到数据库之前,我可以比较注册表单中的两个哈希密码 然而,我不确定我是否完全正确,是否错过了允许我这样做的加载 我是否需要放置完全独立的变量,链接到表单中发布的密码?在尝试比较密码之前,我需要先执行我的语句吗 希望您能提供一些指导。多谢各位Php 比较注册表中的两个密码,php,mysql,forms,passwords,Php,Mysql,Forms,Passwords,我试图找到一种方法,在信息被添加到数据库之前,我可以比较注册表单中的两个哈希密码 然而,我不确定我是否完全正确,是否错过了允许我这样做的加载 我是否需要放置完全独立的变量,链接到表单中发布的密码?在尝试比较密码之前,我需要先执行我的语句吗 希望您能提供一些指导。多谢各位 require 'connection.php'; $message = ''; if (!empty($_POST['username']) && !empty($_POST['password'])):
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;
作为社区wiki提交。欢迎大家(合格)修改 正如chris85在评论中所述: “将$\u POST['password']设置为$password,将$confirmpassword设置为$\u POST['confirmpassword']。我认为,如果您当前将$password设置为var\u dump,那么它将是一个对象,而不是字符串。” 您(很可能)希望做的是检查用户在您的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.';
检查错误
password\u verify()
$confirmpassword = $stmt->bindParam(':confirmpassword', ...
这太过分了,它实际上没有任何用处,而且它还会给您带来一个错误,因为在您的查询中它没有绑定
- 把它拿走
- 作为社区wiki提交。欢迎大家(合格)修改
正如chris85在评论中所述:
“将$\u POST['password']设置为$password,将$confirmpassword设置为$\u POST['confirmpassword']。我认为,如果您当前将$password设置为var\u dump,那么它将是一个对象,而不是字符串。”
您(很可能)希望做的是检查用户在您的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.';
检查错误
password\u verify()
$confirmpassword = $stmt->bindParam(':confirmpassword', ...
这太过分了,它实际上没有任何用处,而且它还会给您带来一个错误,因为在您的查询中它没有绑定
- 把它拿走
$\u POST['password']
设置为$password
,将$confirmpassword
设置为$\u POST['confirmpassword']
。我想如果你现在var\u dump
$password
那将是一个对象,而不是一个字符串。哦,那你为什么要做$confirmpassword=$stmt->bindParam(“:confirmpassword”…
?你不需要它。@Fred ii-我想我在执行语句时需要一个变量来比较?我在下面发布了一个社区wiki答案。@chris85谢谢你的帮助,我一定会研究这个问题。Set$\u POST['password']
到$password
,和$confirmpassword
到$\u POST['confirmpassword']
。我想如果你var\u dump
$password
当前将是一个对象,而不是字符串。哦,你为什么要做$confirmpassword=$stmt->>bindParam(“:confirmpassword”…
?你不需要它。@Fred ii-我想我在执行语句时需要一个变量进行比较?我在下面发布了一个社区wiki答案。@chris85谢谢你的帮助,我一定会调查这个问题。谢谢你的指导,我也会调查这个问题。谢谢你的指导,我也会调查这个问题好。