2011-07-04 4 views
0

그래서이 플래시 게임을 만들었고 모든 적절한 변수가 입력되었습니다. 사용자가 로그인했다면, mysql 데이터베이스에 변수 $ _SESSION [user]을 입력하여 사용자의 점수를 저장해야한다 (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

스크립트를 디버깅 할 때 실제로 오류보고를 활성화해야합니다. 그런 다음 여러 오류가 있음을 알게됩니다. 경고를 찾으십시오. 기본적으로''{$ _POST [ 'type']} ','{$ _POST [ 'g'}} ','{$ _POST [score]} '' '- 어쨌든 이것은 약간의 꼬마들에게 많은 재미를 가져다 줄 것입니다 데이터베이스 때문에 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] (인용 부호에주의). 그러나 큰 따옴표로 묶은 문자열에서이 작업을 수행하면 모든 베팅이 해제됩니다.

관련 문제