php生成密码问题

php生成密码问题,php,passwords,Php,Passwords,我有一个注册表,它工作得很好。我唯一的问题是,在将明文临时密码散列到数据库之前,我无法获得通过电子邮件发送的密码。它会将密码散列到数据库,但电子邮件中的密码字段为空 这是密码 $password = $_POST['password']; $password_salt = password_hash($password, PASSWORD_BCRYPT); 现在这部分是我的问题 如果是这样的话 $password = $_POST['password']; $password_salt =

我有一个注册表,它工作得很好。我唯一的问题是,在将明文临时密码散列到数据库之前,我无法获得通过电子邮件发送的密码。它会将密码散列到数据库,但电子邮件中的密码字段为空

这是密码

$password = $_POST['password']; 
$password_salt = password_hash($password, PASSWORD_BCRYPT);
现在这部分是我的问题

如果是这样的话

$password = $_POST['password']; 
$password_salt = password_hash($password, PASSWORD_BCRYPT);
$password = $_POST['password']; 
$password = password_hash($password, PASSWORD_BCRYPT);
$password
位于电子邮件正文中

密码为空的电子邮件

所以如果我用这个

$password = $_POST['password']; 
$password_salt = password_hash($password, PASSWORD_BCRYPT);
它用散列密码更新数据库,但不会将纯文本发送到电子邮件,但如果我这样添加它

$password = $_POST['password']; 
$password_salt = password_hash($password, PASSWORD_BCRYPT);
$password = $_POST['password']; 
$password = password_hash($password, PASSWORD_BCRYPT);
然后,它也会将哈希密码发送到数据库,但在电子邮件中,密码会哈希到

我需要它生成并发送一个非散列密码的电子邮件,但相同的密码散列到数据库

if(isset($_POST['submit'])) {

$email = $_POST['email'];
$soldier_name = $_POST['soldier_name'];
$birthdate = $_POST['birthdate'];
$country = $_POST['country'];


if(!empty($email) && !empty($soldier_name) && !empty($birthdate) && !empty($country)) {


$email = mysqli_real_escape_string($connection, $email);
$soldier_name = mysqli_real_escape_string($connection, $soldier_name);
$birthdate = mysqli_real_escape_string($connection, $birthdate);
$country = mysqli_real_escape_string($connection, $country);


 $query = "INSERT INTO soldiers (soldier_email, soldier, soldier_birthdate, soldier_country) ";
 $query .= "VALUES('{$email}','{$soldier_name}', '{$birthdate}', '{$country}')";
 $registration_query = mysqli_query($connection, $query);
 if(!$registration_query) {
 die("QUERY FAILED ". mysqli_error($connection) . ' ' . mysqli_errno($connection));
}

$email\u password=$\u POST['password'];
$password=password\u hash($email\u password,password\u BCRYPT);
$query=mysqli\u query($connection,“更新士兵设置士兵密码=“$password”,其中士兵电子邮件=“$email”);
$from=“网站”;
$to=$email;
$subject=“注册信”;
$message=“哇!士兵\n\n\n\n感谢您注册如果您收到此电子邮件,则您已成功创建新帐户。开始之前,请按照下面提供的说明进行操作:\n\n帐户详细信息:\n\n以下是您的网站帐户信息,您已获得临时密码,请返回mydomain.com/login.php并使用下面的密码登录并选择“更改密码”来更新您的帐户。\n\n\n邮箱地址:“.$to.”\士兵姓名:“.$soldier\u Name.”\n密码:“.$email\u password.”\n\n\n如果您在访问您的帐户时遇到任何困难,请通过以下地址与我们联系:support@mydomain.com. 此邮件是从未受监控的帐户发送的。将不会读取任何响应。\n\n从“.$ip=$\u服务器['REMOTE\u ADDR'];”在“.$date”上发出的请求;
$additional_headers=“From:$From\n提交至:$From\n内容类型:text/plain”;
邮件($to、$subject、$message、$additional_头);
$message=“您的注册已提交”;
}否则{
$message=“字段不能为空”;
}
}否则{
$message=“”;

}

这是一个简单的用例……只需重命名变量,就不会覆盖它们

$email_password = $_POST['password'];
$password = password_hash($email_password, PASSWORD_BCRYPT);
  • 现在,当您发送电子邮件时,只需使用
    $email\u password
    变量即可
  • 更新数据库时,只需使用
    $password
    变量

关于,您需要创建一个生成随机密码的函数:


@2Creative您是否已将其上载到您的主机?因为我的测试正在进行中。下面是它的说明菜单提示:未定义索引:C:\Program Files(x86)中的密码\Zend\Apache2\htdocs\MG\register.php第33行非常感谢Darren我觉得这与此有关我应该先来这里寻求真正的帮助……Darren发生的事情是我习惯了在代码生成软件中开发,现在所有的代码都贬值了,所以我购买了Zend studio和Zend server并深呼吸了一下但是需要像你这样的人用正确的知识引导他人朝着正确的方向前进,非常感谢。。。。。
$email_password = randomPassword(8);
$password = password_hash($email_password, PASSWORD_BCRYPT);