Php 如何防止在更新表单上重复输入密码字段?
在我的用户信息更新表单上,我允许用户与其他内容一起更新通行证。如果他们不想更新表单中的密码,他们会将其留空,就像字段中的内容留空一样。在流程页面上,如果字段为空,我将从db(其md5)插入他们的现有密码,如果他们更改了密码,我希望输入新密码。下面是我用来尝试和实现这一点的方法,但不管怎样,它都是双重md5:Php 如何防止在更新表单上重复输入密码字段?,php,passwords,md5,Php,Passwords,Md5,在我的用户信息更新表单上,我允许用户与其他内容一起更新通行证。如果他们不想更新表单中的密码,他们会将其留空,就像字段中的内容留空一样。在流程页面上,如果字段为空,我将从db(其md5)插入他们的现有密码,如果他们更改了密码,我希望输入新密码。下面是我用来尝试和实现这一点的方法,但不管怎样,它都是双重md5: if (!get_magic_quotes_gpc()) { $newpass = mysql_escape_string($_POST['password']); $newp
if (!get_magic_quotes_gpc()) {
$newpass = mysql_escape_string($_POST['password']);
$newpass = md5($_POST['password']);
}
// If $dob is empty
if (empty($newpass)) {
$newpass = "$passis"; //$passis = the password stored in db which is md5
}
$newpass
将永远不会为空,因为md5将空字符串转换为哈希。所以这个条件不起作用:if(empty($newpass)){
相反,你必须这样做
if (empty($_POST['password'])) {
更新
if (!get_magic_quotes_gpc()) {
$newpass = mysql_escape_string($_POST['password']);
$newpass = md5($_POST['password']);
}
// If $dob is empty
if (empty($_POST['password'])) {
$newpass = "$passis"; //$passis = the password stored in db which is md5
}
只需对代码进行一点修改:
$newpass = $_POST['password'];
if (!get_magic_quotes_gpc()) {
$newpass = mysql_escape_string($newpass);
}
if(empty($newpass)) {
$newpass = "$passis"; //$passis = existing md5'd password already stored in db
}
else {
$newpass = md5($newpass); //$newpass = newly provided password needs to be md5'd before updating db
}
您的代码很奇怪,因为只有设置了magic_quotes_gpc指令时,它才会执行md5。
另一种想法是,空字符串的md5不是空字符串 下面是一个应该工作得更好的代码:
$newpass = isset($_POST['password']) ? $_POST['password'] : '';
if ($newpass=='') {
$newpass = $passis; // $passis = the password stored in db which is md5
} else {
if (get_magic_quotes_gpc()) $newpass = stripslashes($newpass); // take off slashes added by PHP if any
$newpass = md5($newpass);
}
我打赌
if(空($newpass))
从来都不是真的。为什么您经常分配$newpass
?为什么您甚至想用数据库中的密码填充它?如果您不想更新密码,请将其保留为空,不进行更新it@poke是的,但是如果他们想更新它,我怎么知道?如果他们提交的字段是空的,他们就不需要了不要更新它,所以不要这样做。如果里面有东西,就更新它。不需要将数据库中的值放入任何东西中。嘿……我仍然遇到同样的问题:这就是我正在做的:如果(空($\u POST['password']){$\u POST['password']=$passis;}是的,因为$\u POST
密码应该只在条件下使用,而不是用于分配。不要这样做:$\u POST['password']=$passis;
,你必须这样做:$newpass=$passis;
查看我的答案更新