2011-07-04 4 views
0

私はこのフラッシュゲームを作って、すべての適切な変数を入力しました。ユーザーがログインしている場合は、変数$ _SESSION [user]をmysqlデータベースに入力してユーザーのスコアを格納する必要があります(SHOULD)。奇妙な理由のために、それはしません。私は$ _SESSION [user]変数を正しくエコーすることができますが、mysql DBにスローされるとNULL(0)を返します。すべての処理を行うコードは次のとおりです。私が間違って何も表示されない

<?php 
session_start(); 
?> 
<html> 
<?php 
include("../package.php");  //stuff for UI 

echo $_SESSION[user];   //this works 

if($_SESSION[user]){ 
mysql_query("INSERT INTO `DB`.`TABLE` (`user`,`type`,`game`,`score`) VALUES ('$_SESSION[user]', '$_POST[type]', '$_POST[g]', '$_POST[score]')"); 
?> 
    //Congratulations message in HTML 
<?php 
} 
else{ 
?> 
    //Tells you to login (the 'else' statement to if($_SESSION[user])) also in HTML 
<?php 
} 
?> 

....

+0

スクリプトをデバッグするときは、実際にエラー報告を有効にする必要があります。それからあなたはそこに複数のエラーがあることを知っています。警告を探してください。とにかくこれはいくつかの児童に多くの楽しい使い方をさせるでしょう(訳注:あなたのデータベースはSQLインジェクションのため - http://xkcd.com/327/ – hakre

+0

'echo $ _SESSION [user]; // this works'は最初のエラーを出すはずです(確かに../package.phpにはもっとエラーがあります)。 – hakre

+0

フラッシュゲームからのSQLインジェクション?そんなことがあるものか?私はそれらに入力するフィールドを与えませんでした... –

答えて

0

デバッグ目的のために、これにあなたのロジックを変更します。

$sql = <<<EOL 
INSERT INTO `DB`.`TABLE` (`user`,`type`,`game`,`score`) 
VALUES ('$_SESSION[user]', '$_POST[type]', '$_POST[g]', '$_POST[score]') 
EOL; 

$result = mysql_query($sql) or die("query: $sql\n\n" . mysql_error()); 

は、それはあなたに発生したの全文をあげますクエリ、およびMySQLが生成した正確なエラーメッセージです。クエリーが成功すると、物事は正常に続きます。エラーがあった場合は、その理由を伝えます。

ほとんどのエラーが原因あなたのセッション値の誤引用符にある:

PHPの礼儀正しく、あなたの$_SESSION[user]が(引用符に注意してください)$_SESSION['user']に変換します。しかし、二重引用符で囲んだ文字列の中からこれを行うと、すべてのベットがオフになります。

関連する問題