0

現在、このコードと 2 つの問題があります。

Javascript でユーザーのタイムゾーンを取得し、ajax を介して timezone.php に投稿します。これにより、ユーザーの時間で Cookie が設定されます。Cookie が設定されていない場合 (最初の訪問時など)、Cookie の値を表示するには、ページを更新する必要があります。現時点ではJavaScriptでこれを行っていますが、別の方法が必要です。また、Cookie がない場合はページが更新されるため、Cookie が無効になっているユーザーは更新ループが発生します。

これらの問題を解決する方法について何か提案はありますか?

ありがとう、マーカス


index.php:

<!DOCTYPE html>
<html>
<head>
<style>
    .night {
        background: #000;
        color: #fff;
    }
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<?php

        if(isset($_COOKIE["time"])) {
            $time = $_COOKIE["time"];
            if($time < 5.5 || $time > 19) {
                $night = true;
            }
        } else {
            echo("
            <script>
              var timezone = new Date().getTimezoneOffset()/60;

              $(document).ready(function() {
                $.post('timezone.php',{timezone: timezone}, function(data){location.reload(true)});
              });
            </script>
            ");
        }
?>

</head>
<body class="<?php echo $night ? "night" : "day"; ?>">
<?php if($night) {
    echo "It's nighttime! ($time)";
} else {
    echo "It's daytime! ($time)";
} ?>
</body>
</html>

timezone.php:

<?php

$timezone = $_POST["timezone"];

if(isset($timezone)) {
    date_default_timezone_set('Etc/GMT'.($timezone <= 0 ? '' : '+').$timezone);
    $time = date("G") + (date("i")/60);
    setcookie("time", $time);
}

?>
4

4 に答える 4

0

PHP スクリプトは、サーバーに対して要求が行われたときにのみ実行されます。JS と AJAX、または必要に応じて iframe を使用できます。

于 2012-11-10T23:41:35.123 に答える