PHP: обнаружение страницы

У меня есть страница action.php, на которой я запускаю SQL-запрос через код, так что всякий раз, когда просматривается страница, запрос выполняется, как , как просмотр страниц с подсчетом

<?php
mysqli_query("UPDATE ****");
?>

Проблема заключается в том, что страница обновляется, запрос выполняется, а PAGE REFRESH подсчитывается как просмотр страницы, который я хочу избежать.

  Вопрос: Как этого избежать?

Я ищу простое решение, чтобы проверить

if( page was refresh ) //some condition
{
 do
}

Ответы

Ответ 1

Я решил проблему... HURRAHHH без сеанса и без файлов cookie

решение представляет собой комбинацию PHP: AJAX: JavaScript

запрос, который вы хотите запустить при загрузке страницы, а не на странице. Обновить запустите его, как через вызов AJAX, можно сказать, что моя функция для этого -

function runQUERY()
{
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("POST","doIT.php",false);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();
}

и я могу просто проверить с помощью Javascript, что страница представляет собой новую загрузку или ее обновление, выполнив следующие

<head>
<script type="text/javascript">
function checkRefresh()
{
    if( document.refreshForm.visited.value == "" )
    {           
        // This is a fresh page load
            alert ( 'Fresh Load' );
        document.refreshForm.visited.value = "1";
            ..call you AJAX function here
    }
    else
    {
        // This is a page refresh
        alert ( 'Page has been Refreshed, The AJAX call was not made');

    }
}
</script>    
</head>

<body onLoad="checkRefresh()">

<form name="refreshForm">
<input type="hidden" name="visited" value="" />
</form>

</body>
</html>

и в вашем doIT.php просто добавьте свой PHP-код, который вы собираетесь разместить на обычной странице

<?php
mysql_query("UPDATE---------");
//put any code here, i won't run on any page refresh
?>

Ответ 2

Я нашел этот фрагмент здесь, и он отлично сработал у меня:

$pageWasRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';

if($pageWasRefreshed ) {
   //do something because page was refreshed;
} else {
   //do nothing;
}

Ответ 3

Вы не можете напрямую обнаружить обновление страницы, но вы можете использовать cookie для имитации того, что вы хотите:

if (isset($_COOKIE['action'])) {
  // action already done
} else {
  setcookie('action');
  // run query
}

В зависимости от ваших требований вам также необходимо решить, когда удалить cookie и/или выполнить действие еще раз.

Ответ 4

Если вы просто хотите запустить его один раз для пользователя, я бы установил cookie сеанса, а затем использовал оператор if().

<?php
session_start();

if (!$_SESSION['loaded'])
{
    // insert query here
}

$_SESSION['loaded'] = true;

?>

Ответ 5

Лучший способ обнаружения обновления страницы. или нет? (Ctrl + F5, F5, Ctrl + R, Enter)

$pageRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) &&($_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0' ||  $_SERVER['HTTP_CACHE_CONTROL'] == 'no-cache'); 
if($pageRefreshed == 1){
    echo "Yes page Refreshed";
}else{
    //enter code here
    echo "No";
}

Ответ 6

Вы можете сохранить файл cookie, который будет связан с текущей страницей, и если какая-либо ссылка будет нажата, обновите файл cookie с новым именем страницы. Предполагая, что это сделано в Javascript, вы можете отправить эту информацию updateCookie на сервер, чтобы уведомить о новом ударе страницы.

Или может быть другой подход, вы можете указать HTTP HEADER, который указывает, сколько времени срок действия кеша истекает на странице и таким образом, браузер даже не отправит вы запрашиваете загрузку/обновление страницы.

Смотрите http://www.mnot.net/cache_docs/#IMP-SCRIPT для получения информации о CACHING

Кроме того, проверьте Etag vs Expires в HTTP - ETag vs Header Expires

Ответ 7

    //here you get the url behind the domain.
    $currentPage = $_SERVER['REQUEST_URI']; 

    //if the session current page is not set.
    if(!isset($_SESSION['currentPage'])){ 

      //set the session to the current page.
      $_SESSION['currentPage'] = $currentPage;     
    }

    //check if the session is not equal to the current page
    if($_SESSION['currentPage'] != $currentPage){

       // if it not equal you set the session again to the current page.
       $_SESSION['currentPage'] = $currentPage;

       //set the query you want to use
    }

Ответ 8

Вот определение обновления страницы, используя простой сеанс, попробуйте

<?php
session_start();
if (!empty($_SESSION['count']))
{ 
session_destroy();

  //Code to run on Page Refresh
}
else
$_SESSION['count']=1;
?>