为什么此代码生成失败?

时间:2012-08-28 01:22:53

标签: php

所以我有这段代码:

<?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变量中的值,但由于某种原因,它正在回显“失败“而不是”通过“。

关于我做错了什么的建议,做我想做的更好的方式或任何建议?

3 个答案:

答案 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_*函数已弃用
  • 我强烈建议您阅读有关SQL注入的内容。

答案 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 + =结果:)