2016-04-13 4 views
0

Это игра угадывающего номера, я хочу, чтобы страница отслеживала победы, потери и итоги и% выигрыша с помощью сеансов. Я хочу сбросить все, когда я нажимаю «reset», но когда я нажимаю «reset», все равно нулю, и появится предупреждение «деление на ноль». Как мне изменить этот php, чтобы он выполнял только расчет% при игре, но не когда он сбрасывается?избавиться от предупреждения «деления на ноль» в сеансах

<?php 
// initialize wins and losses 
if ($_SESSION['wins'] == "") { 
    $_SESSION['wins'] = 0; 
} 
if ($_SESSION['losses'] == "") { 
    $_SESSION['losses'] = 0; 
} 

echo "<h1>PHP SESSIONS</h1>"; 

if ($_GET['reset'] == "yes") { 
    $_SESSION['wins'] = 0; 
    $_SESSION['losses'] = 0; 
    $_SESSION['total'] = 0; 
    echo "<p>The game has been reset.</p>"; 
} else { 
    $randNum = rand(1,5); 
    echo "<p>The random number is <b>" . $randNum . "</b></p>"; 
    if ($randNum == 3) { 
     echo "<p>The number equalled 3. YOU WIN!</p>"; 
     $_SESSION['wins'] = $_SESSION['wins'] + 1; 
    } else { 
     echo "<p>The number did NOT equal 3. YOU LOSE!</p>"; 
     $_SESSION['losses'] = $_SESSION['losses'] + 1; 
    } 
    $_SESSION['total'] = $_SESSION['total'] + 1; 
} 
$_SESSION ['percentage'] = (($_SESSION['wins'])/($_SESSION['total'])) * 100 ; 

echo "<p>WINS: " . $_SESSION['wins'] . " | LOSSES: " . $_SESSION['losses'] . "| TOTAL: " . $_SESSION['total'] . "</p>"; 
echo "<p>Percentage of Winning:  ". $_SESSION ['percentage'] . " % </p>" 
?> 

<a href="playing-with-sessions.php" class="button"> ROLL AGAIN :) </a> 
<a href="playing-with-sessions.php?reset=yes" class="button"> RESET :) </a> 
+0

В какой строке вы получаете сообщение об ошибке? –

+0

Добавьте эту строку вверху вашего php-файла: 'error_reporting (E_ERROR);' и вы не увидите никаких ошибок. (Это не лучшее решение, хотя ...) –

+0

Вы можете избавиться от ошибки, исправив код, который пытается делить на ноль. –

ответ

1

Перемещение вверх линию, в которой вы разделяющую:

$_SESSION ['percentage'] = (($_SESSION['wins'])/($_SESSION['total'])) * 100 ; 

поместить его в другое кронштейне. Как только я переформатировал ваш код, было легко увидеть проблему. Я бы посоветовал всегда использовать правильный отступ. :)

+0

плюс некоторые для ссылки на правильный отступ. :-) – Martin

1

Когда $_GET['reset'] == 'yes' выполнено, вы устанавливаете $_SESSION['total'] = 0.

Затем вы разделив $_SESSION['wins'] на 0 значной $_SESSION['total'] в следующей строке (которая выполняется независимо от текущего состояния $_SESSION['total']:

$_SESSION ['percentage'] = (($_SESSION['wins'])/($_SESSION['total'])) * 100 ; 

Это легче увидеть, что происходит, когда код отформатировано Посмотрите:.

if ($_GET['reset'] == "yes") { // reset called 
    $_SESSION['wins'] = 0; 
    $_SESSION['losses'] = 0; 
    $_SESSION['total'] = 0; // set to zero(0) 
    echo "<p>The game has been reset.</p>"; 
} else { 
    $randNum = rand(1,5); 
    echo "<p>The random number is <b>" . $randNum . "</b></p>"; 
    if ($randNum == 3) { 
     echo "<p>The number equalled 3. YOU WIN!</p>"; 
     $_SESSION['wins'] = $_SESSION['wins'] + 1; 
    } else { 
     echo "<p>The number did NOT equal 3. YOU LOSE!</p>"; 
     $_SESSION['losses'] = $_SESSION['losses'] + 1; 
    } 
    $_SESSION['total'] = $_SESSION['total'] + 1; 
} 
$_SESSION ['percentage'] = (($_SESSION['wins'])/($_SESSION['total'])) * 100; // chance that $_SESSION['total'] is zero(0) 

Итак, еще раз, когда вы вызываете сброс действия, $_SESSION['total'] дается в lue of int(0). Позже в сценарии вы затем разделите на int(0), что даст вам ошибку. Имеют смысл?

Итак, сначала вам необходимо убедиться, что $_SESSION['total'] больше, чем 0 перед тем, как делить его.

+0

Ударьте вас секундами! – JakeParis

+0

Вот что происходит, когда я пишу романы lol – Marcus

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