2013-03-22 3 views
0

관리자가 사용자 이름을 수동으로 설정할 때 스크립트가 작동했지만 이제는 사용자 이름을 ". $ _ SESSION [ 'Username']."로 설정해야합니다. 내 코드에 문제가 있습니다.

나는 다른 방식으로 설정하려고 시도했다. 그리고 더 많은 문제가 있거나 그 사용자 이름이 작동하지 않는다면 이제는 알아낼 수 없다.

내 코드는 간다 : 당신이 $ _SESSION 변수를 사용하기 전에 당신이 당신의 세션 코드의 이전 session_start();

콜이 호출해야

<?php 
include "connect.php"; 
include "head.php"; 
?> 

<?php 

$action = $_GET['action']; 
if($action == "fight"){ 
$checkfight = @mysql_fetch_array(@mysql_query("SELECT * FROM fights WHERE User=".$_SESSION['Username']."")); //Check if fight exist 
$monstername = $checkfight['monstername']; 
$monsterlevel = $checkfight['monsterlevel']; 
$monsterdice = $checkfight['monsterdice']; 
$monsterhp = $checkfight['monsterhp']; 
$monstermana = $checkfight['monstermana']; 
$monsterarmor = $checkfight['monsterarmor']; 
$monstermindmg = $checkfight['monstermindmg']; 
$monstermaxdmg = $checkfight['monstermaxdmg']; 

if($checkfight['User'] == 'Admin') { 

$selectuser = @mysql_fetch_array(@mysql_query("SELECT * FROM members WHERE Username=".$_SESSION['Username']."")); //loading the user 
$currently = $selectuser['Quest']; 
$userhp = $selectuser['Life']; 
$usermana = $selectuser['Mana']; 
$usermindmg = $selectuser['mindmg']; 
$usermaxdmg = $selectuser['maxdmg']; 
$userdice = $selectuser['dice']; 

$fightMonster = @mysql_fetch_array(@mysql_query("UPDATE fights SET Player1hp='$userhp', Player1mana='$usermana', Player1min='$usermindmg', Player1max='$usermaxdmg' WHERE User=".$_SESSION['Username']."")); 

} else { 

$selectuser = @mysql_fetch_array(@mysql_query("SELECT * FROM members WHERE Username=".$_SESSION['Username']."")); 
$currently = $selectuser['Quest']; 
$userhp = $selectuser['Life']; 
$usermana = $selectuser['Mana']; 
$usermindmg = $selectuser['mindmg']; 
$usermaxdmg = $selectuser['maxdmg']; 
$userdice = $selectuser['dice']; 

$MonsterID = $_GET['monster']; 
$selectMonster = @mysql_fetch_array(@mysql_query("SELECT * FROM monsters WHERE monsterID='$MonsterID'")); 
$monstername = $selectMonster['monstername']; 
$monsterlevel = $selectMonster['monsterlevel']; 
$monsterdice = $selectMonster['monsterdice']; 
$monsterhp = $selectMonster['monsterhp']; 
$monstermana = $selectMonster['monstermana']; 
$monsterarmor = $selectMonster['monsterarmor']; 
$monstermindmg = $selectMonster['monstermindmg']; 
$monstermaxdmg = $selectMonster['monstermaxdmg']; 

$savefight = @mysql_fetch_array(@mysql_query("INSERT INTO fights SET User=".$_SESSION['Username'].", Player1hp='$userhp', Player1mana='$usermana', Player1min='$usermindmg', Player1max='$usermaxdmg', monstername='$monstername', monsterlevel='$monsterlevel', monsterdice='$monsterdice', monsterhp='$monsterhp', monstermana='$monstermana', monsterarmor='$monsterarmor', monstermindmg='$monstermindmg', monstermaxdmg='$monstermaxdmg'")); 

} 

?> 


<div id="fightcontent"> 

<div id="fight1"> 

Health: <?php echo $userhp; ?> <br> 
Mana: <?php echo $selectuser['Mana'];?><br> 
Damage: <?php echo $selectuser['mindmg']; echo "-"; echo $selectuser['maxdmg'];?> 
<br> 
<br> 
Dice: <?php echo $userdice; ?> 
<br> 
Quick Slots (3) 

    </div> 
    <div id="fight2"> 

Health: <?php echo $monsterhp; ?> 
<br> 
<?php 
if($monstermana == "1") { 
echo "Mana: $monstermana"; 
} else {} 
?> 
<?php 
if($monsterarmor == "0") { 
} else { echo "Armor: $monsterarmor"; } 
?> 
Damage: <?php echo $monstermindmg; echo "-"; echo $monstermaxdmg;?> 
<br> 
<br> 
Dice: <?php echo $monsterdice; ?> 
<br> 
Spells/Quickslots 

    </div> 
    <div id="dice"> 

<?php 
if($_POST['submit']) { 
$selectuser = @mysql_fetch_array(@mysql_query("SELECT * FROM members WHERE Username=".$_SESSION['Username']."")); 
$userdice = $selectuser['dice']; 
$usermindmg = $selectuser['mindmg']; 
$usermaxdmg = $selectuser['maxdmg']; 


$MonsterID = $_GET['monster']; 
$selectMonster = @mysql_fetch_array(@mysql_query("SELECT * FROM monsters WHERE monsterID='$MonsterID'")); 
$monsterdice = $selectMonster['monsterdice']; 


?> 

<?php 
if($userdice == 1){ 
$player1roll1 = rand(1,6); 
$player1roll2 = 0; 
$player1roll3 = 0; 
}elseif($userdice == 2){ 
$player1roll1 = rand(1,6); 
$player1roll2 = rand(1,6); 
$player1roll3 = 0; 
}elseif($userdice == 3){ 
$player1roll1 = rand(1,6); 
$player1roll2 = rand(1,6); 
$player1roll3 = rand(1,6); 
} 
?> 


<?php 

if($monsterdice == 1){ 
$player2roll1 = rand(1,6); 
$player2roll2 = 0; 
$player2roll3 = 0; 
} elseif($monsterdice == 2){ 
$player2roll1 = rand(1,6); 
$player2roll2 = rand(1,6); 
$player2roll3 = 0; 
}elseif($monsterdice == 3){ 
$player2roll1 = rand(1,6); 
$player2roll2 = rand(1,6); 
$player2roll3 = rand(1,6); 
} 
?> 

<?php 


$player1sum = $player1roll1 + $player1roll2 + $player1roll3; 
$player2sum = $player2roll1 + $player2roll2 + $player2roll3; 

if($player1sum > $player2sum) { 
$playerdmg = rand($usermindmg,$usermaxdmg); 
$monsterhpnew = $monsterhp - $playerdmg; 
$fightMonster2 = @mysql_fetch_array(@mysql_query("UPDATE fights SET Player1hp='$userhp', Player1mana='$usermana', Player1min='$usermindmg', Player1max='$usermaxdmg', monsterdice='$monsterdice', monsterhp='$monsterhpnew', monstermana='$monstermana', monsterarmor='$monsterarmor' WHERE User=".$_SESSION['Username']."")); 

echo "You hit "; 
echo $monstername ; 
echo ", with" ; 
echo $playerdmg ; 
echo "damage. remaining health:"; 
echo $monsterhpnew; 
echo "<br>"; 

if($monsterhpnew < 1){ 
$updatefight = @mysql_fetch_array(@mysql_query("UPDATE members SET Fight=0 WHERE Username='$user'")); 
$deletefight = @mysql_fetch_array(@mysql_query("DELETE FROM fights WHERE User='$user'")); 
header("Location: quest.php?action=victory&ID=$currently"); 
echo "You killed him..."; 
} 


}elseif($player2sum > $player1sum) { 
echo "Player 2 won"; 
echo $player1sum ; 
echo $player2sum ; 
}else{ 
echo "Draw"; 
} 
echo '<img src="images/dice/'.$player1roll1.'.gif" />'; //echo the image for roll 1 of player 1 
echo '<img src="images/dice/'.$player1roll2.'.gif" />'; //echo the image for roll 2 of player 1 
echo '<img src="images/dice/'.$player1roll3.'.gif" />'; //echo the image for roll 2 of player 1 
echo " VS. "; 
echo '<img src="images/dice/'.$player2roll1.'.gif" />'; //echo the image for roll 1 of player 2 
echo '<img src="images/dice/'.$player2roll2.'.gif" />'; //echo the image for roll 2 of player 2 

}else{ 
?> 


<?php } ?> 

<form method="post"> 
<input type="submit" name="submit" value="Roll dice" /> 
</form> 

<?php } ?> 


</div></div> 
+3

1.'@ '를 사용하여 오류를 억제하지 마십시오. 2. mysql_ 함수의 사용을 중단하면 더 이상 사용되지 않습니다. 3. 바인드 된 매개 변수와 preparded 문을 사용하십시오. – Kermit

+5

$ _SESSION 배열로 작업하기 전에'session_start()'를 호출 했습니까? – aram90

답변

0

난 당신에게 액세스 권한을 제공 할 경우 파일의 맨 처음에 session_start() 호출이 볼 해달라고 $ _SESSION

0

당신은 또한 당신이 통과 또는 수집하려는 값 주위에 따옴표를 넣어 할 수 있습니다 당신은 SQL 쿼리 : Username='".$_SESSION."'" 또한 위에서 언급 한 모든 의견. :)

+0

그것은 심지어 말이되지 않는다. 이미 문자열 인 것을 둘러싼 따옴표를 추가하는 것은 의미가 없으며 $ _SESSION 변수가 어떻게 작동하는지 이해하지 못하는 것 같습니다. – Jonast92

+0

내 스크립트가 다시 작동하도록 해주셔서 감사합니다. 예, 세션을 시작하는 것을 잊었습니다! 새로운 문제로 다시 돌아와서 이미 다 답변을 보았습니다. : D (Username = ' ". $ _ SESSION."' ") 고마워. 그리고 너는 나를 마지막으로 보았을거야;) – Kingfox

0

세션 변수를 사용하려면 start the session해야합니다. 스크립트의 첫 번째 줄에 session_start()을 입력하기 만하면됩니다.

mysql을 사용하지 마십시오. deprecated입니다.

"string" . $var . "string"을 연결할 필요가 없으며 "string {$var} string" 대신 또는 prepared statements을 사용할 수 있습니다. PDO를 사용하면 다음과 같이 나타납니다.

$query = $db->prepare("SELECT column FROM table WHERE row1 = ?, row2 = ?"); 
$query->execute(array($var1, $var2)); 

이렇게하면 sql injection이 발생하지 않으며 코드가보다 깨끗 해집니다.

+0

수업을 가져 주셔서 감사합니다. – Kingfox

관련 문제