Я просто понял – я понятия не имею, как POST пустого массива из HTML-формы на PHP. Я могу массивы POST размером 1 или больше, но есть ли способ опубликовать пустой массив? Я имею в виду, например, вы можете:
<form> <input type='hidden' name='items[0]' value='Value Item 1' /> <input type='hidden' name='items[1]' value='Value Item 2' /> </form>
который дает массив размером 2: $_POST['items'] === ["Value Item 1", "Value Item 2"]
но есть ли способ передать пустой массив как значение ключа $ _POST? То есть, я знаю, что могу сделать $POST['items'] === ''
, но пустой массив ( []
)?
Конкретный вариант использования: у меня есть одна-много форма, скажем, как корзина с товарами. Форма заполняется существующими «элементами» из БД, но может добавлять или удалять элементы, которые находятся в массиве элементов. Массив элементов индексируется – если новые элементы добавлены, они сохраняются в БД; если элементы удалены, они удаляются из массива и удаляются из БД.
Все это прекрасно работает – если все элементы не удалены из формы, в этом случае ключ «элемент» не передается.
Я нашел отличную рабочую среду, которая заключается в том, чтобы поместить скрытый ввод «items» = null в начало формы, поэтому ключ передается, даже если нет элементов, а затем в PHP, если ключ «items» «Я конвертирую его в пустой массив – так что все работает нормально. Мне было любопытно теоретически, можно ли POST пустым массивом. Не знаю, почему это считается неуместным – надеюсь, что объяснение поможет.
Что касается того, почему я хочу проверить наличие ключа – я использую один и тот же общий код для обработки входов из разных форм – поэтому, если пользователь изменяет адрес в корзине покупок без указания элементов, элементы не должны удаляться просто потому, что нет ключа «предметов».
Чтобы пояснить далее, я на самом деле не создаю «корзину покупок». Я создаю абстрактную структуру, которая поддерживает сопоставление сообщений «один-ко-многим» с сообщениями «Плохие отношения один-ко-многим». Любое поле в POST с пустым значением удаляется из объекта, но любое поле / ключ NOT в POST НЕ удаляется или не изменяется в базовой БД.
Точка, я строю универсальный набор инструментов – не просто пытаюсь заставить одну функцию обрабатывать одну форму.
Нет, вы не можете (хотя, кажется, бессмысленно это знать).
Когда вы задаете поле формы массива, оно дает столько же индексов, сколько есть значений. В этом случае это пустая строка, то есть ее значение не было ничем ( ''
), просто потому, что оно существует. Для PHP без явного значения означает что-то пустое или пустое, которое считается действительным значением. Ничто не означает, что не объявляется или не определяется вообще , что не относится к пустым массивам или массиву пустых значений.
<form method="POST" id="test" action="test.php"> <input type='hidden' name='items[]' /> </form> <input type="submit" value="Send" form="test">