0

私はクライアント用のライブチャットプログラムを書いていますが、サーバーからデータを取得する以外はすべて機能しています。ほとんどなめられましたが、jquery関数でキャッチされていない構文エラーを伝えるこのエラーが発生しています:予期しない識別子、このコードのいくつかのバリエーションを試しましたが、この問題が発生し続けます。ここにコードがあります

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <?php
    session_start();
    include 'conection.php';
    include 'function.php';

    $name = $_GET['name'];
    $query = "SELECT * FROM chatSession WHERE user_name = '$name'";
    $result = mysql_query($query, $con) or die(mysql_error());
    $row = mysql_fetch_array($result);

    $session = json_encode($row['session_id']);
    /*
    function fetchMessages()
    {
        $get = ("SELECT * FROM chatRoom WHERE session_id = '$session'");
        $hold = mysql_query($get, $con);

        if($hold)
        {
            return mysql_fetch_array($hold);
        }
    }
    */
    if(isset($_GET['submitmsg']))
    {
        $message = mysql_real_escape_string($_GET['usermsg']);
        $throw = "INSERT INTO chatRoom(session_id, source, message, timestamp)
                  VALUES('".$_GET['id']."', '".$_GET['source']."', '$message'
                  , UNIX_TIMESTAMP())";

        if (!mysql_query($throw,$con))
        {
            die('Error: ' . mysql_error());
        }else
        {
            fetchMessages();
        }
    }
    ?>
<head>
    <title></title>
    <link type="text/css" rel="stylesheet" href="css/chatStyle.css" />
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>
<body>
    <div id="wrapper">
        <div id="menu">
            <p class="welcome"><b>Welcome, <?php echo $row['user_name']; ?></b></p>
            <p class="logout"><a href="nameSub.php?logout=true&name=<?php echo $row['user_name']; ?>&id=<?php echo $row['session_id']; ?>">Exit Chat</a></p>
            <div style="clear:both"></div>
        </div>
        <div id="chatbox">
        </div>
        <form name = "message" action = "<?php echo $_SERVER['PHP_SELF']; ?>" method = "get">
            <input type = "hidden" name = "name" value = "<?php echo $_GET['name']; ?>" />
            <input name = "id" type = "hidden" value = "<?php echo $row['session_id']; ?>" />
            <input name = "source" type = "hidden" value = "<?php echo $row['user_name']; ?>" />
            <input name = "usermsg" type = "text" id = "usermsg" size = "63" />  
            <input name = "submitmsg" type = "submit"  id = "submitmsg" value = "Send" />  
        </form> 
    </div>
    <script type="text/javascript">
        $(document).ready(function()
        {
            fetchMessages = function()
            {
                var sess = <?php echo $session; ?>;
                $.ajax
                ({
                    url:'functions.php',
                    type:'post',
                    data:{method:'fetch, sess'},
                    success:function(data)
                    {
                        $('#chatbox').html(data);
                    }
                });
            }

            setInterval(fetchMessages, 5000);
            fetchMessages();
        });
    </script>
</body>

問題は、呼び出されたスクリプトに渡す変数 sess を作成しようとしているときに発生するため、それを必要な関数に渡してデータを取得できます。

これが更新されたjqueryです

    fetchMessages = function()
    {
        var sess = <?php echo $session; ?>;
        $.ajax
        ({
            url:'functions.php',
            type:'post',
            data:{method:'fetch'},
            success:function(data)
            {
                $('#chatbox').html(data);
            }
        });
    }

そして functions.php

    <?php
    include 'core/conection.php';
    include 'function.php';

    if(isset($_POST['method']) === true && isset($POST['session']) === true && empty($_POST['method']) === false && empty($_POST['session']) === false)
    {
$method = trim($_POST['method']);
$session = trim($_POST['session'];

if($method === 'fetch')
{
    $messages = fetchMessages($session);

    if(empty($messages) === true)
    {
        echo 'A representative will be with you shortly';
    }else
    {
        foreach($messages as $message)
        {
            $ts = $message['timestamp'];
            ?>
            <div class = "message">
            <a href = "#"><?php echo date('n-j-Y h:i:s a', $ts); ?><?php echo $message['username']; ?></a>says:<p><?php echo nl2br($message['message']); ?></p>
            </div>
            <?php
        }
    }
}
    }

?>

そして最後に fetchMessages()

    <?php
    include 'core/conection.php';

    function fetchMessages($session)
    {
        $session = $_GET['$session'];
        $get = ("SELECT * FROM chatRoom WHERE session_id = '$session'");
        $hold = mysql_query($get, $con);

        if($hold)
        {
            return mysql_fetch_array($hold);
        }
    }
    ?>

まだ表示されないので、ここのどこかにエラーがあることはわかっています

最新の更新jqueryコード、これはsession_idを整数として表示しますが、それでも予期しない識別子を取得します

    fetchMessages = function()
{
    $.ajax
    ({
        url:'functions.php',
        type:'post',
        data:{method:'fetch'
              session:'<?php echo $row['session_id']; ?>'},
        success:function(data)
        {
            $('#chatbox').html(data);
        }
    });
}
4

1 に答える 1

2

これはあなたの問題の1つであると信じているため、これを1つの回答として追加しています。sess が JSON でエンコードされた文字列であり、それを必要な関数 php に渡したい場合:

data: {method: 'fetch', session: sess}

または少なくとも:

data: {method: 'fetch, '+sess}

の他のコードを見てくださいfetchMessages()

$session = $_GET['$session'];

関数に $session を渡すので、これは必要ありません。$_GET スコープには含まれません。

またからfunctions.php

$session = trim($_POST['session'];

更新されたJavaScriptでは、セッションに何も投稿していません。メソッドにのみ投稿しています。function.php に送信するには、session: 'something' を追加する必要があります。

于 2013-02-28T21:01:54.263 に答える