2014-10-12 3 views
0

Я очень новичок в PHP. Для назначения класса нам нужно сделать игру Tic Tac Toe. До сих пор это мой код:

<html> 
<body> 
<h1>Tic Tac Toe</h1> 

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <input type="text" name="input"> 
    <input type="submit" name="submit"> 
</form> 

<?php 
//Display Determinations 

//Top Left 
if (!ISSET($_POST['submit'])) { 
    $GLOBALS['ul_truefalse'] = true; 
    $GLOBALS['turn'] = 1; 
    $this_happened = "!isset"; 
} 
if (ISSET($_POST['submit'])) { 
    $GLOBALS['turn'] = $GLOBALS['turn'] + 1; 
    if ($GLOBALS['turn'] == 3) { 
     $GLOBALS['turn'] = 1; 
    } 
} 
if ($GLOBALS['ul_truefalse'] == true) { 
    $GLOBALS['ul_display'] = "UL"; 
    if (ISSET($_POST['input']) and $_POST['input'] == "ul" and $GLOBALS['turn'] == 1) { 
     $GLOBALS['ul_display'] = "X"; 
     $GLOBALS['ul_truefalse'] = false; 
     $this_happened = "p1 ul"; 
    } 
    if (ISSET($_POST['input']) and $_POST['input'] == "ul" and $GLOBALS['turn'] == 2) { 
     $GLOBALS['ul_display'] = "O"; 
     $GLOBALS['ul_truefalse'] = false; 
    } 
} 

echo "Player " . $GLOBALS['turn'] . ", it's your turn!"; 
echo $this_happened; 
?> 


<table border="1" width="40%"> 
    <tr> 
     <td><?php echo $GLOBALS['ul_display'] ?></td> 
     <td></td> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 
</table> 



</body> 
</html> 

Вот выход (левая сторона при загрузке страницы, с правой стороны, когда игрок 1 входит в «ул»): http://i.imgur.com/G0JaXYY.png

Проблема заключается в том, когда if (!ISSET($_POST['submit'])) { становится ложным, строки, определенные в инструкции if, теряют свои значения, вызывая ошибки неопределенной переменной. Я попытался сохранить их в скрытой форме, но это не исправить проблему. Я отправил свой код человеку с форума, и он сказал, что это сработало. Почему это происходит? Как это исправить?

+4

PHP не имеет persistive глобального ВАРА. Они всегда заполняются только для текущего запроса страницы. Вы ищете сеансы. – mario

ответ

-1

Попробуйте это:

<html> 
<body> 
<h1>Tic Tac Toe</h1> 

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <input type="text" name="input"> 
    <input type="submit" name="submit"> 
</form> 

<?php 
if(!session_id()) 
    session_start(); 

//Display Determinations 

//Top Left 
if (!ISSET($_POST['submit'])) { 
    $_SESSION['ul_truefalse'] = true; 
    $_SESSION['turn'] = 1; 
    $this_happened = "!isset"; 
} 
if (ISSET($_POST['submit'])) { 
    $_SESSION['turn'] = $_SESSION['turn'] + 1; 
    if ($_SESSION['turn'] == 3) { 
     $_SESSION['turn'] = 1; 
    } 
} 
if ($_SESSION['ul_truefalse'] == true) { 
    $_SESSION['ul_display'] = "UL"; 
    if (ISSET($_POST['input']) and $_POST['input'] == "ul" and $_SESSION['turn'] == 1) { 
     $_SESSION['ul_display'] = "X"; 
     $_SESSION['ul_truefalse'] = false; 
     $this_happened = "p1 ul"; 
    } 
    if (ISSET($_POST['input']) and $_POST['input'] == "ul" and $_SESSION['turn'] == 2) { 
     $_SESSION['ul_display'] = "O"; 
     $_SESSION['ul_truefalse'] = false; 
    } 
} 

echo "Player " . $_SESSION['turn'] . ", it's your turn!"; 
echo $this_happened; 
?> 


<table border="1" width="40%"> 
    <tr> 
     <td><?php echo $_SESSION['ul_display'] ?></td> 
     <td></td> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 
</table> 



</body> 
</html> 
+1

Это не сработает. Вам нужно вызвать 'session_start()' перед любым выходом – Mike

+0

Этот ответ действительно сработал. Спасибо. (Я бы дал вам повышение, если бы смог) – TheActualKid

+0

@TheActualKid Вы принимаете ответ ** http: //meta.stackexchange.com/a/5235/** - вот как это делается на Stack;) –

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