これは前に尋ねられている場合、または私がうまく説明できない場合は申し訳ありません。問題の周りに頭を抱えようと時間を費やしてしまったので、この問題を解決できないようです。コードはローカルで正常に動作していますが、サーバーにアップロードすると、サーバーとクライアントの時間差の処理方法のチェックに問題があるようです。方法や考え方を正確には分からない。私はまた、pdoステートメントにデータを間違って挿入していることを知っています。私は現時点では気にしません。私は後でこのすべてを整理します。クライアントとサーバーの時刻/日付の違いは?
問題が発生しているアプリケーションの部分は、アクティブな貨物をチェックするときです(これはゲームのようなものです)。データベースからのタイムスタンプと現在の時刻を比較して、時間が経過したかどうかを確認します。到着時間が過ぎている場合は、貨物のステータスを「配達済み」に設定するだけでなく、「ストレージ」という別のテーブルにデータを追加する必要があります。
function check_active_shipment(){
$pdo = pdo();
$username = $_SESSION['username'];
$statement = $pdo->prepare("SELECT * FROM shipments WHERE username LIKE '$username' AND status LIKE 'active' LIMIT 1");
$statement->execute();
$rows = $statement->fetch();
$id = $rows['id'];
if($rows['type'] == "purchase"){
if(time() >= strtotime($rows['arrival'])){
$statement = $pdo->prepare("UPDATE shipments SET status='delivered' WHERE id LIKE '$id'");
$statement->execute();
$statement = $pdo->prepare("INSERT INTO storage (username, crate_type_id, quantity) VALUES (?, ?, ?)");
$statement->bindParam(1, $username);
$statement->bindParam(2, $rows['crate_type_id']);
$statement->bindParam(3, $rows['quantity']);
$statement->execute();
//header("location:index.php");
}
}
else if($rows['type'] == "sale"){
if(time() >= strtotime($rows['arrival'])){
$statement = $pdo->prepare("UPDATE shipments SET status='delivered' WHERE id LIKE ?");
$statement->bindParam(1, $id);
$statement->execute();
$statement = $pdo->prepare("SELECT cash FROM users WHERE username LIKE ?");
$statement->bindParam(1, $username);
$statement->execute();
$user = $statement->fetch();
$cash = $user['cash'] + $rows['value'];
$statement = $pdo->prepare("UPDATE users SET cash=?");
$statement->bindParam(1, $cash);
$statement->execute();
//header("location:index.php");
}
}
}
共有する情報が不明な場合は教えてください。
に追加のいずれかが別のサーバにホストされているデータベースですか?もしそうなら、異なる時間/タイムゾーンを持つサーバー上でホストされていますか? –
タイムゾーンを確認してください。 – eronax59
すべてが同じサーバー、ファイル、データベースにあります。私はタイムゾーンが何であるか分からないが、サーバーがストックホルムにあると考えて、私はヨーロッパ/ストックホルムを想定している。どのようにサーバー/データベースのタイムゾーンを見つけるためのアイデア? –