Массив Php уничтожается и заменяется каждый раз, когда я делаю к нему ajax-запрос?

#php #ajax #arrays

#php #ajax #массивы

Вопрос:

Одним нажатием кнопки в моем php-скрипте создается ajax POST, который имеет следующий код

 <?php
    $number = $_POST["id"];
    $myarray[$number] = $_POST["marker"];
?>
  

Две записи POST — это id и marker . Я надеялся, что каждое нажатие кнопки конечным пользователем создаст вызываемый массив все большего размера, $myarray потому что $number обычно изменяется.

Вместо этого происходит то, что каждое нажатие кнопки уничтожает оригинал $myarray и создает новый $myarray только с одной парой данных (только что отправленный $ number и $_POST["marker"] ).

Как я могу закодировать это так, чтобы массив создавался при каждом нажатии кнопки?

Ответ №1:

HTTP — это протокол без состояния, поэтому сервер не может узнать об этом $my_array после каждого запроса. PHP просто генерирует некоторый HTML, а сервер обслуживает этот сгенерированный HTML. Однако вы могли бы сохранить информацию на стороне клиента в javascript.

Что касается вашего комментария-вопроса: Нет, это не так. Решение действительно зависит от вашего варианта использования, если вам нужна информация, которая будет доступна для последующего использования, вам придется сохранить ее в базе данных или файле. Если только для текущей страницы просмотра, сохраните ее в браузере пользователя с помощью javascript. Сохранение его в качестве переменной сеанса — другой вариант.

Комментарии:

1. Ах, я этого не знал. Я быстро поискал в Google, поможет ли установка массива в качестве глобальной переменной или суперглобальной переменной обойти эту проблему? Если да, то как мне это сделать?

2. Я понимаю. В этом случае я буду сохранять информацию в cookie и обновлять cookie при каждом нажатии кнопки и предварительном сопоставлении. Информация не является конфиденциальной, это просто пользовательские настройки на странице.

3. @Джеймс Нет (ответ на ваш первый комментарий). Глобальные переменные также привязаны к сеансу, они умирают в конце его. Если вы не хотите использовать JS, вы могли бы попробовать сохранить свои данные в переменных $_SESSION

4. @Джеймс (второй комментарий) Файлы cookie в качестве решения для вашего сценария применимы, и $ _SESSION связан с файлами cookie (прочитайте руководство). В любом случае, вы могли бы использовать cookies, если хотите.

Ответ №2:

Вам нужно сохранить его в сеансе. Документация.

В основном,

 session_start();

$myarray = $_SESSION['myarray'];
//work with $myarray here

//store it back in the session
$_SESSION['myarray'] = $myarray;
  

Ответ №3:

нажимайте данные onclick с помощью javascript. Затем попробуйте передавать всю очередь при каждом нажатии