2014-09-25 2 views
0

У меня есть код, который должен обновлять базу данных в соответствии с некоторыми значениями. Это игра, в моей игре у меня есть «атака» и «защита». У меня также есть ранги (называемые «playerrank» в базе данных). Я хочу, чтобы ранг изменился в соответствии с тем, насколько «атака» и «защита» у игрока. Звучит просто, не так ли? Ну это не так :(для меня все равно ..Обновить базу данных в соответствии со значением

Вот что я имею в виду

Атака между 1 и 1000, ранг 1 Атака между 1001 и 2000 годами, ранг 2 и т.д.

Проблема заключается в том что ранг не остается в 1 независимо от того, сколько атака/защита у меня есть, и я не получаю сообщение об ошибке!

Вот соответствующий код

if ($attack AND $defense >1 && $attack AND $defense < 1000){ 
$update_rank = mysqli_query($con,"UPDATE stats SET stats.playerrank = 1 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >1001 && $attack AND $defense < 2000){ 
$update_rank2 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 2 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >2001 && $attack AND $defense < 3000){ 
$update_rank6 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 3 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >3001 && $attack AND $defense < 4000){ 
$update_rank5 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 4 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >4001 && $attack AND $defense < 5000){ 
$update_rank4 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 5 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >5001 && $attack AND $defense < 6000){ 
$update_rank3 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 6 WHERE stats.id=$id4"); 

} 

Вот полный код

<?php 
include("connect.php"); 
include("header.php"); 
$username = $_SESSION['userlogin']; 
$getattack = "SELECT stats.id, stats.attack, users.id, users.username FROM stats, users WHERE users.username = '$username' AND stats.id = users.id"; 
$getdefense = "SELECT stats.id, stats.defense, users.id, users.username FROM stats, users WHERE  users.username = '$username' AND stats.id = users.id"; 
$gotattack = mysqli_query($con,$getattack); 
$gotdefense = mysqli_query($con,$getdefense); 
$attack = mysqli_fetch_assoc($gotattack); 
$defense = mysqli_fetch_assoc($gotdefense); 

$rankstatsget = "SELECT stats.id, stats.playerrank, users.id, users.username FROM stats, users WHERE   users.username = '$username' AND stats.id = users.id"; 
$rankstatsgot = mysqli_query($con,$rankstatsget); 

$id_get = mysqli_query($con,"SELECT stats.id,users.id, users.username FROM stats, users WHERE  users.username = '$username' AND stats.id = users.id"); 
$gotid = mysqli_fetch_array($id_get); 
$id4 = $gotid["id"]; 

while($row = mysqli_fetch_array($rankstatsgot, MYSQL_ASSOC)) 
{ 
echo "Current Rank: {$row['playerrank']} <br> ". 

    "--------------------------------<br>"; 
} 

if ($attack AND $defense >1 && $attack AND $defense < 1000){ 
$update_rank = mysqli_query($con,"UPDATE stats SET stats.playerrank = 1 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >1001 && $attack AND $defense < 2000){ 
$update_rank2 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 2 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >2001 && $attack AND $defense < 3000){ 
$update_rank6 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 3 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >3001 && $attack AND $defense < 4000){ 
$update_rank5 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 4 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >4001 && $attack AND $defense < 5000){ 
$update_rank4 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 5 WHERE stats.id=$id4"); 

}elseif ($attack AND $defense >5001 && $attack AND $defense < 6000){ 
$update_rank3 = mysqli_query($con,"UPDATE stats SET stats.playerrank = 6 WHERE stats.id=$id4"); 

} 

Echo "Your rank is up to date!"; 

?> 
+0

Почему смесь и матч 'AND' и' && 'в' если ($ атаки и $ защита> 1 && $ attack И $ защита <1000) {'и что именно должна проверять логика? потому что 'AND' и' && 'являются операциями сравнения Boolean .... вы имеете в виду' if ($ attack + $ defense> 1 && $ attack + $ defense <1000) {'? –

+0

@MarkBaker предполагается, что атака и защита превышают 1, но также ниже 1000, после этого строка обновляет ранг до 1. Пробовал переходить на вашу версию и не работал :( –

+0

Вы хотите увидеть, больше 1, а защита больше 1? .... слово И имеет очень специфическое значение в вычислительных терминах, и вы используете его очень неоднозначно –

ответ

0

найденную неполадку СЕБЕ

мне нужно было поставить

if ($attack['attack'] + $defense['defense'] >1 && $attack['attack'] + $defense['defense'] < 1000){ 
$update_rank = mysqli_query($con,"UPDATE stats SET stats.playerrank = 1 WHERE stats.id=$id4"); 

Вместо того

if ($attack AND $defense >1 && $attack AND $defense < 1000){ 
$update_rank = mysqli_query($con,"UPDATE stats SET stats.playerrank = 1 WHERE stats.id=$id4"); 

Поскольку запрос не возвращал правильный тип ответа на заявление IF

Noob ошибку:/

0

Вы должны указать больше, то меньше, то ен значение в переменной

if ($attack >1 AND $defense >1 && $attack < 1000 AND $defense < 1000){ 
$update_rank = mysqli_query($con,"UPDATE stats SET stats.playerrank = 1 WHERE stats.id=$id4"); 

и т.д ...

или

if (($attack >1 OR $defense >1) && ($attack < 1000 OR $defense < 1000)){ 
$update_rank = mysqli_query($con,"UPDATE stats SET stats.playerrank = 1 WHERE stats.id=$id4"); 
0

You смешивание AND и && без скобок. Эти два оператора имеют разные binding precedence, поэтому ваши тесты if(), несомненно, выполняются иначе, чем вы думаете.

например.

$attack AND $defense >1 && $attack AND $defense < 1000 

будет разобрано как

$attack && (($defense > 1) && $attack) && ($defense < 1000) 
+0

Я вижу, не знал этого! Я сделаю изменения и посмотрим, работает ли он –

+0

if (($ attack> 1 AND $ defense> 1) && ($ attack <1000 И $ защита <1000)) {- правильно?не работает :( –

+0

ну, какие значения вы там кормите? –