在我的用户信息更新表单上,我允许用户更新通行证和其他内容。如果他们不想更新表单中的密码,则将其留空,就像在字段中留空一样。在process页面上,如果该字段为空,我将从数据库(其md5)插入他们现有的密码,如果他们更改了密码,我希望输入新密码。下面是我尝试实现的方法,但无论如何它都是双md5-ing:
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
}发布于 2011-03-31 05:33:21
只是稍微修改一下你的代码:
$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
} 发布于 2011-03-31 05:28:02
因为md5会将空字符串转换为散列,所以$newpass永远不会为空。所以这个条件不会起作用: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
}发布于 2011-03-31 05:40:49
您的代码很奇怪,因为只有在设置了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);
}https://stackoverflow.com/questions/5492625
复制相似问题