簡體   English   中英

PHP 重定向鏈接每分鍾僅更新一次 sql 數據庫

[英]PHP redirect link only updates sql database once every minute

為了跟蹤網站的點擊次數(和 IP),我創建了一個 php 腳本來存儲日期和 IP 信息,只有在成功執行查詢后,它才會將用戶重定向到鏈接。 盡管以下腳本非常小,但它可以工作。

但是,如果我在一分鍾內點擊該鏈接兩次(在 Chrome 和 Edge 中都進行了測試),它不會將此保存為一次點擊,但它會將我重定向到正確的頁面,我覺得這很奇怪。 我已經通過多次單擊來嘗試此操作,並且僅存儲 +-1 分鍾后的值。

打開新的 Chrome window 不起作用。 在 1 分鍾內打開隱身屏幕確實有效,並且此點擊會被保存。

添加信息:在 SQL 數據庫中,有一個帶有 AUTO_INCREMENT 的主 ID 列。

問題:發生這種情況有什么原因(也許是緩存?),有什么辦法可以防止這種情況發生嗎?

重定向到鏈接 1 的 URL 是: thisphpfile.php?link=1

//---------
// Get info on which link to point to
$link = $_GET["link"];

// Check link value to prevent SQL injection
if($link =='1'){
    $link_sql = "https://www.url1.com";
}
if($link =='2'){
    $link_sql = "https://www.url2.com";
}
    


// If link was a valid input, continue, else back to homepage
if($link =='1' || $link == '2'){


$date = date("Y-m-d H:i:s");
$ip = $_SERVER['REMOTE_ADDR'];


$sql = "INSERT INTO tablename (DATE , IP, LINK) VALUES ('$date', '$ip','$link_sql')";

//Execute query
if ($conn->query($sql) === TRUE) {
ob_end_flush();

// Redirect link
header("Location: " . $link_sql);
}

}else{
    // Redirect link
    header("Location: https://www.default.com" );
}

添加以下內容解決了問題:

    // Redirect link
header('HTTP/1.1 307 Temporary Redirect');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
header('Pragma: no-cache');
header('Location: ' . $link_sql, true, 307);

我不明白為什么不應該保存它的原因。 但是你的代碼結構有點不清楚。 也許您可以使用以下代碼嘗試一下,我們可以以某種方式解決它:

$links = [
    1 => 'https://www.url1.com',
    2 => 'https://www.url2.com'
];

// Check if GET-parameter is numeric and if the number is in the links array above
if (is_numeric($_GET["link"]) && isset($links[intval($_GET["link"])])) {
    $link = $links[intval($_GET["link"])];

    $sql = sprintf("INSERT INTO tablename (DATE, IP, LINK) values ('%s', '%s', '%s')",
        date("Y-m-d H:i:s"),
        $_SERVER['REMOTE_ADDR'],
        $link
    );

    if ($conn->query($sql) === TRUE) {
        header("Location: " . $link);
        exit;
    }
}

// This will be the default header when the exit above cannot be reached (because of errors)
header("Location: https://www.default.com");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM