验证确认密钥的问题

时间:2014-12-16 05:44:16

标签: php mysql mysqli

我无法验证确认电子邮件的链接。我可以向用户发送一个来自我的数据库的确认链接,就像这样的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字段中插入。

和  在我的confirm.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 results,而当用户点击其电子邮件中的确认链接时,链接的相同代码在数据库中!能告诉我为什么会这样吗?

由于

1 个答案:

答案 0 :(得分:1)

在查询中用单引号包装你的$ 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

这里,如果您看到单引号不查找变量。无论里面有什么&#39; &#39;被视为字符串并以此形式返回。

案例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'

此处由于查询在双引号内,因此读取该变量。但被认为是字符串,因为它用单引号封装。