E
E
Evgeny Ivanov2018-03-07 10:12:33
PHP
Evgeny Ivanov, 2018-03-07 10:12:33

The line is not hidden immediately, what's wrong?

A table of the form
1520404891 one Delete
is displayed 1520404891 two Delete

When you click on "Delete" - the js script is called. The script calls a php script and returns its result.

php script does the following
Looks at what the js script passed to it. And it will be one or two, depending on the clicked link.
Adds this value to the cookie.
Calls the show_it

function The show_it function contains an array. The array contains the values ​​one and two.
The function reads a string from a cookie.
Iterates over the entire array
. If the string or part of it from the cookie matches the value of the array, it does not display it. Otherwise it outputs.

Working example
Click on the first link "1520404891 one Delete" with id=one.
Calling a php script - writes to the cookie one.
Function call - reading cookies, array iteration. The element one is equal to one - not output.
The element two is not equal to one - output.
Returning response in js in html.

What's the problem - deletion occurs after the second click. Or page refresh.
What I checked - after the click, the cookie is written. After a click, new data always comes (1520404891 is unix timestamp)

The line is not hidden (deleted) immediately, but only after an update / one more click - what's wrong?

All code - 100 lines with comments in one archive
https://cloud.mail.ru/public/4Tq4/F5trNATzN

Code
Main file - 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>


Action file - what calls 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>';
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
E
Evgeny Ivanov, 2018-03-07
@logpol32

Solved the problem in this way.
Main file - test.php

...
<?php show_it($_COOKIE['cookie_string']); ?>

Feature File
//Ставим куку
function set_my_cookie($id)
{
......................
//Куки поставлены - вызываем показ значений (таблицы)
show_it($cookie_string); //Передадим строку кук в функцию
}

//Показ таблицы со значениями
function show_it($cookie_string)
{
//Строка уже в функции - читать из массива кук не надо - всё уже есть
..................
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question