我在验证确认电子邮件的链接时遇到问题。我可以从我的数据库以 HTML 电子邮件的形式向用户发送确认链接,如下所示
$msg = "
<a href=\"http://asite.ca/assets/functions/confirmation.php?key=$permissionCode\" target=\"_blank\">Click To Confirm</a>
";
$permissionCode
是这样生成的
$permissionCode = substr(md5(rand(1000, 9999999)), 0, 12);
我将其插入到confirm_code
字段中。
和 在我的确认.php 中我有
$key = $_Get["key"];
$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = $key";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "We Will Contact You Soon";
} else {
echo "0 results";
}
但是当用户单击电子邮件中的确认链接时,我得到 0 结果
,而数据库中的链接代码相同!您能告诉我为什么会发生这种情况吗?
谢谢
最佳答案
在查询中用单引号将 $key 括起来
$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = '$key'";
按照评论中的要求,请参阅解释......
案例1:
$key =substr(md5(rand(1000, 9999999)), 0, 12);
$sql = 'SELECT * FROM `contact_request` WHERE `confirm_code` = $key';
echo $sql;
输出为
SELECT * FROM `contact_request` WHERE `confirm_code` = $key
这里如果你看到单引号并不查找变量。 ' ' 内的任何内容都被视为字符串并按原样返回。
情况2:
$key =substr(md5(rand(1000, 9999999)), 0, 12);
$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = $key";
echo $sql;
输出为
SELECT * FROM `contact_request` WHERE `confirm_code` = dcd9c750bab0
这里由于查询位于双引号内,因此读取该变量。但被视为 int。
情况3:
$key =substr(md5(rand(1000, 9999999)), 0, 12);
$sql = "SELECT * FROM `contact_request` WHERE `confirm_code` = '$key'";
echo $sql;
输出为
SELECT * FROM `contact_request` WHERE `confirm_code` = 'fd7c159e29c6'
这里由于查询位于双引号内,因此读取该变量。但被视为字符串,因为它用单引号封装。
关于php - 验证确认密码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498302/