我正在创建重置密码程序。这样:
1-向用户发送重置电子邮件(忘记了密码),此电子邮件中包含指向此地址的链接:
http://www.example.com/resetpassword.php?userid=1b2798bad6ee465d967cdb71ced504f7
参数[userid]的值由此PHP代码生成:
<?php
md5($row_Recordset2['userID'].date('d-m-Y'));
?>
注意:我这样做是为了获得一个唯一的参数值,包含:真实用户ID的MD5哈希+当前日期(连接),为什么?因此,电子邮件中的链接仅适用于当前日期。我不希望该链接在第二天起作用。
2-当此人点击上述链接时,他/她将被带到页面[resetpassword.php]
3-在[resetpassword.php]页面中我有这段代码:
$colname_Recordset1 = "-1";
if (isset($_GET['userid'])) {
$colname_Recordset1 = $_GET['userid'];
}
mysql_select_db($database_aaa_database, $aaa_database);
$query_Recordset1 = sprintf("SELECT * FROM users WHERE md5(CONCAT(userID,
DATE_FORMAT(NOW(),'%d-%m-%Y'))) = %s ", GetSQLValueString($colname_Recordset1,
"text"));
$Recordset1 = mysql_query($query_Recordset1, $aaa_database) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
SELECT语句返回[查询为空] ...问题是什么以及如何解决?
我手动测试了这个MySQL语句:
SELECT userFirstName, md5(CONCAT(userID, DATE_FORMAT(NOW(),'%d-%m-%Y'))) from users
它返回许多行,其中一行是这样的:
Sam 1b2798bad6ee465d967cdb71ced504f7
所以,:
md5(CONCAT(userID, DATE_FORMAT(NOW(),'%d-%m-%Y')))
工作正常,它返回PHP代码生成的完全相同的值:
<?php
md5($row_Recordset2['userID'].date('d-m-Y'));
?>
PHP给:1b2798bad6ee465d967cdb71ced504f7
MySQL给出:1b2798bad6ee465d967cdb71ced504f7
但是这个:
md5(CONCAT(userID, DATE_FORMAT(NOW(),'%d-%m-%Y')))
似乎在WHERE子句中没有工作:
sprintf("SELECT * FROM users WHERE md5(CONCAT(userID,
DATE_FORMAT(NOW(),'%d-%m-%Y'))) = %s ", GetSQLValueString($colname_Recordset1,
"text"));
顺便说一下,我正在使用Dreamweaver。
我不知道如何解决这个问题。任何帮助将受到高度赞赏。