0

クラス関数内からセッション変数の値を設定しようとしていますが、後で同じクラスの別の関数内でそのセッション値を比較しています。これらの関数はいずれも関数内にありません__construct()

問題は、比較が真を返さないことです。

<?php
session_start();
$class = new Class();
?>

blah blah blah

<script type="text/javascript">
    // Ajax function to call PHP that creates new Class isntance and executes a Class->function();
    setInterval('checkNew()', 10000);
</script>

blah blah blah

// Another Ajax Function that calls creates a new Class isntance and executes the initial Class->function();
<body onload="getMessages();">

blah blah blah

この次の関数の抜粋は、<body onload="">ajax が呼び出すスクリプトから実行されます。これは$_SESSION['last_sms']後で別の関数で比較するためです。

// Check the now() stamp of the most recent message loaded
$recent_msg_query = "SELECT date_received FROM messages ORDER BY date_received DESC LIMIT 1";
$recent_statement = $this->db_handle->prepare($recent_msg_query);
$recent_statement->execute();
$most_recent = $recent_statement->fetch(PDO::FETCH_NUM);
$_SESSION['last_sms'] = $most_recent[0];

setInterval('checkNew()', 10000);これは、10 秒ごとに (経由で)比較を行うクラス内の関数です。

public function checkNew()
{
    // Check the now() stamp of the most recent message loaded and compares it
    // to a stored now() stamp.
    $recent_msg_query = "SELECT date_received FROM messages ORDER BY date_received DESC LIMIT 1";
    $recent_statement = $this->db_handle->prepare($recent_msg_query);
    $recent_statement->execute();
    $most_recent = $recent_statement->fetch(PDO::FETCH_NUM);

    if (!isset($_SESSION['last_sms'])) {
        $_SESSION['last_sms'] = $most_recent[0];
    }

    if ($_SESSION['last_sms'] !== $most_recent[0]) {
        echo "New message(s) available, refresh.";
    } else {
        echo "No new messages yet.";
    }
}

新しいメッセージを送信すると、ページに「まだ新しいメッセージはありません」と表示されます。私がここでどこから道を外れたかを理解するのを手伝ってくれませんか? これ$_SESSION stuffは、これまでのところ機能していない唯一のものです。

4

1 に答える 1

1

session_start()セッションの開始者として機能するだけではありません。への読み取りまたは書き込みを試みるすべてのスクリプトで呼び出す必要があります$_SESSIONsession_start()AJAX ハンドラー スクリプトは、呼び出し元のページを生成したメインの PHP スクリプトから分離され、完全に独立した PHP スクリプトとして機能するため、AJAX 処理 PHP スクリプトも呼び出す必要があります。

于 2012-10-09T20:15:52.143 に答える