2010-11-27 3 views
15

У меня есть страница action.php, на которой я бегу запрос SQL с помощью кода, так что всякий раз, когда страница просматривается запрос выполняется как его мнения как счетные страницаPHP: Обнаружение Page Refresh

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

проблема в том, когда страница обновляется, запрос запускается & СТРАНИЦА REFRESH засчитывается как ПРОСМОТР СТРАНИЦЫ, которого я хочу избежать.

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

Я ищу простое решение, так что я могу проверить

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

есть ли $ _SERVER [ ''] атрибут, который будет отличаться, если страница направлена ​​из ссылки, и страница обновляется .. если это так, то нет проблем с решением этого – Moon 2010-11-27 05:13:59

+0

@Junaid Saeed: просто чтобы быть понятным, вы также не хотите учитывать, когда пользователь просматривает страницу и затем просматривает назад? – 2010-11-27 05:19:16

+0

Нет изменений в массиве $ _SERVER для обновления страницы, поэтому, может быть сделано с помощью сеанса – Naresh 2010-11-27 05:20:39

ответ

3

я решил эту проблему ... HURRAHHH без каких-либо сессий & нет печенье

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

запрос, который вы хотите запустить на странице Загрузка & нет на странице Обновить запустите его как v И. 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 
?> 
6

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

<?php 
session_start(); 

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

$_SESSION['loaded'] = true; 

?> 
11

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

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

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

1

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

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

См http://www.mnot.net/cache_docs/#IMP-SCRIPT информации о кэшировании

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

0

Вот обнаружение обновления страницы с помощью простого сеанса, попробуйте

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

    //Code to run on Page Refresh 
} 
else 
$_SESSION['count']=1; 
?> 
1
//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's not equal you set the session again to the current page. 
     $_SESSION['currentPage'] = $currentPage; 

     //set the query you want to use 
    } 
20

Я нашел этот фрагмент кода here, и она работала отлично для меня:

$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

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

$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"; 
}