所以我有这段代码:
<?php
if (!isset($_GET['email']) && !isset($_GET['key'])) {
echo 'NOT ALLOWED TO ACCESS PAGE';
}
if (isset($_GET['email']) && isset($_GET['key'])) {
$email = $_GET['email'];
$regKey = $_GET['key'];
$query = mysql_query("SELECT * FROM `users` WHERE `email`='$email' AND `regRandom`='$regKey'");
if ($query == $regKey) {
mysql_query("UPDATE `users` SET `activated`=1 WHERE `email`='$email'");
if (mysql_query("SELECT activated FROM users WHERE activated='1'")) {
echo file_get_contents("http://TheMegaHouse.com/pageContent/head.php");
echo file_get_contents("http://TheMegaHouse.com/pageContent/notLoggedIn/topNavBar.php");
echo file_get_contents("http://TheMegaHouse.com/pageContent/header.php");
echo 'PASSED';
footer();
} else {
activationFail();
}
} else if ($regKey !== $query) {
echo 'FAIL';
}
}
?>
问题在于,在我的数据库中,regRandom
列中的值实际上等于网址中key
变量中的值,但由于某种原因,它正在回显“失败“而不是”通过“。
关于我做错了什么的建议,做我想做的更好的方式或任何建议?
答案 0 :(得分:6)
请务必先阅读手册:
这行代码:
mysql_query("SELECT * FROM `users` WHERE `email`='$email' AND `regRandom`='$regKey'");
返回资源,而不是你想要的变量。
小修理:
list($regRandom) = mysql_fetch_row(mysql_query("SELECT regRandom FROM `users` WHERE `email`='$email' AND `regRandom`='$regKey'"));
if ($regRandom == $regKey) {
// magic
另外两件事:
mysql_*
函数已弃用答案 1 :(得分:2)
您不应该使用已弃用的mysql_*
函数,而是切换到PDO或mysqli和预处理语句。
但是,您遇到的问题是您正在将资源与已发送变量进行比较。
我的猜测是$regKey
是一个整数,$query
是mysql查询的结果。您需要从结果集中获取一行,并将该行中的特定值与$regKey
进行比较。
答案 2 :(得分:1)
如果我错了,请纠正我,但$查询结果是资源?你没有做任何事情。
我建议只做一个简单的mysql_num_rows()检查:
$query = mysql_query("SELECT * FROM `users` WHERE `email`='$email' AND `regRandom`='$regKey'");
if (mysql_num_rows($query) == 1) {
再次检查是没有意义的,因为您已经在检查SQL查询:)所以只需检查返回的行数。 0 =未找到,1 + =结果:)