#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. Затем попробуйте передавать всю очередь при каждом нажатии