2016-03-21 6 views
-1

Предположим, у меня есть массив PHP сессии:Удалить элемент массива php через функцию javascript?

$_SESSION[MyItems]=Array('A'=>"Apple", 'B'=>"Brownie", 'C'="Coin")) 

, который используется для отображения элементов на странице посещаемого пользователем, и я хочу, чтобы пользователь мог упасть один или несколько элементов из дисплея с помощью javascript-функция на стороне клиента (т. е. что-то, что скрывает элемент или меняет div на display = none ... Я получаю, как это делать сейчас), а не с возвращением к серверу/перезагрузке страницы.

Как я могу одновременно уронить элемент из $_SESSION[MyItems] массива, когда Javascript роняет предмет из поля зрения (то есть, так что не появляется, если страница перезагружается?

Я думаю, что, может быть, задача будет включать в себя преобразование всей $_SESSION[MyItems] массив в массив javascript, отбрасывая из него элементы, а затем, используя javascript-версию массива, как-то перезаписываем $_SESSION[MyItems]. Это можно сделать?

ответ

1

Все данные сеанса хранятся в файлах cookie, а файлы cookie доступны для обоих клиент и сервер. Поэтому вы можете сделать это, отредактировав файлы cookie, но эту практику следует избегать и you should not do this, потому что сеанс предназначен только для серверной части.

надеюсь, что это помогает :)

+0

Я думаю, что я получил в плохую привычку использовать $ _SESSION массивы без необходимости. Предположим, мы забыли $ _SESSION и предположим, что мы просто говорим о $ MyItems? Поскольку я размышляю над этим, я не думаю, что мне нужно использовать $ _SESSION для этого случая. –

1

То не так просто, потому что PHP работает на стороне сервера, то $_SESSION объект из PHP не доступен на клиентской стороне, где работает JavaScript.

вы должны поставить что-то вроде этого в голове шаблона (при условии, что это .php-файл с HTML-контента):

<html> 
    <head> 
     ... 
     <script type="text/javascript"> 
      //parse PHP to json-string for javascript initialisation 
      var MyItems = <?php echo json_encode ($_SESSION[MyItems], true); ?>; 
     </script> 
    </head> 
    <body></body> 
</html> 

Тогда вы бы копию PHP $_SESSION объект называется MyItems в javascript. Но изменения, внесенные в JS-объект, не будут сохранены в PHP-объекте. Для этого можно использовать JQuery's $.post:

$.post ("target.php", { "MyItems": JSON.stringify (MyItems) }, function (result) { 

    if (result == "true") 
     //do something 
    else 
     //do something else 

}); 

С файл target.php глядя, как это:

<?php 

    $_SESSION['MyItems'] = json_decode ($_POST['MyItems']); 
    echo "true"; 

?> 
+0

Спасибо. Когда я прокомментировал предыдущий ответ, мне, вероятно, вообще не нужно включать $ _SESSION. Я, вероятно, буду использовать $ .post для добавления/удаления значений в базе данных на стороне сервера, но я думаю, что вижу проблеск того, как это происходит в вашем ответе. Слишком усталый, чтобы закодировать это сегодня вечером, но завтра это уйдет. –

+0

Вы можете сохранить данные там, где захотите, отправка будет одинаковой. ;) Спокойной ночи. – wayneOS