Выводится таблица вида
1520404891 one Удалить
1520404891 two Удалить
При нажатии на "Удалить" - происходит вызов js скрипта. Скрипт вызывает php скрипт и возвращает его результат.
php скрипт делает следующее
Смотрит, что ему передал js скрипт. А это будет one или two, в зависимости от нажатой ссылки.
Добавляет в куку это значение.
Вызывает функцию show_it
Функция show_it содержит массив. В массиве значения one и two.
Функция читает строку из куки .
Перебирает весь массив
Если строка или её часть из куки совпала со значением массива - не выводит его. Иначе выводит.
Пример работы
Клик по первой ссылке "1520404891 one Удалить" с id=one.
Вызов php скрипта - пишет в куку one.
Вызов функции - чтение куки, перебор массива. Элемент one равен one - не выводим.
Элемент two не равен one - выводим.
Возврат ответа в js в html.
В чем проблема - удаление происходит после второго клика. Или обновления страницы.
Что я проверял - после клика кука пишется. После клика всегда приходят новые данные (1520404891 это unix timestamp)
Строка не скрывается (удаляется) сразу, а только после обновления/ещё одного клика - в чем ошибка?
Весь код - 100 строк с комментариями одним архивом
https://cloud.mail.ru/public/4Tq4/F5trNATzN
Код
Главный файл - test.php
<?php
//Функции
include_once (__DIR__.'/functions.php');
?>
<html>
<head>
<title></title>
<meta http-equiv=Content-Type content="text/html;charset=UTF-8">
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
$('#source_table').on('click', '.delete_link', function(){
$.ajax({
url: 'actions.php?set_my_cookie&id='+this.id,
success: function(data){$('#source_area').html(data);}
});
return false;
});
});
</script>
<div id="source_area">
<?php show_it(); ?>
</div>
</body>
</html>
Файл действий - то что вызывает js
actions.php
//Функции
include_once (__DIR__.'/functions.php');
//Принимаемые данные
$id=$_GET['id'];
//Вызоф функции
if (isset($_GET['set_my_cookie']))
{
echo set_my_cookie($id);
}
Функции
functions.php
//Ставим куку
function set_my_cookie($id)
{
$cookie_string=''; //Пустая строка, по умолчанию
$cookie_time=31536000; // Время кук - год
//Смотрим - есть ли у пользователя кука
if (isset($_COOKIE['cookie_string']))
{
//Если есть - получаем её значение
$cookie_string=$_COOKIE['cookie_string'];
}
//Удаляем куку в любом случае т.к. она будет перезаписана
setcookie('cookie_string', '', 0, "/");
//Добавляем скрываемое значение в строку
$cookie_string=$cookie_string.$id;
//Ставим куку со списком всех скрываемых значений
setcookie('cookie_string', $cookie_string, time()+$cookie_time,"/");
//Куки поставлены - вызываем показ значений (таблицы)
show_it();
}
//Показ таблицы со значениями
function show_it()
{
$my_array=array('one','two'); //Массив со значениями
$cookie_string=$_COOKIE['cookie_string']; //Строка из куки
echo'<table border="1" id="source_table">';
foreach ($my_array as $array_value)
{
//Если в строке из куки нет значения из массива - покажем её
if (strripos($cookie_string, $array_value)===false) echo'<tr><td>'.time().' '.$array_value.'</td><td><a href="" class="delete_link" id="'.$array_value.'">Удалить</a></td></tr>';
}
echo'</table>';
}