2016-10-07 8 views
0

アクティベーションリンクが有効か無効かをチェックしようとしていますが、アクティベーショントークンや電子メールが間違っていても常に私のコードから$ activated_messageを取得しています。私のSQL文や関数に何が問題なのですか?おかげMySQLのPHPログイン

<?php 
include("mysql_functions.php"); 

// Check if all fields are not empty. 
if (!empty($_GET['email']) && !empty($_GET['activation_token'])) { 

    // MySQL database select query. 
    $mysql_select_query = "SELECT * FROM Accounts WHERE email='" . $_GET['email'] . "' AND activation_token='" . $_GET['activation_token'] . "' AND activated='0' LIMIT 1"; 

    // Execute the MySQL database select query and check if POST password matches MySQL database hashed password. 
    if(mysql_execute_query($mysql_server, $mysql_username, $mysql_password, $mysql_database_name, $mysql_select_query, false)) { 
     // Valid activation link. 
     // MySQL database update query. 
     $mysql_update_query = "UPDATE Accounts SET activated='1' WHERE email='" . $_GET['email'] . "' AND activation_token='" . $_GET['activation_token'] . "' AND activated='0' LIMIT 1"; 

     // Execute the MySQL database update query to activate the account and check if it is successful. 
     if (mysql_execute_query($mysql_server, $mysql_username, $mysql_password, $mysql_database_name, $mysql_update_query, false)) { 
     // The account was successfully activated. 
      echo $activated_message; 
     } else { 
      echo $not_activated_message; 
     } 
    } else { 
     // Invalid activation link. 
     echo $invalid_activation_link; 
    } 
} else { 
    echo $not_activated_message; 
} 

// ------------------------ FUNCTION: MYSQL QUERY EXECUTOR ----------------------- 

// Function for executing MySQL queries. 
function mysql_execute_query($mysql_server, $mysql_username, $mysql_password, $mysql_database_name, $mysql_query, $return_mysql_query_result_boolean) { 

    // Create the MySQL database connection. 
    $mysql_database_connection = mysqli_connect($mysql_server, $mysql_username, $mysql_password, $mysql_database_name); 

    // Check if connected to MySQL database. 
    if ($mysql_database_connection) { 
     // Connected to the MySQL database. 

     // Execute the MySQL query. 
     if ($mysql_query_result = mysqli_query($mysql_database_connection, $mysql_query)) { 
      // MySQL query has executed successfully. 

      // Check if any data needs to be returned. 
      if ($return_mysql_query_result_boolean) { 
       // Get an associated array from the MySQL result. 
       $mysql_query_result = mysqli_fetch_assoc($mysql_query_result); 
      } 

      // Close the MySQL database connection. 
      mysqli_close($mysql_database_connection); 

      // Return the MySQL query result. 
      return $mysql_query_result; 

     } else { 
      // MySQL query has not executed successfully. 
      echo "Error: " . mysqli_error($mysql_database_connection); 
      return false; 
     } 

    } else { 
     // Could not connect to the MySQL database. 
     die("Error connecting to MySQL database: " . mysqli_connect_error()); 
     return false; 
    } 
} 

?>

+0

警告するmysql_query、は、mysql_fetch_array ..拡張子はPHP 5.5.0で非推奨された、そしてそれは、PHP 7.0.0で削除されました。代わりに、MySQLiまたはPDO_MySQL拡張を使用する必要があります。 – Melchizedek

+1

あなたが持っているSQL注入穴はもちろんですが。 –

+0

私はmysqliを使用していると思いましたか?私は、将来mysqli文を準備するために自分のコードをロールオーバーするつもりです。 – user1406186

答えて

1

問題はmysql_execute_queryは、常に特定のクエリが正しい場合TRUEに解決結果を返すという事実です。

selectステートメントの結果を読んで、クエリが機能しているかどうかではなく、そのロジックを基にしてください。言われて、あなたのコードが間違ってたくさんがあることが

  • ネストされた-IF構造は、あなたのメインのコードでは、
  • 非常に読みやすいかmaintanableではありませんあなたは、SQLインジェクション攻撃に対して開かれている、チェック各クエリのデータベースに接続するprepared statements
  • から、私はあなたに少し、幸運を助けた

希望不要、とコーディング幸せです!

0

ラインを確認してください:

if ($mysql_query_result = mysqli_query($mysql_database_connection, $mysql_query)) {

それは常にtrueを返しますので、あなたは関係なく、状態の常時起動のメッセージが表示されますとおり。

0

更新クエリを確認してください。 「活性化」フィールドを1に設定していて、クエリーの最後に再びゼロに設定すると、意図した結果が得られません。 mysql_connectなど

// MySQL database select query. 
    $mysql_select_query = "SELECT * FROM Accounts WHERE email='" . $_GET['email'] . "' AND activation_token='" . $_GET['activation_token'] . "' AND activated='0' LIMIT 1"; 

    // Execute the MySQL database select query and check if POST password matches MySQL database hashed password. 
    if(mysql_execute_query($mysql_server, $mysql_username, $mysql_password, $mysql_database_name, $mysql_select_query, false)) { 
     // Valid activation link. 
     // MySQL database update query. 
     $mysql_update_query = "UPDATE Accounts SET activated='1' WHERE email='" . $_GET['email'] . "' AND activation_token='" . $_GET['activation_token'] . "' AND activated='0' LIMIT 1"; 
関連する問題