2016-08-16 5 views
0

私はActionScript 3.0でFlashでゲームを作成しています。確認するためにデータをPHPに渡しています。ゲームの結果を挿入し、リクエストをAPI URLに送信します。PHPからPHPに失敗した理由クエリとcURLを挿入することがあるのはなぜですか?

しかし、いくつかの挿入クエリが失敗しました。いくつかの失敗したcURLがあります。それはなぜですか?

私はRDSデータベース(t2.Medium)を使用しています。

がここにActionScriptで私のコードです:

var variables:URLVariables = new URLVariables(); 

var varSend:URLRequest = new URLRequest(link + "parse.php"); 
varSend.method = URLRequestMethod.POST; 
varSend.data = variables; 

// Build the varLoader variable 

var varLoader:URLLoader = new URLLoader; 
varLoader.dataFormat = URLLoaderDataFormat.BINARY; 

//varLoader.addEventListener(Event.COMPLETE, completeHandler); 

variables.apikey = "<API KEY>"; 
variables.username = <FETCH FROM JS> 
variables.side = "Good"; 



variables.player1 = player1; 
variables.player2 = player2; 
variables.player3 = player3; 
variables.player4 = player4; 
variables.player5 = player5; 

variables.jackpot1 = jackpot1; 
variables.jackpot2 = jackpot2; 
variables.jackpot3 = jackpot3; 
variables.jackpot4 = jackpot4; 
variables.jackpot5 = jackpot5; 
variables.sendRequest = "parse"; 

// Send the data to the php file 

varLoader.load(varSend); 

ここに私のコードはPHPである:

<?php 

if ($_POST['sendRequest'] == "parse") { 


$datetime = date('Y-m-d H:i:s'); 
$datetime1 = date('Y-m-d'); 

$apikey = $_POST['apikey']; 

$promocode = "TestGame"; 
$username = $_POST['username']; 

$alignment = $_POST['side']; 
$player1 = $_POST['player1']; 
$player2 = $_POST['player2']; 
$player3 = $_POST['player3']; 
$player4 = $_POST['player4']; 
$player5 = $_POST['player5']; 
$player = $player1 + $player2 + $player3 + $player4 + $player5; 


$jackpot1 = $_POST['jackpot1']; 
$jackpot2 = $_POST['jackpot2']; 
$jackpot3 = $_POST['jackpot3']; 
$jackpot4 = $_POST['jackpot4']; 
$jackpot5 = $_POST['jackpot5']; 
$jackpot = $jackpot1 + $jackpot2 + $jackpot3 + $jackpot4 + $jackpot5; 

$db_servername = "<RDS Host>"; 
$db_username = "<Database User>"; 
$db_password = "<DB Password>"; 
$db_name = "<DB Name>"; 


$connection = mysqli_connect($db_servername, $db_username, $db_password, $db_name); 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$check_sql = "SELECT * FROM tblpoints WHERE username = '$username' AND date(datetime) = '$datetime1'"; 
$result = mysqli_query($connection,$check_sql); 
if (!$result) { 
    echo "Error in checking record: " + mysqli_error($connection); 
    exit; 
} 

$points = $player; 
$betcondition = $points * 10; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); 

curl_setopt($ch,CURLOPT_URL, "<API URL>".$points."/".$betcondition."/".$username); 
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch,CURLOPT_POST,1); 


curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); 

$result = curl_exec($ch); 

if(curl_errno($ch)) { 
    print "Error: " . curl_error($ch); 
} else { 
    curl_close($ch); 
} 

$sql = "INSERT INTO tblpoints (username, alignment, player_points, player_points1, player_points2, player_points3, player_points4, player_points5, jackpot_points, jackpot_points1, jackpot_points2, jackpot_points3, jackpot_points4, jackpot_points5, datetime, status) VALUES ('$username', '$alignment', '$player', '$player1', '$player2', '$player3', '$player4', '$player5', '$jackpot', '$jackpot1', '$jackpot2', '$jackpot3', '$jackpot4', '$jackpot5', '$datetime', '$status')"; 
mysqli_query($connection,$sql); 
mysqli_close($connection); 
} 
?> 

注:ここでは、ユーザーからの直接入力ではありません。

+0

これには深刻なSQLインジェクションの脆弱性が存在します。 – halfer

+0

@halferこんにちは、どういう意味ですか?私はちょうど私のスキルを向上させようとしているPHPとアクションスクリプトの初心者です:) – POGI

+0

これはあなたがセキュリティ上の問題を抱えていることを意味します、もっと読むには[read this](http://stackoverflow.com/q/60174/472495) 。なぜデータベースクエリが失敗するかについては、失敗した理由を見つけられなかったときに '$ check_sql'を記録しなければなりません。確かに、 'datetime'が有効な日付でないか、' $ username'にアポストロフィが含まれていれば、データベースエラーで失敗します。 – halfer

答えて

0

実際に自分のコードで実際に起こっていることを実際に把握しました。私が作成したActionscript関数は、PHPを処理するのが遅れていました。

ユーザーはブラウザウィンドウを閉じてスクリプトを終了するまで待つ必要がありません。だから、私がやったことは、AS機能が完了した後、Loading Messageを表示して非表示にすることでした。

関連する問題