-1

私たちは単純なビデオ プレーヤーを作成しています。その機能の一部は、単純な GET 要求を Web サーバー上の PHP ページに送信し、データベースを顧客のアクティビティ (つまり、顧客が視聴しているビデオの ID、役職とユーザー ID):

listener.php?user=1&time=59000&movie_id=35003

この listener.php は非常に単純で、この特定のユーザー ID とムービー ID の行が既に存在するかどうかを確認します。

SELECT orders_products_id,
    products_date_last_watched as lasttime,
    now() as now,
    products_timewatched
  from orders_products
    where products_id = '" . $product_id . "' and
    customers_id = '" . $customer_id ."'

に続く:

if ($check['orders_products_id'] > 0)

true の場合、UPDATE ステートメントを実行します

false の場合、INSERT ステートメントを実行します。

問題は、この listener.php をブラウザにロードして URL の値を直接変更すると、期待どおりに動作することです。

ただし、同じページがプログラムによって呼び出されると、常に新しい行が挿入されます。サーバーのログには正しい URL が表示されます。

"GET /listener.php?user=1&time=128142&movie_id=35003 HTTP/1.1" 200 - "-" "Mozilla/5.0"

何か案は?これは、Windows 2008R2 の XAMPP である私のテスト サーバーで実行されています。

編集:ここに完全なコードがあります:

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

include('includes/application_top.php');


$user_id = $_GET['user'];
$lastpos = $_GET['time'];
$product_id = $_GET['movie_id'];
$episode = 0;

//check for existing listing
$check_query = tep_db_query("SELECT orders_products_id, products_date_last_watched as lasttime, now() as now, products_timewatched from orders_products where products_id = '" . $product_id . "' and customers_id = '" . $customer_id ."' and products_lastepisode = '" . $episode . "'");
$check = tep_db_fetch_array($check_query);

if ($check['orders_products_id'] > 0) {
//user has already watched this


//find seconds between last timestamp and now
$starttime = strtotime($check['lasttime']);
$endtime = strtotime($check['now']);
$difference = $endtime - $starttime;

if ($difference < 60) {
    $totaltime = $check['products_timewatched'] + $difference;
} else {
    $totaltime = $check['products_timewatched'];
}

$update_query = "UPDATE orders_products set products_lastposition = '" . $lastpos ."', products_date_last_watched = now(), products_lastepisode = '" . $episode . "', products_timewatched = '" . $totaltime . "', products_platform = '" . $_SERVER['HTTP_USER_AGENT'] . "', customers_ip = '" . $_SERVER['REMOTE_ADDR'] ."' where orders_products_id = '" . $check['orders_products_id'] ."'";
tep_db_query($update_query);

} else {

//create new entry
if ($user_id != 999999999){
    tep_db_query("INSERT INTO orders_products (products_date_first_watched, products_visible, products_date_last_watched, customers_id, products_id, products_lastposition, products_lastepisode, products_timewatched) values (now(), 1, now(), '" . $user_id . "', '" . $product_id . "', '" . $lastpos ."', '" . $episode . "', 0)");
}
}

いくつかのメモ: - mysql クエリの "tep_db_query" は、変更されたバージョンの osCommerce の関数を使用しているためです。機能的には、標準の mysql_query および mysql_fetch_array と同じです - ユーザー ID 99999999 は、それがゲスト ユーザーであることを意味し、そのアクティビティは記録されるべきではありません - 「//最後のタイムスタンプと現在の間の秒数を見つける」全体は、費やした合計時間を追跡するためのものです

4

1 に答える 1