2013-04-17 32 views
0

我试图创建一个忘记的密码脚本,但是我被捕了一点。

的问题是,$query = sprintf("UPDATE用户SET密码= '%s' WHERE电子邮件= '$forgotpassword'", mysql_real_escape_string($newpassword));并不在现场“密码”更新数据。

'忘记'值正根据需要进行更新。再次,我知道脚本连接到数据库,因为忘记的字段根据需要更新为'1'。

继承人的代码:

//Generate a RANDOM MD5 Hash for a password 
$random_password=md5(uniqid(rand())); 

//Take the first 8 digits and use them as the password we intend to email the user 
$emailpassword=substr($random_password, 0, 8); 

//Encrypt MD5 format for the database 
$newpassword = md5($emailpassword); 

    // Make a safe query 
    $query = sprintf("UPDATE `users` SET `password` = '%s' 
         WHERE `email` = '$forgotpassword'", 
       mysql_real_escape_string($newpassword)); 

    $query = sprintf("UPDATE `users` SET `forgot` = '1' 
         WHERE `email` = '$forgotpassword'"); 

       mysql_query($query)or die('Could not update members: ' . mysql_error()); 

我知道这个版本的MySQL是贬值,但它就是这个项目必须使用。刚刚和我一起去那个。

干杯

+0

如果你被这个陈旧的界面卡住,使用'%s'来做你的转义并不是一个坏主意,但你应该一直使用它来清楚你正确地转义事物。 – tadman

回答

3

你不与第一次更新调用mysql_query($query),只有第二。

// Make a safe query 
$query = sprintf("UPDATE `users` SET `password` = '%s' 
        WHERE `email` = '$forgotpassword'", 
      mysql_real_escape_string($newpassword)); 

// NEED TO CALL mysql_query($query); HERE 

$query = sprintf("UPDATE `users` SET `forgot` = '1' 
        WHERE `email` = '$forgotpassword'"); 

mysql_query($query)or die('Could not update members: ' . mysql_error()); 
2

您正在撰写两个查询,但只执行一个。

+0

也许显示哪一个? – Kermit

+0

如果你仔细阅读代码,这是非常明显的。 – tadman

+0

也许OP的新处方眼镜尚未进入? – Kermit

0

也许密码没有更新,因为WHERE子句不匹配任何行...你确定你已经设置了电子邮件WHERE电子邮件= '$forgotpassword'