-1

所以我有这个代码:

<?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列中的值实际上等于keyurl 中变量中的值,但由于某种原因,它回显的是“FAIL”而不是“PASSED”。

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

4

3 回答 3

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 注入的内容。
于 2012-08-28T01:30:26.330 回答
2

您不应该使用已弃用的mysql_*函数,而是切换到 PDO 或 mysqli 和准备好的语句。

但是,您遇到的问题是您正在将资源与传入的变量进行比较。

我的猜测是这$regKey是一个整数,$query是 mysql 查询的结果。您需要从结果集中获取一行并将该行中的特定值与您的$regKey.

于 2012-08-28T01:30:01.350 回答
1

如果我错了,请纠正我,但 $query results 是一种资源?你没有对它做任何事情。

我建议只做一个简单的 mysql_num_rows() 检查,如下所示:

$query      = mysql_query("SELECT * FROM `users` WHERE `email`='$email' AND `regRandom`='$regKey'");

if (mysql_num_rows($query) == 1) {

再次检查毫无意义,因为您已经在检查 SQL 查询:) 所以只需检查返回的行数。0 = 未找到,1+ = 结果 :)

于 2012-08-28T01:31:08.070 回答