Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较注册表中的两个密码_Php_Mysql_Forms_Passwords - Fatal编程技术网

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谢谢你的帮助,我一定会调查这个问题。谢谢你的指导,我也会调查这个问题。谢谢你的指导,我也会调查这个问题好。