Pregunta

Actualización, Resuelve: Después de todo esto me enteré de que estaba llamando a una versión antigua de mi código en la actualización de ajax.'boardControl.php' en lugar de 'boardUpdate.php" Estos son los tipos de errores que hacen que la programación de la diversión.


Estoy escribiendo un navegador gomoku juego.Tengo el ajax de instrucción que permite al jugador jugar una pieza.

$(document).ready(function() {
    $("td").live('click',function(){
        var value = $(this).attr('id');
        $.get('includes/boardControl.php',{play: value, bid: bid});
    });
});

valor = junta directiva de ubicación de la plaza
oferta = ID de la tarjeta

Antes de crear un inicio de sesión de usuario para la identificación de jugador, el lado del servidor php había una solución temporal.Sería rotar la pieza de estado para las plazas cuando se hace clic en lugar de saber qué jugador para crear con ellos.

Después de crear inicio de sesión cosas que establecer una variable de sesión para el jugador de la ID.Yo estaba esperando a leer el IDENTIFICADOR de sesión de php durante la petición ajax y averiguar a qué jugador de ellos son de allí.

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;

Por alguna razón, cuando ejecuto la plena aplicación web, las piezas todavía ciclo, sin embargo, incluso después de que he eliminado el código para hacer que ellos ciclo.Además, después del registro Si yo manualmente la carga de la página php en el navegador, se modifica la base de datos correctamente (donde sólo juega piezas pertenecientes a ese jugador) y salidas de los resultados correctos.

A mí me parece que la sesión no se llevó más cuando se utiliza con Ajax.Sin embargo, las búsquedas de Google me dicen que, sesiones de trabajo con Ajax.


Actualización:Estoy tratando de dar más información.

  1. El registro funciona correctamente.Mi ID es reconocido y lo tengo impreso la junta para garantizar que Me fue recuperar correctamente.

  2. El ajax de no actualizar el de la junta.Los valores transmitidos son correcto y confirmado con firebug del la consola.Sin embargo, en lugar de colocar piezas sólo para el jugador que a ella pertenecen los ciclos pesar de que la pieza los estados (0,1,2).

  3. Cuando manualmente la navegación a boardUpdate.php y poniendo en el mismos valores enviados desde el Ajax el resultados observados en el eco ed respuesta indica que el correspondiente la pieza se reproduce cada vez que como la intención de.

  4. Mismos resultados en mi portátil después de nueva carga de firefox.

  5. Manual de navegación para boardUpdate.php sin necesidad de iniciar sesión en antes de salir de la junta sin cambios (como se pretendía cuando ningún usuario se encuentra en el período de sesiones).

  6. He registrado el doble de la que session_start() en los archivos php y volver a verificar el IDENTIFICADOR de sesión variables.

Espero que esta información extra ayuda, me estoy quedando sin ideas de qué decirle.Debo cargar el código completo?


Actualización 2:

Después de comprobar el Ajax de respuesta en el fuego-error me di cuenta de que la 'play' solicitud de no conseguir un resultado, y la junta no está actualizado hasta el próximo 'actualizar'.Todavía estoy buscando en esto, pero lo voy a publicar aquí para ustedes también.

boardUpdate.php Lugares destacados son:Actualización de la Junta(line6) Colocar la Pieza(line20) función 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()


?>


Por favor ayuda, yo estaría encantado de proporcionar más información si es necesario.Gracias de antemano =)

¿Fue útil?

Solución

Desde el pequeño fragmento de código que tenemos, es difícil saber cuál es su problema podría ser.Lo que puedo decir es que session_start debe ser una de las primeras cosas que debe hacer en cada página donde usted está esperando para el uso de la sesión.Después de eso, sólo quiero hacer inmediatamente un var_dump de $_SESSION para ver que los datos están ahí (poner un die justo después de eso).Es muy posible que su verdadero problema es de otra índole, y que la sesión está trabajando, de hecho.Hay un problema con su código de inicio de sesión, por ejemplo, que está provocando que se limpie la sesión?

Puede utilizar Firebug para mirar los resultados crudos de sus llamadas AJAX, que debe ser útil, ya que el script funciona si usted visitar directamente la página.

Los casos en donde he visto sesiones de no funcionar como se espera, en general, han sido que session_start se llama muy a menudo o demasiado tarde.La otra posibilidad es que usted tiene una increíblemente corto tiempo de espera, pero suena raro.

Finalmente, usted puede asegurarse de que su PHP instalar se establece el uso de cookies de sesiones.Es muy poco probable que en este punto de que no iba a ser, pero se puede mirar.

Otros consejos

Un potencial problema de este código es el uso de $.get - que se almacena en la caché de IE, por lo que su servidor de código no se ejecuta en cada momento.Trate de usar $.ajax con caché establece en false:

$.ajax({
  type: 'GET',
  url: 'includes/boardControl.php',
  cache: false,
  data: {play: value, bid: bid}
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top