업데이트 : 해결 : 이 모든 후 나는 업데이트 아약스에서 내 코드의 이전 버전을 호출하고 있음을 알게되었습니다. 'boardUpdate.php'대신 'boardControl.php'이것들은 프로그래밍을 재미있게 만드는 종류의 실수입니다.PHP 세션이 JQuery Ajax와 작동하지 않습니까?
나는 브라우저 gomoku 게임을 쓰고 있습니다. 플레이어가 조각을 재생할 수있게 해주는 아약스 선언문이 있습니다.
$(document).ready(function() {
$("td").live('click',function(){
var value = $(this).attr('id');
$.get('includes/boardControl.php',{play: value, bid: bid});
});
});
값 = 보드 광장 위치
입찰 = 보드 ID
플레이어 식별을위한 사용자 로그인을 만들기 전에 서버 측 PHP는 임시 해결책을했다. 그것은 어떤 플레이어가 그들을 만들 것인지를 아는 대신 클릭했을 때 사각형의 조각 상태를 회전시킵니다.
로그인 항목을 만든 후 플레이어 ID에 대한 세션 변수를 설정합니다. 나는 아약스 요청을하는 동안 PHP에서 세션 ID를 읽고 거기에서 어떤 플레이어인지 알아 내려고했다. 내가 그들을주기를 만들기 위해 코드를 삭제 한 후에도
session_start();
... 어떤 이유
$playerId = $_SESSION['char'];
$Query=("SELECT p1, p2 FROM board WHERE bid=$bid");
$Result=mysql_query($Query);
$p1 = mysql_result($Result,0,"p1");
$p2 = mysql_result($Result,0,"p2");
$newPiece = 0; //*default no player
if($playerId == $p1)
$newPiece = 1;
if($playerId == $p2)
$newPiece = 2;
나는 전체 웹 응용 프로그램을 실행하지만 사이클 여전히 조각. 로그인 한 후 브라우저에 수동으로 PHP 페이지를로드하면 데이터베이스를 올바르게 수정 (해당 플레이어에만 속한 부분 만 재생)하고 정확한 결과를 출력합니다.
Ajax와 함께 사용하면 세션이 이월되지 않는 것 같습니다. 그러나 Google 검색은 세션이 Ajax에서 작동 함을 알려줍니다.
업데이트 : 추가 정보를 제공하려고합니다.
로깅이 올바르게 작동합니다. 내 ID가 인식되고 내가 올바르게 검색했는지 확인하기 위해 보드 옆에 을 인쇄했습니다.
ajax 요청은 보드를 업데이트합니다. 전달 된 값은 이고 방화 광섬유의 콘솔로 확인되었습니다. 그러나 플레이어 대신에 조각을 넣는 대신에 조각에 속합니다. 상태 (0,1,2).
- 수동 boardUpdate.php를 탐색하고 echo'ed 응답 에서 본 결과 아약스로부터 송신 동일한 값으로 바꾸어 대응 조각이 의도대로 마다 재생되는 것을 나타낸다.
Firefox를 새로로드 한 후 내 노트북에서와 동일한 결과가 나타납니다.
수동으로 boardUpdate로 이동합니다.PHP는 에 로그인하지 않고 수동으로 보드 을 그대로 두십시오 (사용자가 세션에서 을 찾지 못한 경우).
나는 두 번 그 으로 session_start() 체크 PHP 파일 에 두 번 세션 ID를 변수를 확인했습니다.
이 추가 정보가 도움이 되길 바랍니다. 아이디어가 부족합니다. 전체 코드를로드해야합니까?
업데이트 2 :
화재 버그에서 아약스 responce를 확인한 후 나는 '놀이'요청이 결과를 얻을하지 않습니다 실현하고, 이사회는 다음 '갱신'까지 업데이트되지 않습니다. 나는 아직도 이것을 조사하고있다. 그러나 나는 당신을 위해 그것을 여기에서도 게시 할 것이다.
boardUpdate.php 주목할만한 곳은 다음과 같습니다 새로 고침위원회 (LINE6) 장소 조각 (line20) 기능 boardUpdate ($ turnCount) (line63가)
<?php
session_start();
require '../../omok/dbConnect.php';
//*** Refresh Board ***
if(isset($_GET['update']))
{
$bid = $_GET['bid'];
$Query=("SELECT turn FROM board WHERE bid=$bid");
$Result=mysql_query($Query);
$turnCount=mysql_result($Result,0,"turn");
if($_GET['turnCount'] < $turnCount) //** Turn increased
{
boardUpdate($turnCount);
}
}
//*** Place Piece ***
if(isset($_GET['play'])) // turn order? player detect?
{
$squareID = $_GET['play'];
$bid = $_GET['bid'];
$Query=("SELECT turn, boardstate FROM board WHERE bid=$bid");
$Result=mysql_query($Query);
$turnCount=mysql_result($Result,0,"turn");
$boardState=mysql_result($Result,0,"boardstate");
$turnCount++;
$playerId = $_SESSION['char'];
$Query=("SELECT p1, p2 FROM board WHERE bid=$bid");
$Result=mysql_query($Query);
$p1 = mysql_result($Result,0,"p1");
$p2 = mysql_result($Result,0,"p2");
$newPiece = 0; //*default no player
if($playerId == $p1)
$newPiece = 1;
if($playerId == $p2)
$newPiece = 2;
// if($newPiece != 0)
// {
$oldPiece = getBoardSpot($squareID, $bid);
$oldLetter = $boardState{floor($squareID/3)};
$slot = $squareID%3;
//***function updateCode($old, $new, $current, $slot)***
$newLetter = updateCode($oldPiece, $newPiece, $oldLetter, $slot);
$newLetter = value2Letter($newLetter);
$newBoard = substr_replace($boardState, $newLetter, floor($squareID/3), 1);
//** Update Query for boardstate & turn
$Query=("UPDATE board SET boardState = '$newBoard', turn = '$turnCount' WHERE bid = '$bid'");
mysql_query($Query);
// }
boardUpdate($turnCount);
}
function boardUpdate($turnCount)
{
$json = '{"turnCount":"'.$turnCount.'",'; //** turnCount **
$bid = $_GET['bid'];
$Query=("SELECT boardstate FROM board WHERE bid='$bid'");
$Result=mysql_query($Query);
$Board=mysql_result($Result,0,"boardstate");
$json.= '"boardState":"'.$Board.'"'; //** boardState **
$json.= '}';
echo $json;
}
function letter2Value($input)
{
if(ord($input) >= 48 && ord($input) <= 57)
return ord($input) - 48;
else
return ord($input) - 87;
}
function value2Letter($input)
{
if($input >= 10)
return chr($input += 87);
else
return chr($input += 48);
}
//*** UPDATE CODE *** updates an letter with a new peice change and returns result letter.
//***** $old : peice value before update
//***** $new : peice value after update
//***** $current : letterValue of code before update.
//***** $slot : which of the 3 sqaures the change needs to take place in.
function updateCode($old, $new, $current, $slot)
{
if($slot == 0)
{// echo $current,"+((",$new,"-",$old,")*9)";
return letter2Value($current)+(($new-$old)*9);
}
else if($slot == 1)
{// echo $current,"+((",$new,"-",$old,")*3)";
return letter2Value($current)+(($new-$old)*3);
}
else //slot == 2
{// echo $current,"+((",$new,"-",$old,")";
return letter2Value($current)+($new-$old);
}
}//updateCode()
//**** GETBOARDSPOT *** Returns the peice value at defined location on the board.
//****** 0 is first sqaure increment +1 in reading order (0-254).
function getBoardSpot($squareID, $bid)
{
$Query=("SELECT boardstate FROM board WHERE bid='$bid'");
$Result=mysql_query($Query);
$Board=mysql_result($Result,0,"boardstate");
if($squareID %3 == 2) //**3rd spot**
{
if(letter2Value($Board{floor($squareID/3)}) % 3 == 0)
return 0;
else if(letter2Value($Board{floor($squareID/3)}) % 3 == 1)
return 1;
else
return 2;
}
else if($squareID %3 == 0) //**1st spot**
{
if(letter2Value($Board{floor($squareID/3)}) <= 8)
return 0;
else if(letter2Value($Board{floor($squareID/3)}) >= 18)
return 2;
else
return 1;
}
else //**2nd spot**
{
return floor(letter2Value($Board{floor($squareID/3)}))/3%3;
}
}//end getBoardSpot()
?>
도와주세요, 내가 ' 필요한 경우 더 많은 정보를 제공해 주어 기쁩니다. 미리 감사드립니다 =)
Google이 맞습니다. – mauris
Google이 정확하다고 가정했습니다. (그리스도를 위해서 google입니다). 그러나 나는 아직도 무엇이 잘못되었는지 모른다. –
세션 AJAX에서 작동합니다. – mauris