我真的很想在這裏試圖讓這個Ajax調用工作,對於這個問題的大量抱歉。檢測cookie是否啓用了PHP,頭部重定向
用戶點擊一個按鈕,這啓動了一個Ajax調用來添加投票到數據庫。這是所謂的「addvote.php」的文件:
<?php
session_start();
/* COOKIECHECK START */
setcookie('test', 1, time()+3600);
if(!isset($_GET['cookies'])){
header("Location:/thought/addvote.php?cookies=true&id=".$_GET['id']."&ans=".$_GET['ans']);
}
if(count($_COOKIE) > 0){
$cookies=1;
} else {
$cookies=0;
}
/* COOKIECHECK END */
if($cookies==1) {
$id=$_GET["id"];
$vId="v".$id;
if (((isset($_SESSION[$vId]) && ((time() - $_SESSION[$vId]) > 180))) || (!isset($_SESSION[$vId]))) {
// last vote was more than 3 minutes ago
$_SESSION[$vId] = time(); // update/create vote time stamp
//ADD VOTE TO DATABASE
}
else {
echo "You've voted on this already";
}
}
else {
echo "Please enable cookies to make your vote count";
}
?>
什麼是應該發生:用戶進行檢查,看他們是否有啓用Cookie。如果是這樣,他們可以添加投票,如果不告訴他們啓用cookie。如果他們啓用了cookies,而且他們還沒有投票 - 如果他們已經投了票,請添加一個投票,告訴他們。
實際發生的事情:尚未投票的用戶點擊該按鈕,發起ajax呼叫併成功添加投票,則不向用戶發送消息。然後,他們轉到另一個問題,然後點擊投票按鈕,「addvote.php」啓動,但這次它返回「你已經投票了」,並添加投票!這讓我擔心頁面調用會運行兩次,首先它會添加投票,然後再次嘗試(並返回錯誤)。
也許它與標題()有關?
然後,每個問題都會返回相同的信息並添加投票 - 除非我等一會兒,然後它對第一個問題起作用,同樣的事情會再次發生。
值得注意的是: GET變量與頭部一起傳遞,以便我知道他們在談論哪個問題以及他們是否單擊否或是。
再次,道歉,這個問題是一個可怕的問題。
非常感謝鐵木爾!失蹤的'出口;'的確是問題所在。 – JoeRocc
您需要時刻記住調用'header()'不會終止腳本執行。這就是爲什麼'exit;'或'die();'是需要的...... – Timur