-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列にある値は実際keyにはURLの変数の値と同じですが、何らかの理由で「PASSED」ではなく「FAIL」をエコーアウトしています。

私が間違っていることについての提案、私がやりたいことを行うためのより良い方法、または何か提案はありますか?

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

そしてもう2つのこと:

  • mysql_*関数は非推奨です
  • SQL インジェクションについて読むことを強くお勧めします。
于 2012-08-28T01:30:26.330 に答える
2

非推奨のmysql_*関数を使用するのではなく、PDO または mysqli と準備済みステートメントに切り替える必要があります。

ただし、問題は、リソースを送信された変数と比較していることです。

私の推測では、これ$regKeyは整数で$queryあり、mysql クエリの結果です。結果セットから行をフェッチし、その行の特定の値を と比較する必要があります$regKey

于 2012-08-28T01:30:01.350 に答える
1

間違っている場合は訂正してください。ただし、$query の結果はリソースですか? あなたはそれで何もしていません。

次のような単純な 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 に答える