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 "UL"를 입력하면, 오른쪽입니다) : http://i.imgur.com/G0JaXYY.png

문제는 때입니다 if (!ISSET($_POST['submit'])) {이 false가되면 해당 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

이 답변은 실제로 효과가있었습니다. 고맙습니다. (내가 할 수 있었다면 나는 upvote 줄 것이다.) – TheActualKid

+0

@TheActualKid 당신은 대답을 받아 들일 수있다. http : //meta.stackexchange.com/a/5235/** - 그것이 스택에서 어떻게 이루어 졌는지;) –