2013-03-22 6 views
0

Мой скрипт работал, когда я просто установил имя пользователя в Admin, но теперь мне нужно установить имя пользователя для «. $ _ SESSION ['Username'].", И это создает определенные проблемы для моего кода.

Я попытался установить его по-разному, и теперь я не могу выяснить, есть ли больше проблем или если это просто имя пользователя, которое не работает.

Мой код идет:

<?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. Используйте привязанные параметры и предписанные операторы. – Kermit

+5

Вы уверены, что вызывали 'session_start()' перед работой с массивом $ _SESSION? – aram90

ответ

1

Прежде чем использовать переменную $ _SESSION необходимо вызвать session_start();

Зов это до какой-либо из вашего кода сеанса. Хотя я бы рекомендовал прочитать немного больше для OO PHP и некоторых фреймворков.

http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/

Это может быть хорошим началом для вас, чтобы помочь вашей будущей карьере программирования.

+0

Спасибо, ты прав .. я полностью забыл ту часть – Kingfox

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

Смежные вопросы