Я действительно страдаю здесь, пытаясь заставить этот призыв 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, и они уже не проголосовали - добавьте голосование, если они уже проголосовали, скажите им.
Что на самом деле происходит: Пользователь, который еще не проголосовал, нажимает кнопку, это инициирует вызов ajax, и голосование успешно добавлено, пользователю не отправляется сообщение. Затем они переходят к другому вопросу и нажимают кнопку голосования, инициируется «addvote.php», но на этот раз он возвращает «Вы уже голосовали по этому поводу» И добавляет голосование! Это заставляет меня говорить, что вызов страницы выполняется дважды, сначала он добавляет голосование, затем снова пытается (и возвращает ошибку).
Возможно, это как-то связано с заголовком() ??
Каждый вопрос затем возвращает это же сообщение и добавляет голосование - если я не жду некоторое время, а затем он работает над первым вопросом, и то же самое происходит снова.
Точка примечания: Переменные GET передаются вместе с заголовком, поэтому я знаю, о каком вопросе они говорят, и не нажимали ли они «нет» или «да».
Опять же, извинения, этот вопрос является ужасным.
спасибо так много Тимура! отсутствующий «выход», действительно был проблемой. – JoeRocc
Вам всегда нужно помнить, что вызов 'header()' не завершает выполнение скрипта. Вот почему 'exit' или' die(); 'необходимо ... – Timur